본문 바로가기
공부/Linux

[Linux] Squid로 HTTP Proxy 구성해서 Outbound Domain 제어하기

by haejang 2021. 8. 28.
728x90
728x90

 

Reference


 

목표


Window Client의 웹에서 특정 도메인으로만 접속할 수 있게 제어하고 싶음

 

 

✔ 위 구조의 WorkSpace와 AWS Console URL은 이전 글에서 만든 리소스들임
✔ WorkSpace가 아닌 Window EC2로 실습해도 무관하며, 접속하고자 하는 URL도 본인이 원하는 URL로 사용

 

그리고 이는 Squid 라는 오픈소스 소프트웨어 프록시 서버를 통해 구현할 수 있다

※ Squid Proxy Server는 Workspaces가 존재하는 VPC 대역으로부터 TCP 3128 Port를 허용해줘야 한다

※ Squid Proxy Server EC2의 Networking 속성에서 source/destination check를 중지시켜야 한다

 

 

시작!


1) Squid 설치 (root로 진행)

yum install -y squid

 

2) ACL 설정

vi /etc/squid/squid.conf 파일의 초기 내용은 아래와 같다

#
# Recommended minimum configuration:
#

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT

#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 3128

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid

#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

이 중 allow할 네트워크 대역과 port, ACL만을 쓴다면 아래와 같다

acl localnet src 10.0.0.0/16	# VPC 대역

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl CONNECT method CONNECT

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow localhost manager
http_access deny manager

acl allow_dst dstdomain .honglab.awsapps.com	# 허용할 도메인
http_access allow allow_dst						# 위의 allow_dst의 애들은 허용한다
http_access deny all							# 위에서 허용한 애들 말고는 다 deny

http_port 3128

coredump_dir /var/spool/squid

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

 

3) Squid 시작/활성화


systemctl start squid
systemctl enable squid

 

4) 클라이언트(윈도우) 설정


먼저, 현재 클라이언트에서는 허용하고 싶은 도메인 뿐만 아니라 google.com이나 naver.com 등 모든 웹에 접속이 가능하다

 

윈도우의 Setting > Network & Internet > Proxy

 

 

Automatically detect settings를 Off시키고, Use a proxy server를 On 시킨 후,

Proxy Server의 IP와 Squid 기본 포트 3128을 적어주자 (포트는 위의 squid.conf 파일에서 변경 가능)

 

그러고 다시 웹에 가보면?

 

 

구글과 네이버에 접속할 수 없다

그럼 내가 허용한 도메인에 접속해보겠다

 

 

얘는 아주 잘 나온다...그러나 로그인을 했더니

 

이러면 좀 곤란한디...

이는 URL에 접속할 때 다른 URL에서 리소스를 불러오는 경우가 있기 때문에 생긴다

걱정말고 F12를 눌러 개발자 도구의 Network 창을 킨 후 다시 로그인을 진행해보면 어느 URL에도 액세스를 해야하는지 확인할 수 있다

 

 

계속해서 실험을 해 본 결과, AWS Console에 접속하기 위해선 아래의 도메인들을 추가로 허용해줘야 함을 알 수 있었다

.cloudfront.net .aws.amazon.com .amazonaws.com .awsstatic.com

 

 

squid.conf 파일을 위와 같이 수정해준 후, systemctl restart squid를 해주었다

 

 

WorkSpace로 돌아와보니 AWS Console 접속이 잘 되는걸 확인할 수 있다

 

 

끝!

 

 

 

728x90
728x90

댓글