[squid 프록시] Squid에 나가는 아웃바운드 소스 IP,PORT 설정 방법

1.squid 프록시가 연결 요청 받고  외부 통신을 하는 흐름은 다음과 같습니다.

예를 들면 A 라는 시스템에서 프록시를 경유해서 https://download.docker.com 에 접근을 합니다.

A 시스템은 프록시 서버의 지정 포트 (예를 들면 TCP 3128) 로 연결 하고,

프록시 서버는 이 연결의 받아 https://download.docker.com 로 아웃바운드 연결을 합니다.

 

통신 내역을 확인 하면 아래와 같습니다.

 

[root@squid_px1:~]# lsof -i -n
squid    47794    squid   10u  IPv4 3525216      0t0  TCP *:squid (LISTEN)
squid    47794    squid   13u  IPv4 3596485      0t0  TCP 192.168.100.20:squid->192.168.100.20:52290 (ESTABLISHED)
squid    47794    squid   14u  IPv4 3596487      0t0  TCP 192.168.100.20:33824->54.230.61.68:https (SYN_SENT)

 

squid 프록시는 로컬 서버에서 (192.168.100.20)에서 임의 포트(위의 경우 TCP 33824)를 할당하여

54.230.61.68 (https://download.docker.com) 으로 연결 하고 응답값을 A 시스템에 전송합니다. 

 

33824등 포트번호는 squid 프록시가 아웃 바운드 할때 마다 매번 바뀝니다.

 

squid    47794    squid   13u  IPv4 3602941      0t0  TCP 192.168.100.20:squid->192.168.100.20:47270 (ESTABLISHED)
squid    47794    squid   14u  IPv4 3602943      0t0  TCP 192.168.100.20:42332->54.230.61.119:https (SYN_SENT)

squid    47794    squid   13u  IPv4 3602941      0t0  TCP 192.168.100.20:squid->192.168.100.20:47270 (ESTABLISHED)
squid    47794    squid   14u  IPv4 3603387      0t0  TCP 192.168.100.20:39378->54.230.61.102:https (SYN_SENT)

 

여러번 해보면 33824, 42332, 39378 를 사용 했네요. 임의로 동적 포트를 할당해서 통신 하므로 매번 변경 됩니다.

 

2.squid 프록시가 아웃바운드 할때 src IP와 port 는 tcp_outgoing_address 구문으로 지정 할 수 있습니다.

tcp_outgoing_address 를 구문은 squid 프록시가 아웃바운드 할때 사용할 인터페이스를 지정하는 구문입니다.

 

tcp_outgoing_address 192.168.100.20 port 12345

 

위의 경우 outbound 시 192.168.100.20을 사용하고 src 포트는 12345 를 사용하는 내용입니다.

 

예를 들면 squid 프록시 서버에 IP 주소가 2개가 (이더넷이 2개) 있다고 가정합니다. (192.168.100.20, 192.168.100.21)

squid 프록시가 외부로 아웃바운드 통신을 할때 나가는 IP 주소는 192.168.100.20을 사용하고 

소스 포트는 tcp 12345 를 사용 한다는 내용입니다.

 

3.아래는 tcp_outgoing_address 이용하는 다른 예시 입니다.

You can forward clients request based on IPs for certain users:

#define acl
acl admin 192.168.1.100
acl tom 192.168.1.101
acl raj 192.168.1.102
 
# set up outgoing rule
tcp_outgoing_address 192.168.1.254 admin
tcp_outgoing_address 192.168.1.253 tom
tcp_outgoing_address 192.168.1.253 raj
However, forwarding clients with dedicated IPs for certain subnets is more useful:

## full filtering enabled using iptables on 10.0.0.0/24 and routed via squid##
acl throttle_service_net src 10.0.0.0/24
 
## admins are skip from this limits ##
acl admins_service_net src 192.168.1.0/24
 
## Set rules ##
tcp_outgoing_address 10.1.0.2 throttle_service_net
tcp_outgoing_address 192.168.1.254 admins_service_net

 

4.방화벽에서 squid 프록시 아웃바운드 정책은 아래의 형태로 적용 할 수 있습니다.

1) 일반 방화벽

 

source dst
squid 프록시IP:source 포트 프록시가 아웃바운드 통신을 해야할 대상 (port 또는 url 목록)

 

2) 어플리케이션 방화벽

 

source dst
squid 프록시가 구동중인 시스템IP + 어플리케이션 명이 squid 프록시 HTTP, SSL 어플리케이션