Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

16.3. Kerberos 인증을 사용하여 캐싱 프록시 설정

이 섹션에서는 Kerberos를 사용하여 사용자를 AD(Active Directory) 인증하는 캐싱 프록시로 Squid의 기본 구성에 대해 설명합니다. 이 절차에서는 인증된 사용자만 프록시를 사용할 수 있도록 구성됩니다.

사전 요구 사항

  • 이 절차에서는 /etc/squid/squid.conf 파일이 squid 패키지에서 제공하는 것으로 가정합니다. 이전에 이 파일을 편집한 경우 파일을 제거하고 패키지를 다시 설치합니다.
  • Squid를 설치할 서버는 AD 도메인의 멤버입니다. 자세한 내용은 Red Hat Enterprise Linux 7 시스템 관리자 가이드에서 Samba를 도메인 멤버로 설정을 참조하십시오.

절차

  1. 다음 패키지를 설치합니다.
    # yum install squid krb5-workstation
  2. AD 도메인 관리자로 인증합니다.
    # kinit administrator@AD.EXAMPLE.COM
  3. Squid에 사용할 키탭을 생성하고 /etc/squid/HTTP.keytab 파일에 저장합니다.
    # export KRB5_KTNAME=FILE:/etc/squid/HTTP.keytab
    # net ads keytab CREATE -U administrator
  4. HTTP 서비스 주체를 keytab에 추가합니다.
    # net ads keytab ADD HTTP -U administrator
  5. 키탭 파일의 소유자를 squid 사용자로 설정합니다.
    # chown squid /etc/squid/HTTP.keytab
  6. 필요한 경우 키탭 파일에 프록시 서버의 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
    ...
    
  7. /etc/squid/squid.conf 파일을 편집합니다.
    1. 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 파일에 기록합니다.
    2. Squid가 인증된 사용자만 프록시를 사용하도록 허용하는 다음 ACL 및 규칙을 추가합니다.
      acl kerb-auth proxy_auth REQUIRED
      http_access allow kerb-auth
      중요
      http_access가 모든 규칙을 거부하기 전에 이러한 설정을 지정합니다.
    3. 다음 규칙을 제거하여 localnet ACL에 지정된 IP 범위에서 프록시 인증을 우회하지 않도록 비활성화합니다.
      http_access allow localnet
    4. 다음 ACL은 기본 구성에 있으며 HTTPS 프로토콜을 사용하는 포트로 443 을 정의합니다.
      acl SSL_ports port 443
      사용자가 다른 포트에서도 HTTPS 프로토콜을 사용할 수 있어야 하는 경우 다음 각 포트에 대한 ACL을 추가합니다.
      acl SSL_ports port port_number
    5. 연결을 설정할 수 있는 포트를 구성하도록 aclSafe_ports 규칙 목록을 업데이트합니다. 예를 들어 프록시를 사용하여 클라이언트가 포트 21(FTP), 80(HTTP) 및 443(HTTPS)의 리소스에만 액세스할 수 있도록 구성하려면 구성에서 다음 aclSafe_ports 문만 유지합니다.
      acl Safe_ports port 21
      acl Safe_ports port 80
      acl Safe_ports port 443
      기본적으로 이 구성에는 Safe_ports ACL에 정의되지 않은 포트에 대한 액세스 거부를 정의하는 http_access deny !Safe _ports 규칙이 포함됩니다.
    6. cache 유형, 캐시 디렉터리의 경로, 캐시 크기 및 cache _dir 매개변수의 추가 캐시 유형별 설정을 구성합니다.
      cache_dir ufs /var/spool/squid 10000 16 256
      다음 설정이 필요합니다.
      • squid는 ufs 캐시 유형을 사용합니다.
      • Squid는 캐시를 /var/spool/squid/ 디렉터리에 저장합니다.
      • 캐시는 최대 10000 MB까지 증가합니다.
      • squid는 /var/spool/squid/ 디렉토리에 16 level-1 하위 디렉토리를 만듭니다.
      • Squid는 각 level-1 디렉토리에 256 개의 하위 디렉토리를 생성합니다.
      cache_dir 지시문을 설정하지 않으면 Squid는 캐시를 메모리에 저장합니다.
  8. cache _dir 매개변수에서 /var/spool/squid/ 와 다른 캐시 디렉토리를 설정하는 경우:
    1. 캐시 디렉토리를 생성합니다.
      # mkdir -p path_to_cache_directory
    2. 캐시 디렉토리에 대한 권한을 구성합니다.
      # chown squid:squid path_to_cache_directory
    3. 강제 모드에서 SELinux를 실행하는 경우 캐시 디렉터리에 대한 squid_cache_t 컨텍스트를 설정합니다.
      # semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?"
      # restorecon -Rv path_to_cache_directory
      semanage 유틸리티를 시스템에서 사용할 수 없는 경우 policycoreutils-python-utils 패키지를 설치합니다.
  9. 방화벽에서 3128 포트를 엽니다.
    # firewall-cmd --permanent --add-port=3128/tcp
    # firewall-cmd --reload
  10. squid 서비스를 시작합니다.
    # systemctl start squid
  11. 시스템이 부팅될 때 squid 서비스가 자동으로 시작되도록 활성화합니다.
    # systemctl enable squid

검증 단계

프록시가 올바르게 작동하는지 확인하려면 curl 유틸리티를 사용하여 웹 페이지를 다운로드합니다.
# curl -O -L "https://www.redhat.com/index.html" --proxy-negotiate -u : -x "proxy.ad.example.com:3128"
curl 에서 오류를 표시하지 않고 index.html 파일이 현재 디렉터리에 있는 경우 프록시가 작동합니다.

문제 해결 단계

Kerberos 인증을 수동으로 테스트하려면 다음을 수행합니다.
  1. AD 계정에 대한 Kerberos 티켓을 받습니다.
    # kinit user@AD.EXAMPLE.COM
  2. 선택적으로 티켓을 표시합니다.
    # klist
  3. negotiate_kerberos_auth_test 유틸리티를 사용하여 인증을 테스트합니다.
    # /usr/lib64/squid/negotiate_kerberos_auth_test proxy.ad.example.com
    도우미 유틸리티에서 토큰을 반환하면 인증이 성공했습니다.
    Token: YIIFtAYGKwYBBQUCoIIFqDC...