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 어플리케이션 |
끝
'Guide & Tips' 카테고리의 다른 글
[SNI 차단우회] 토렌X등 차단 사이트 접속 방법(완결) (0) | 2023.09.03 |
---|---|
[splunk] Free Splunk 에 인증, 접근 제어, https 적용하기 (0) | 2023.06.30 |