6.2. LDAP 인증을 사용하여 캐싱 프록시로 Squid 설정
Squid를 LDAP를 사용하여 사용자를 인증하는 캐싱 프록시로 구성할 수 있습니다. 이 절차에서는 인증된 사용자만 프록시를 사용할 수 있도록 구성합니다.
사전 요구 사항
-
이 절차에서는
/etc/squid/squid.conf파일이squid패키지에서 제공되는 것으로 가정합니다. 이전에 이 파일을 편집한 경우 파일을 제거하고 패키지를 다시 설치합니다. -
uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com과 같은 서비스 사용자는 LDAP 디렉터리에 있습니다. squid는 이 계정을 사용하여 인증 사용자를 검색합니다. 인증 사용자가 존재하는 경우 Squid는 이 사용자로 디렉터리에 바인딩하여 인증을 확인합니다.
프로세스
squid패키지를 설치합니다.# yum install squid/etc/squid/squid.conf파일을 편집합니다.basic_ldap_auth도우미 유틸리티를 구성하려면/etc/squid/squid.conf상단에 다음 구성 항목을 추가합니다.auth_param basic program /usr/lib64/squid/basic_ldap_auth -b "cn=users,cn=accounts,dc=example,dc=com" -D "uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com" -W /etc/squid/ldap_password -f "(&(objectClass=person)(uid=%s))" -ZZ -H ldap://ldap_server.example.com:389다음은 위 예제의
basic_ldap_auth도우미 유틸리티에 전달된 매개변수를 설명합니다.-
-b base_DN은 LDAP 검색 기반을 설정합니다. -
-d proxy_service_user_DN은 디렉터리에서 인증 사용자를 검색하는 데 사용하는 계정 ID(DN)를 설정합니다. -
-W path_to_password_file은 프록시 서비스 사용자의 암호가 포함된 파일의 경로를 설정합니다. 암호 파일을 사용하면 운영 체제의 프로세스 목록에 암호가 표시되지 않습니다. -F LDAP_filter는 LDAP 검색 필터를 지정합니다. squid는%s변수를 인증 사용자가 제공한 사용자 이름으로 교체합니다.예제의
(&(objectClass=person)(uid=%s)(uid=%s)필터는 사용자 이름이uid속성에 설정된 값과 일치해야 하고 디렉터리 항목에person오브젝트 클래스가 포함되어 있어야 함을 정의합니다.-ZZ는STARTTLS명령을 사용하여 LDAP 프로토콜에 TLS 암호화 연결을 적용합니다. 다음과 같은 경우-ZZ를 생략합니다.- LDAP 서버는 암호화된 연결을 지원하지 않습니다.
- URL에 지정된 포트는 LDAPS 프로토콜을 사용합니다.
- -H LDAP_URL 매개변수는 프로토콜, 호스트 이름 또는 IP 주소, LDAP 서버의 포트를 URL 형식으로 지정합니다.
-
인증된 사용자만 프록시를 사용할 수 있도록 Squid를 구성하는 다음 ACL 및 규칙을 추가합니다.
acl ldap-auth proxy_auth REQUIRED http_access allow ldap-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_portscache 유형, 캐시 디렉터리의 경로, 캐시 크기 및
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패키지를 설치합니다.
LDAP 서비스 사용자의 암호를
/etc/squid/ldap_password파일에 저장하고 파일에 대한 적절한 권한을 설정합니다.# echo "password" > /etc/squid/ldap_password # chown root:squid /etc/squid/ldap_password # chmod 640 /etc/squid/ldap_password방화벽에서
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" -x "user_name:password@proxy.example.com:3128"
curl에서 오류를 표시하지 않고 index.html 파일이 현재 디렉터리로 다운로드되면 프록시가 작동합니다.
문제 해결 단계
도우미 유틸리티가 제대로 작동하는지 확인하려면 다음을 수행하십시오.
auth_param매개변수에서 사용한 것과 동일한 설정으로 helper 유틸리티를 수동으로 시작합니다.# /usr/lib64/squid/basic_ldap_auth -b "cn=users,cn=accounts,dc=example,dc=com" -D "uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com" -W /etc/squid/ldap_password -f "(&(objectClass=person)(uid=%s))" -ZZ -H ldap://ldap_server.example.com:389유효한 사용자 이름과 암호를 입력하고 Enter 키를 누릅니다.
user_name password도우미 유틸리티에서
OK를 반환하면 인증이 성공했습니다.