Squid 및 DansGuardian 투명 프록시 구성 가이드
이 문서는 Ubuntu 계열 시스템에서 Squid 프록시와 DansGuardian을 투명 프록시로 연결하고 NTLM 인증 및 Winbind 권한 문제를 해결하는 단계별 가이드입니다. 주요 구성 파일 수정, 권한 영구화 스크립트 추가, ipmasq 방화벽 규칙 적용, Webmin 모듈 설치 및 점검 목록을 제공합니다.
목표 및 적용 범위
이 가이드는 다음을 달성하도록 설계되었습니다.
- Squid를 NTLM 인증으로 구성하여 도메인 사용자 인증 지원
- DansGuardian을 앞단 필터로 배치하여 콘텐츠 필터링을 수행
- Winbindd 권한 문제 해결을 위해 부팅 시 권한을 재설정
- ipmasq로 투명 프록시를 라우팅하고 포트 포워딩을 설정
- Webmin에서 DansGuardian 모듈을 설치하여 관리 편의성 제공
대상 독자: 리눅스 서버 관리자, 네트워크 엔지니어. 사전 요구: 기본적인 쉘 사용, 루트 권한, Samba/Winbind 및 도메인 가입 경험.
사전 점검 체크리스트
- 서버가 도메인에 가입되어 있는지 확인합니다.
- Samba/Winbind가 설치되고 실행 중인지 확인합니다.
- Squid 및 DansGuardian이 설치되어 있는지 확인합니다.
- Webmin이 설치되어 있거나 설치 가능한지 확인합니다.
- 방화벽/라우터 접근 권한이 있는지 확인합니다.
Important
Squid의 forwarded_for 기본값은 내부 IP를 외부 사이트로 전달할 수 있으니 반드시 설정 변경을 적용하세요.
1. Squid 프록시 서버 구성
- 설정 파일 백업 및 편집
다음 명령으로 설정 파일을 백업하고 편집합니다.
cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
nano -c /etc/squid/squid.conf
원본 지시대로 다음 줄을 수정하세요 (라인 번호는 예시이며 실제 파일의 위치를 확인하세요).
- 73번째 줄을 다음으로 변경: http_port 127.0.0.1:3128 transparent
- 74번째 줄을 다음으로 변경: http_port 8080
- 593번째 줄을 다음으로 변경: cache_peer 127.0.0.1 parent 8081 0 no-query login=*:nopassword
- NTLM/Basic helper 활성화
다음 블록을 주석 해제하거나 활성화합니다. 라인 범위는 예시이므로 실제 파일에서 해당 블록을 찾아 다음 실행 파일로 대체하세요.
- 1791부터 1783(역순 표기 오류 가능) 범위를 주석 해제하여 다음으로 교체:
/usr/bin/ntlm_auth –helper-protocol=squid-2.5-ntlmssp
- 1800부터 1803 범위를 주석 해제하여 다음으로 교체:
/usr/bin/ntlm_auth –helper-protocol=squid-2.5-basic
- ACL 및 접근 정책 수정
- 2449번째 줄: acl ntlm_auth proxy_auth REQUIRED
- 2579번째 줄: http_access allow ntlm_auth
- 3161번째 줄: forwarded_for off
이 설정은 Squid가 프록시를 통해 연결된 사용자의 도메인 인증을 요구하고, 클라이언트의 실제 내부 IP가 외부 사이트에 전달되지 않도록 합니다.
중요 설명
forwarded_for off는 내부 IP가 외부에 노출되는 것을 방지합니다. 기본값을 그대로 두면 내부 네트워크 IP가 방문 사이트에 전송됩니다.
설정 저장 후 Squid를 재시작하여 적용하세요.
2. Winbindd 권한 문제 해결 (부팅 시 권한 재설정)
문제: Squid가 Winbindd의 특수 소켓 /var/run/samba/winbindd_privileged에 접근해야 하지만 해당 파일의 그룹 권한이 초기화되어 접근이 차단될 수 있습니다. 재부팅 시 권한이 초기화되므로 부팅 시마다 권한을 재설정하는 스크립트를 추가합니다.
/etc/init.d/winbind-ch.sh 파일을 생성/편집하고 다음 내용을 붙여넣습니다.
#!/bin/sh
#set -x
WINBINDD_PRIVILEGED=/var/run/samba/winbindd_privileged
chmodgrp() {
chgrp proxy $WINBINDD_PRIVILEGED || return 1
chmod g+w $WINBINDD_PRIVILEGED || return 1
}
case "$1" in
start)
chmodgrp
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac
#EOF
그다음 부팅 스크립트에 추가합니다.
update-rc.d winbind-ch.sh start 21 2 3 4 5 .
이 스크립트는 부팅 시 winbindd 소켓의 그룹을 proxy로 변경하고 그룹 쓰기 권한을 부여합니다. 권한 문제가 계속 발생하면 systemd 환경에서는 별도의 systemd 서비스 단위 파일로 전환하는 것을 권장합니다.
Notes
systemd 기반 시스템에서는 /etc/init.d 스크립트 대신 systemd 서비스 유닛을 사용하는 편이 더 안정적입니다. 이 가이드는 init 스크립트 방식을 설명하지만 필요하면 systemd 서비스 유닛 예시를 요청하세요.
3. DansGuardian 구성
- 기본 설정 편집
편집할 파일:
/etc/dansguardian/dansguardian.conf
- 3번째 줄을 주석 처리
- 62번째 줄에서 포트를 8080에서 8081로 변경
- 102번째 줄에서 filtergroups = 1을 filtergroups = 2로 변경하고 그룹 파일을 생성
그룹 파일 복사 및 편집:
cp /etc/dansguardian/dansguardianf1.conf /etc/dansguardian/dansguardianf2.conf
nano -c /etc/dansguardian/dansguardianf2.conf
- 해당 파일의 29번째 줄을 다음으로 변경: naughtynesslimit = 100
- 바이러스 정의 예외
안티바이러스 업데이트 서버의 정의 파일은 스캐닝에서 차단될 가능성이 높으므로 예외에 추가하세요.
- /etc/dansguardian/exceptionvirussitelist 파일에 AV 정의 업데이트 도메인을 추가합니다. 예: activeupdate.trendmicro.com
- 필요하면 /etc/dansguardian/exceptionsitelist에도 도메인 추가. 예: trendmicro.com
- DansGuardian 재시작
/etc/init.d/dansguardian restart
주의
Defang 또는 다른 보안 장치가 있는 경우 추가 예외가 필요할 수 있습니다. AV 정의 URL은 자주 바뀔 수 있으므로 문제가 생기면 로그를 확인하여 차단된 호스트를 파악하세요.
4. 방화벽 구성 및 투명 프록시 라우팅
ipmasq 설치:
apt-get install ipmasq -y
위에서 DansGuardian을 8081 포트로 설정했으므로 모든 아웃고잉 HTTP(포트 80) 트래픽을 8081로 리다이렉션해야 합니다. ipmasq 예제 규칙을 복사합니다:
cp /usr/share/doc/ipmasq/examples/basics/I89tproxy.rul /etc/ipmasq/rules/I89tproxy.rul
내부 서버에 포트 포워딩이 필요한 경우 다음 예제를 참고하세요:
/usr/share/doc/ipmasq/examples/dnat/C50dnat.rul
네트워크 토폴로지 힌트
- 도메인에 가입된 클라이언트: 브라우저 -> Squid(127.0.0.1:3128) -> DansGuardian(8081) -> Squid(8080) -> 인터넷
- 비도메인 클라이언트: 브라우저 -> DansGuardian(8081) -> Squid(8080) -> 인터넷
이 흐름 때문에 로그에서 내부 도메인 클라이언트의 요청이 127.0.0.1로 보일 수 있습니다. 이는 로컬 루프백을 통해 프록시 체인이 연결되기 때문입니다.
5. Webmin에 DansGuardian 모듈 설치
Web 브라우저로 다음에 접속하여 로그인합니다.
Webmin > Webmin Configuration > Webmin Modules 로 이동합니다. “From ftp or http URL” 옵션을 선택하고 다음 URL을 붙여넣어 설치합니다.
http://internap.dl.sourceforge.net/sourceforge/dgwebminmodule/dg-0.5.10-pr5.wbm
설치 후 Webmin을 통해 DansGuardian 규칙 및 예외를 더 쉽게 관리할 수 있습니다.
6. 최종 테스트 및 검증
- 서버 재부팅
- 테스트 브라우저의 프록시를 서버 IP와 포트 8080으로 설정
- 도메인에 가입된 컴퓨터에서 사이트 접속: 자동 NTLM 인증이 작동하는지 확인
- 도메인 가입이 안 된 컴퓨터에서 브라우저 접속: 차단/허용 로그와 사용자 표시를 확인
- Webmin의 DansGuardian 로그와 시스템 syslog를 확인하여 인증/차단 오류를 점검
팁
Internet Explorer에서 NTLM 실패 시 사용자 이름을 도메인\사용자 형식으로 입력해야 할 수 있습니다.
문제 해결 체크리스트
- Squid 로그(/var/log/squid/) 및 syslog에서 인증 및 연결 에러 확인
- /var/run/samba/winbindd_privileged 권한이 proxy 그룹, 그룹 쓰기 권한인지 확인
- ntlm_auth 경로가 실제로 존재하는지 확인: /usr/bin/ntlm_auth
- ipmasq 규칙이 올바르게 적용되었는지 확인: iptables 규칙 확인
- DansGuardian 로그에서 예외로 지정한 도메인이 차단되는지 확인
간단한 진단 명령 예시:
- ps aux | grep winbind
- ls -l /var/run/samba/winbindd_privileged
- grep ntlm_auth /etc/squid/squid.conf
- iptables -t nat -L -n –line-numbers
역할 기반 체크리스트
관리자(서버 설치/설정 담당)
- Samba/Winbind 설치 및 도메인 가입 완료
- Squid, DansGuardian 설치 및 서비스 활성화
- init 스크립트 또는 systemd 서비스로 권한 부여 자동화
- ipmasq 규칙 배포 및 방화벽 포트 검증
운영자(일상 운영/모니터링 담당)
- DansGuardian 및 Squid 로그 주기적 확인
- 차단 false-positive 모니터링 및 예외 적용
- Webmin을 통한 정책 변경 시 변경 기록 유지
보안 및 개인정보 고려사항
- forwarded_for off 설정으로 클라이언트 내부 IP 노출을 차단하세요.
- NTLM 인증 로그에는 사용자 계정 정보가 포함될 수 있습니다. 로그 보관 정책 및 접근 제어를 검토하세요.
- 예외 도메인에 민감한 서비스가 포함되지 않도록 주의하세요.
대체 접근법 및 확장 아이디어
- systemd 환경에서는 앞서 설명한 init 스크립트 대신 systemd 서비스 단위를 작성하여 더 견고하게 권한을 설정하세요.
- Traffic 관리를 위해 Squid 캐시 정책을 조정하여 대역폭 절감 효과를 노릴 수 있습니다.
- 고가용성이 필요하면 Squid/DansGuardian을 여러 대 구성하고 로드 밸런서를 배치하세요.
테스트 케이스와 수락 기준
- 도메인 가입 사용자가 자동으로 NTLM 인증으로 인터넷 접속 가능
- 비도메인 사용자는 필터 규칙에 따라 적절히 차단/허용됨
- 재부팅 후에도 /var/run/samba/winbindd_privileged 권한이 올바르게 설정됨
- 로그에 도메인 사용자명과 접속 URL이 나타남(개인정보 정책에 맞게 로그 보관)
요약
이 가이드는 Squid와 DansGuardian을 연동하여 투명 프록시를 구성하고 Winbind 권한 문제를 부팅 시 자동으로 해결하는 방법을 설명합니다. ipmasq로 트래픽을 리다이렉트하고 Webmin 모듈을 통해 관리를 편리하게 하며, 테스트 및 문제 해결 체크리스트를 제공합니다. 구성 변경 후에는 로그를 통해 인증 흐름과 필터링 동작을 반드시 검증하세요.
참고 링크