IT

Forward Proxy(squid) 사용하여 도메인 기반의 접근 제어 구성

미니스탑 2024. 6. 27. 12:48

개요

일반적으로 Proxy Server 란 클라이언트가 서버와 통신 할 때, 프록시 서버를 거쳐 통신하도록 일종의 중계 기능을 제공하는 서버를 뜻하며, 다음과 같은 기능을 제공합니다. 

 - 특정 사이트에 대한 접근제어 (허용, 거부)

 - 캐시를 통한 특정 리소스로의 접근 속도 향상

 - 클라이언트 정보 숨김

 - Inbound, outbound 컨텐츠에 대한 검사


 Squid 는 대표적인 오픈소스(GPL) 프록시 서버이자 웹 캐시로, HTTP, HTTPS, FTP 등 널리 사용되는 네트워크 프로토콜을 지원합니다.

 또한, Squid 를 웹 서버 앞에 배치하여 반복 요청을 캐싱하고 웹 트래픽을 필터링 또는 제한된 컨텐츠의 엑세스등을 할 수 있습니다.

 Squid 를 사용하여 Forward Proxy 를 구성한 후 특정 도메인에 대해서만 Outbound 접속이 가능하도록 White List 로 구성하는 방법에 대해 소개합니다.

 Squid 사용과 관련한 공식 가이드는 아래 링크를 참고하시기 바랍니다.

http://www.squid-cache.org/

 

squid : Optimising Web Delivery

Squid: Optimising Web Delivery Squid is a caching proxy for the Web supporting HTTP, HTTPS, FTP, and more. It reduces bandwidth and improves response times by caching and reusing frequently-requested web pages. Squid has extensive access controls and makes

www.squid-cache.org

 

- 주의 

Proxy Server를 구성할 때는 보안에 유의하여야 하며, 서비스 오픈 전 반드시 다음 사항을 체크하시기 바랍니다.

- 접속 허용할 URL White List 구성

- Proxy Server 에 접근할 자원의 허용 리스트 및 근거 관리 

- Proxy Server 의 접속 로그 1 년 이상 저장

 

프록시 구성

테스트 환경 - 네이버클라우드 Ubuntu 20.04 서버 1대, 공인IP 또는 NAT GW 추가

이중화 구성 - 네이버클라우드 Ubuntu 20.04 서버 2대, 공인 로드밸런서, NAT GW( 사설망 통신일 경우 사설 로드밸런서) 

 

Squid 설치

sudo apt install squid
#설정파일 백업
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original
sudo chmod a-w /etc/squid/squid.conf.original

#설정 변경
vi /etc/squid/squid.conf
  • 기본 포트 변경과 호스트네임은 설정 권고
 
#기본 포트 변경 #
http_port 5000

#호스트네임 설정
visible_hostname sslvpntest
  • ACL 변경 및 Cache off
 
#source ip 접근제어 설정
acl localnet src 192.168.1.6
http_access allow localnet
http_access deny all

#destnation url 접근제어 설정
acl allow_dst_reg dstdom_regex ncloud-docs 
acl allow_dst_reg dstdom_regex fin-ncloud ncloud

http_access allow allow_dst_reg

#cache는 선택사항

cache deny all
  • 기타 검토 사항
    : 프록시 인증 추가 여부
    : 로깅 설정 검토
cache_access_log /usr/local/squid/logs/access.log 
cache_log /usr/local/squid/logs/cache.log

#숫자가 커질 수록 상세 정보 기록
debug_options ALL,1

 

Squid 주요 명령어 및 구동

 

Squid 실행 : systemctl start squid

Squid enable : systemctl enable squid

Squid 재실행 : systemctl restart squid

Squid 종료 : systemctl stop squid

Squid 상태 : systemctl status squid

 

유저 프록시 설정

위의 설정한 프록시를 사용하기 위해서는 단말기에서 프록시 설정이 필요합니다.

  • Chrome(windows)
    설정 - 시스템 - 컴퓨터 프록시 설정 열기

  • safari(mac)
    설정 - 개인정보보호 - 프록시 설정

 

  • 리눅스(ubuntu, centos)
$ vi ~/.bashrc

(형식)
export http_proxy=username:password@proxy-server-ip:8080
export https_proxy=username:password@proxy-server-ip:8082
export ftp_proxy=username:password@proxy-server-ip:8080
export no_proxy=localhost, 127.0.0.1

(예시)
export http_proxy=111.111.111.111:5000
export https_proxy=111.111.111.111:5000
export ftp_proxy=111.111.111.111:5000
export no_proxy=localhost, 127.0.0.1

$ source ~/.bashrc

 

위의 설정은 특정 유저의 설정이며 서버 전역 설정은 environment에 추가해주면 프록시 사용이 가능합니다.

$ vi /etc/environment

(형식)
export http_proxy=username:password@proxy-server-ip:8080
export https_proxy=username:password@proxy-server-ip:8082
export ftp_proxy=username:password@proxy-server-ip:8080
export no_proxy=localhost, 127.0.0.1

(예시)
export http_proxy=111.111.111.111:5000
export https_proxy=111.111.111.111:5000
export ftp_proxy=111.111.111.111:5000
export no_proxy=localhost, 127.0.0.1

# 로그인 아웃/로그인

 

일시적인 프록시 사용을 위한 설정은 export를 활용합니다.

$ export HTTP_PROXY=username:password@proxy-server-ip:5000
$ export HTTPS_PROXY=username:password@proxy-server-ip:5000

 

  • Repository 사용을 위한 프록시 설정

yum repository

$ vi /etc/yum.conf
proxy=http://[IP]:[PORT]

 

apt repository

$ vi /etc/apt/apt.conf.d/apt.conf
# apt.conf 파일 내 다음 내용 추가
Acquire::http::proxy “http://[IP]:[Port]/”;
Acquire::https::proxy http://[IP]:[Port]/”;

 

  • docker 사용을 위한 프록시 설정
$ /etc/systemd/system/docker.service.d/http-proxy.conf

# http-proxy.conf 파일 내 다음 내용 추가
[Service]
Environment="HTTP_PROXY=http://[IP]:[Port]"
Environment="HTTPS_PROXY=http://[IP]:[Port]"

Conf 파일 수정 후에는 반드시 restart 를 수행하여야 합니다. daemon-reload 후 restart docker 를 수행하여 status 가 active인지 확인합니다.

 

맺음말

Squid proxy 라는 오픈소스를 활용하여 Forward-Proxy 를 구성한 후, 접근허용 목록(White lists)를 통해 도메인 기반의 접근제어를 구현하는 방법을 소개하였습니다. 소개한 Squid proxy 는 하나의 예시일 뿐, Proxy 역할을 수행할 수 있는 Nginx를 통해서도 구현이 가능합니다.

 운영환경에 해당 아키텍처를 적용할 때는 이중화나 보안 검토도 중요한 항목입니다. 그중에서도 Forward Proxy 의 Outbound 가 any 로 오픈되어 있어 보안에 취약할 수 있으므로 각별한 주의가 필요합니다. 서두에 언급한 것 처럼, Proxy 접근 제어 및 White List 목록에 대한 철저한 관리를 통해 안전하게 사용하세요.