Squid 프록시 서버 구축 및 세밀한 접근 제어 설정

프록시 캐시 동작 원리

프록시 서버는 클라이언트와 원격 서버 사이에서 중계 역할을 수행한다. 첫 번째 사용자가 파일을 요청하면 프록시가 해당 파일을 로컬에 저장하고, 이후 동일한 요청이 발생할 때 원격 서버 대신 캐시된 복사본을 제공한다.

주요 이점은 다음과 같다:

  • 응답 시간 단축: 원격 요청 감소로 지연 시간 최소화
  • 대역폭 절약: 반복되는 데이터 전송량 감소
  • 중앙 집중식 보안 관리: 전사적 네트워크 접근 정책 적용

추가적으로 특정 웹사이트, 포트, 서비스에 대한 접근을 허용하거나 차단할 수 있다. 예를 들어 쇼핑몰, 채용 사이트, 게임, 동영상 플랫폼 접근을 금지하거나 특정 시간대에만 외부 인터넷 사용을 허용할 수 있다.

배포 모드 비교

모드설정 방식사용자 인지적용 환경
선택적 프록시비강제명시적성능 최적화
명시적 강제 프록시수동 설정명시적기업 기본 통제
투명 프록시게이트웨이 자동 라우팅무감각엄격한 규정 준수

Squid 설치 및 기본 환경 구성

네트워크 환경 준비

서버 환경:

  • 운영체제: Rocky Linux 또는 AlmaLinux
  • 서버 IP: 192.168.0.50/24 (브리지 모드)
  • 게이트웨이: 192.168.0.1
  • DNS: 8.8.8.8

클라이언트 환경 설정:

# 정적 IP 설정
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.0.100/24
nmcli connection up eth0

# 외부 연결 차단 확인 (의도적으로 실패해야 함)
curl -I https://www.google.com --connect-timeout 5

Squid 패키지 설치 및 실행

# 저장소 업데이트 및 설치
dnf update -y
dnf install squid -y

# 서비스 활성화
systemctl enable --now squid

# 방화벽 규칙 적용
firewall-cmd --permanent --add-service=squid
firewall-cmd --reload

# 설치 확인
rpm -qa | grep squid
squid --version

클라이언트 프록시 연결 설정

Firefox 브라우저 설정:

  1. 설정 → 네트워크 설정 → 수동 프록시 구성
  2. HTTP 프록시: 192.168.0.50, 포트: 3128
  3. "모든 프로토콜에 이 프록시 사용" 체크

연결 검증 테스트:

# Squid 중지 시 접근 불가 확인
systemctl stop squid
# 브라우저에서 웹사이트 접속 시도 (실패 예상)

# Squid 재시작 후 정상 동작 확인
systemctl start squid

고급 ACL 설정 및 접근 제어

핵심 설정 파일 구조

/etc/squid/squid.conf의 주요 지시어:

지시어기능
http_port수신 포트 정의 (기본 3128)
acl접근 제어 목록 생성
http_accessACL 기반 허용/거부 결정

설정 파일 정리된 내용 확인:

grep -vE '^\s*#|^\s*$' /etc/squid/squid.conf | head -50

ACL 유형 및 적용 예시

IP 주소 기반 제어:

# 허용할 클이언트 정의
acl authorized_hosts src 192.168.0.100 192.168.0.101
acl internal_network src 10.0.0.0/8 172.16.0.0/12

http_access allow authorized_hosts
http_access deny all

URL 키워드 필터링:

# 특정 문자열이 포함된 URL 차단
acl prohibited_terms url_regex -i "gambling|betting|casino"
acl shopping_sites url_regex -i "amazon\.com|ebay\.com|aliexpress"

http_access deny prohibited_terms
http_access deny shopping_sites

파일 확장자 차단:

# 실행 파일 및 미디어 다운로드 제한
acl dangerous_extensions urlpath_regex -i \.(exe|msi|bat|cmd|scr)$
acl media_files urlpath_regex -i \.(mp4|avi|mkv|mov|wmv)$

http_access deny dangerous_extensions
http_access deny media_files

시간대 기반 접근 통제

# 업무 시간 정의 (월-금, 09:00-18:00)
acl business_hours time MTWHF 09:00-18:00
acl lunch_break time MTWHF 12:00-13:00

# 업무 시간 외 인터넷 사용 차단
http_access deny !business_hours

# 또는 점심 시간만 허용
# http_access allow lunch_break
# http_access deny all

안전한 포트 관리

# 허용할 서비스 포트 정의
acl secure_services port 80 443 22
acl mail_services port 25 587 993 995

http_access deny !secure_services !mail_services

캐시 저장소 및 모니터링

디스크 캐시 구성

# 캐시 디렉터리 초기화
squid -z

# 설정 파일에서 캐시 크기 조정
cache_dir ufs /var/spool/squid 2000 16 256
# 형식: 저장 방식, 경로, 용량(MB), 1차 디렉터리 수, 2차 디렉터리 수

# 메모리 캐시 설정
cache_mem 512 MB
maximum_object_size_in_memory 512 KB

캐시 관리자 인터페이스

# 런타임 정보 조회
squidclient -h localhost -p 3128 mgr:info | head -30

# 캐시 객체 통계
squidclient mgr:storedir

# 활성 연결 확인
squidclient mgr:client_list

로그 분석 및 문제 해결

# 실시간 접근 로그 모니터링
tail -f /var/log/squid/access.log | awk '{print $3, $7, $9}'

# 설정 파일 구문 검증
squid -k parse

# 설정 변경 후 재로드 (서비스 중단 없음)
squid -k reconfigure

# 캐시 효율성 확인
squidclient mgr:counters | grep -E "cache|hit|miss"

운영 환경 적용 시나리오

연구 개발부서 특화 정책

# GitHub 및 기술 문서 사이트만 허용
acl dev_team src 192.168.10.0/24
acl tech_resources dstdomain .github.com .stackoverflow.com .docs.python.org

http_access allow dev_team tech_resources
http_access deny dev_team

게스트 네트워크 제한

# 게스트 대역폭 제한 및 시간 제약
acl guest_wifi src 192.168.100.0/24
acl peak_hours time SMTWHFA 08:00-22:00

delay_pools 1
delay_class 1 2
delay_access 1 allow guest_wifi
delay_parameters 1 1000000/1000000 50000/50000

http_access allow guest_wifi peak_hours
http_access deny guest_wifi

SSL Bump를 통한 HTTPS 검사 (고급)

# SSL 인증서 생성 및 설정
openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 \
  -keyout /etc/squid/ssl_bump.pem -out /etc/squid/ssl_bump.pem

# squid.conf 설정
http_port 3128 ssl-bump cert=/etc/squid/ssl_bump.pem generate-host-certificates=on
ssl_bump bump all

핵심 운영 원칙

  1. ACL 규칙은 위에서 아래로 순차 평가되며, 첫 번째 일치 항목이 적용된다
  2. 모든 http_access 체인의 마지막에 명시적 거부 규칙(http_access deny all)을 포함해야 한다
  3. 설정 변경 후 반드시 squid -k parse로 구문 검증을 수행한다
  4. 대규모 환경에서는 외부 인증(LDAP, Kerberos)과 연동을 고려한다
  5. 캐시 디렉터리는 전용 디스크 또는 고성능 스토리지에 배치한다

태그: Squid 프록시서버 ACL 캐시서버 네트워크보안

6월 21일 17:25에 게시됨