6.3. kerberos 인증을 사용하여 캐싱 프록시로 Squid 설정
Kerberos를 사용하여 AD(Active Directory)에 사용자를 인증하는 캐싱 프록시로 Squid를 구성할 수 있습니다. 이 절차에서는 인증된 사용자만 프록시를 사용할 수 있도록 구성합니다.
사전 요구 사항
-
이 절차에서는
/etc/squid/squid.conf파일이squid패키지에서 제공되는 것으로 가정합니다. 이전에 이 파일을 편집한 경우 파일을 제거하고 패키지를 다시 설치합니다.
프로세스
다음 패키지를 설치합니다.
# yum install squid krb5-workstationAD 도메인 관리자로 인증합니다.
# kinit administrator@AD.EXAMPLE.COMSquid의 키탭을 만들고 이를
/etc/squid/HTTP.keytab파일에 저장하고 keytab에HTTP서비스 주체를 추가합니다.# export KRB5_KTNAME=FILE:/etc/squid/HTTP.keytab # net ads keytab CREATE -U administrator # net ads keytab ADD HTTP -U administrator선택 사항: 시스템이 realm(
adcli를 통해)과 함께 AD 도메인에 처음 가입된 경우 다음 지침을 사용하여HTTP주체를 추가하고 squid에 대한 키탭 파일을 생성합니다.기본 키탭 파일
/etc/krb5.keytab에HTTP서비스 주체를 추가하고 확인합니다.# adcli update -vvv --domain=ad.example.com --computer-name=PROXY --add-service-principal="HTTP/proxy.ad.example.com" -C # klist -kte /etc/krb5.keytab | grep -i HTTP/etc/krb5.keytab파일을 로드하고HTTP를 제외한 모든 서비스 주체를 제거하고 나머지 주체를/etc/squid/HTTP.keytab파일에 저장합니다.# ktutil ktutil: rkt /etc/krb5.keytab ktutil: l -e slot | KVNO | Principal ----------------------------------------------------------------------------- 1 | 2 | PROXY$@AD.EXAMPLE.COM (aes128-cts-hmac-sha1-96) 2 | 2 | PROXY$@AD.EXAMPLE.COM (aes256-cts-hmac-sha1-96) 3 | 2 | host/PROXY@AD.EXAMPLE.COM (aes128-cts-hmac-sha1-96) 4 | 2 | host/PROXY@AD.EXAMPLE.COM (aes256-cts-hmac-sha1-96) 5 | 2 | host/proxy.ad.example.com@AD.EXAMPLE.COM (aes128-cts-hmac-sha1-96) 6 | 2 | host/proxy.ad.example.com@AD.EXAMPLE.COM (aes256-cts-hmac-sha1-96) 7 | 2 | HTTP/proxy.ad.example.com@AD.EXAMPLE.COM (aes128-cts-hmac-sha1-96) 8 | 2 | HTTP/proxy.ad.example.com@AD.EXAMPLE.COM (aes256-cts-hmac-sha1-96)ktutil의 대화형 쉘에서는 원하지 않는 모든 주체가 키탭에서 제거될 때까지 다양한 옵션을 사용할 수 있습니다. 예를 들면 다음과 같습니다.ktutil: delent 1ktutil: l -e slot | KVNO | Principal ------------------------------------------------------------------------------- 1 | 2 | HTTP/proxy.ad.example.com@AD.EXAMPLE.COM (aes128-cts-hmac-sha1-96) 2 | 2 | HTTP/proxy.ad.example.com@AD.EXAMPLE.COM (aes256-cts-hmac-sha1-96) ktutil: wkt /etc/squid/HTTP.keytab ktutil: q주의SSSD 또는 Samba/winbind에서 시스템 계정 암호를 업데이트할 경우
/etc/krb5.keytab의 키가 업데이트될 수 있습니다. 업데이트 후/etc/squid/HTTP.keytab의 키가 작동하지 않으며ktutil단계를 다시 수행하여 새 키를 키탭에 복사해야 합니다.
키탭 파일의 소유자를
squid사용자로 설정합니다.# chown squid /etc/squid/HTTP.keytab선택 사항: 키탭 파일에 프록시 서버의 FQDN(정규화된 도메인 이름)에 대한
HTTP서비스 주체가 포함되어 있는지 확인합니다.# klist -k /etc/squid/HTTP.keytab Keytab name: FILE:/etc/squid/HTTP.keytab KVNO Principal ---- --------------------------------------------------- ... 2 HTTP/proxy.ad.example.com@AD.EXAMPLE.COM .../etc/squid/squid.conf파일을 편집합니다.negotiate_kerberos_auth도우미 유틸리티를 구성하려면/etc/squid/squid.conf상단에 다음 구성 항목을 추가합니다.auth_param negotiate program /usr/lib64/squid/negotiate_kerberos_auth -k /etc/squid/HTTP.keytab -s HTTP/proxy.ad.example.com@AD.EXAMPLE.COM다음은 위 예제의
negotiate_kerberos_auth도우미 유틸리티에 전달된 매개변수를 설명합니다.-
-k 파일은키 탭 파일의 경로를 설정합니다. squid 사용자에게 이 파일에 대한 읽기 권한이 있어야 합니다. -s HTTP/host_name@kerberos_realm은 Squid가 사용하는 Kerberos 주체를 설정합니다.선택적으로 다음 매개변수 중 하나 또는 둘 다를 도우미 유틸리티에 전달하여 로깅을 활성화할 수 있습니다.
-
-I는 인증 사용자와 같은 정보 메시지를 기록합니다. -d는 디버그 로깅을 활성화합니다.squid는 도우미 유틸리티의 디버깅 정보를
/var/log/squid/cache.log파일에 기록합니다.
-
인증된 사용자만 프록시를 사용할 수 있도록 Squid를 구성하는 다음 ACL 및 규칙을 추가합니다.
acl kerb-auth proxy_auth REQUIRED http_access allow kerb-auth중요http_access가 모든 규칙을 거부하기전에 이러한 설정을 지정합니다.localnetACL에 지정된 IP 범위에서 프록시 인증을 바이패스하려면 다음 규칙을 제거합니다.http_access allow localnet다음 ACL은 기본 구성에 존재하며 HTTPS 프로토콜을 사용하는 포트로
443을 정의합니다.acl SSL_ports port 443사용자가 다른 포트에서도 HTTPS 프로토콜을 사용할 수 있어야 하는 경우 다음 포트 각각에 대해 ACL을 추가합니다.
acl SSL_ports port port_numberSquid가 연결을 설정할 수 있는 포트를 구성하려면
acl Safe_ports규칙 목록을 업데이트합니다. 예를 들어 프록시를 사용하여 클라이언트가 포트 21(FTP), 80(HTTP) 및 443(HTTPS)의 리소스에만 액세스할 수 있도록 구성하려면 구성에 다음acl Safe_ports명령만 유지합니다.acl Safe_ports port 21 acl Safe_ports port 80 acl Safe_ports port 443기본적으로 구성에는
Safe_ports ACL에 정의되지 않은 포트에 대한 액세스 거부 거부 !Safe_ports규칙이 포함되어 있습니다.cache 유형, 캐시 디렉터리의 경로, 캐시 크기 및
cache_dir매개변수의 추가 캐시 유형별 설정을 구성합니다.cache_dir ufs /var/spool/squid 10000 16 256이 설정에서는 다음을 수행합니다.
-
squid는
ufs캐시 유형을 사용합니다. -
squid는 캐시를
/var/spool/squid/디렉터리에 저장합니다. -
캐시는 최대
10000MB로 증가합니다. -
squid는
/var/spool/squid/디렉터리에16level-1 하위 디렉터리를 생성합니다. squid는 각 level-1 디렉토리에
256개의 하위 디렉터리를 생성합니다.cache_dir지시문을 설정하지 않으면 Squid는 캐시를 메모리에 저장합니다.
-
squid는
cache_dir매개변수에서/var/spool/squid/와 다른 캐시 디렉토리를 설정하는 경우:캐시 디렉토리를 만듭니다.
# mkdir -p path_to_cache_directory캐시 디렉터리에 대한 권한을 구성합니다.
# chown squid:squid path_to_cache_directory강제모드에서 SELinux를 실행하는 경우 캐시 디렉터리에 대한squid_cache_t컨텍스트를 설정합니다.# semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" # restorecon -Rv path_to_cache_directorysemanage유틸리티를 시스템에서 사용할 수 없는 경우policycoreutils-python-utils패키지를 설치합니다.
방화벽에서
3128포트를 엽니다.# firewall-cmd --permanent --add-port=3128/tcp # firewall-cmd --reloadsquid서비스를 활성화하고 시작합니다.# systemctl enable --now squid
검증
프록시가 올바르게 작동하는지 확인하려면
curl유틸리티를 사용하여 웹 페이지를 다운로드합니다.# curl -O -L "https://www.redhat.com/index.html" --proxy-negotiate -u : -x "proxy.ad.example.com:3128"curl에서 오류를 표시하지 않고index.html파일이 현재 디렉터리에 있으면 프록시가 작동합니다.
문제 해결 단계
AD 계정의 Kerberos 티켓을 받습니다.
# kinit user@AD.EXAMPLE.COM선택 사항: 티켓을 표시합니다.
# klistnegotiate_kerberos_auth_test유틸리티를 사용하여 인증을 테스트합니다.# /usr/lib64/squid/negotiate_kerberos_auth_test proxy.ad.example.com도우미 유틸리티에서 토큰을 반환하는 경우 인증에 성공했습니다.
Token: YIIFtAYGKwYBBQUCoIIFqDC...