7.3. Configuración de Squid como proxy de caché con autenticación kerberos
Esta sección describe una configuración básica de Squid como proxy de caché que autentifica a los usuarios en un Directorio Activo (AD) utilizando Kerberos. El procedimiento configura que sólo los usuarios autenticados pueden utilizar el proxy.
Requisitos previos
-
El procedimiento asume que el archivo
/etc/squid/squid.confes el proporcionado por el paquetesquid. Si ha editado este archivo anteriormente, elimine el archivo y vuelva a instalar el paquete. -
El servidor en el que desea instalar Squid es un miembro del dominio AD. Para más detalles, consulte Configuración de Samba como miembro del dominio en la documentación de Red Hat Enterprise Linux 8
Deploying different types of servers.
Procedimiento
Instale los siguientes paquetes:
yum install squid krb5-workstation
yum install squid krb5-workstationCopy to Clipboard Copied! Toggle word wrap Toggle overflow Autenticarse como administrador del dominio AD:
kinit administrator@AD.EXAMPLE.COM
# kinit administrator@AD.EXAMPLE.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow Cree un keytab para Squid y almacénelo en el archivo
/etc/squid/HTTP.keytab:export KRB5_KTNAME=FILE:/etc/squid/HTTP.keytab net ads keytab CREATE -U administrator
# export KRB5_KTNAME=FILE:/etc/squid/HTTP.keytab # net ads keytab CREATE -U administratorCopy to Clipboard Copied! Toggle word wrap Toggle overflow Añade la entidad de crédito del servicio
HTTPal keytab:net ads keytab ADD HTTP -U administrador
# net ads keytab ADD HTTP -U administradorCopy to Clipboard Copied! Toggle word wrap Toggle overflow Establezca el propietario del archivo keytab al usuario
squid:chown squid /etc/squid/HTTP.keytab
# chown squid /etc/squid/HTTP.keytabCopy to Clipboard Copied! Toggle word wrap Toggle overflow Opcionalmente, verifique que el archivo keytab contiene el principal de servicio
HTTPpara el nombre de dominio completamente calificado (FQDN) del servidor proxy:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Edite el archivo
/etc/squid/squid.conf:Para configurar la utilidad de ayuda
negotiate_kerberos_auth, añada la siguiente entrada de configuración en la parte superior de/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
auth_param negotiate program /usr/lib64/squid/negotiate_kerberos_auth -k /etc/squid/HTTP.keytab -s HTTP/proxy.ad.example.com@AD.EXAMPLE.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow A continuación se describen los parámetros pasados a la utilidad de ayuda
negotiate_kerberos_authen el ejemplo anterior:-
-k fileestablece la ruta de acceso al archivo de tabulación de claves. Tenga en cuenta que el usuario squid debe tener permisos de lectura en este archivo. -s HTTP/host_name@kerberos_realmestablece el principal de Kerberos que utiliza Squid.Opcionalmente, puede activar el registro pasando uno o ambos de los siguientes parámetros a la utilidad de ayuda:
-
-iregistra mensajes informativos, como el usuario que se autentifica. -dactiva el registro de depuración.Squid registra la información de depuración de la utilidad de ayuda en el archivo
/var/log/squid/cache.log.
-
Añade la siguiente ACL y regla para configurar que Squid sólo permita a los usuarios autentificados utilizar el proxy:
acl kerb-auth proxy_auth REQUIRED http_access allow kerb-auth
acl kerb-auth proxy_auth REQUIRED http_access allow kerb-authCopy to Clipboard Copied! Toggle word wrap Toggle overflow ImportanteEspecifique estos ajustes antes de la regla
http_access deny all.Elimine la siguiente regla para desactivar la omisión de la autenticación del proxy desde los rangos de IP especificados en las ACL de
localnet:http_access allow localnet
http_access allow localnetCopy to Clipboard Copied! Toggle word wrap Toggle overflow La siguiente ACL existe en la configuración por defecto y define
443como un puerto que utiliza el protocolo HTTPS:acl puertos_SSL puerto 443
acl puertos_SSL puerto 443Copy to Clipboard Copied! Toggle word wrap Toggle overflow Si los usuarios deben poder utilizar el protocolo HTTPS también en otros puertos, añada una ACL para cada uno de estos puertos:
acl Puerto SSL port_number
acl Puerto SSL port_numberCopy to Clipboard Copied! Toggle word wrap Toggle overflow Actualice la lista de reglas de
acl Safe_portspara configurar a qué puertos puede establecer una conexión Squid. Por ejemplo, para configurar que los clientes que utilicen el proxy sólo puedan acceder a los recursos del puerto 21 (FTP), 80 (HTTP) y 443 (HTTPS), mantenga sólo las siguientes declaraciones deacl Safe_portsen la configuración:acl Safe_ports port 21 acl Safe_ports port 80 acl Safe_ports port 443
acl Safe_ports port 21 acl Safe_ports port 80 acl Safe_ports port 443Copy to Clipboard Copied! Toggle word wrap Toggle overflow Por defecto, la configuración contiene la regla
http_access deny !Safe_portsque define la denegación de acceso a los puertos que no están definidos en las ACL deSafe_ports.Configure el tipo de caché, la ruta del directorio de la caché, el tamaño de la caché y otros ajustes específicos del tipo de caché en el parámetro
cache_dir:cache_dir ufs /var/spool/squid 10000 16 256
cache_dir ufs /var/spool/squid 10000 16 256Copy to Clipboard Copied! Toggle word wrap Toggle overflow Con estos ajustes:
-
Squid utiliza el tipo de caché
ufs. -
Squid almacena su caché en el directorio
/var/spool/squid/. -
El caché crece hasta
10000MB. -
Squid crea
16subdirectorios de nivel 1 en el directorio/var/spool/squid/. Squid crea subdirectorios
256en cada directorio de nivel 1.Si no se establece una directiva
cache_dir, Squid almacena la caché en la memoria.
-
Squid utiliza el tipo de caché
Si establece un directorio de caché diferente a
/var/spool/squid/en el parámetrocache_dir:Crear el directorio de la caché:
mkdir -p path_to_cache_directory
# mkdir -p path_to_cache_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow Configure los permisos para el directorio de la caché:
chown squid:squid path_to_cache_directory
# chown squid:squid path_to_cache_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow Si ejecuta SELinux en modo
enforcing, establezca el contextosquid_cache_tpara el directorio de la caché:semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" restorecon -Rv path_to_cache_directory
# semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" # restorecon -Rv path_to_cache_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow Si la utilidad
semanageno está disponible en su sistema, instale el paquetepolicycoreutils-python-utils.
Abra el puerto
3128en el cortafuegos:firewall-cmd --permanent --add-port=3128/tcp firewall-cmd --reload
# firewall-cmd --permanent --add-port=3128/tcp # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow Habilite e inicie el servicio
squid:systemctl enable --now squid
# systemctl enable --now squidCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Pasos de verificación
Para comprobar que el proxy funciona correctamente, descargue una página web utilizando la utilidad curl:
curl -O -L "https://www.redhat.com/index.html" --proxy-negotiate -u : -x "proxy.ad.example.com:3128"
# curl -O -L "https://www.redhat.com/index.html" --proxy-negotiate -u : -x "proxy.ad.example.com:3128"
Si curl no muestra ningún error y el archivo index.html existe en el directorio actual, el proxy funciona.
Pasos para la resolución de problemas
Para probar manualmente la autenticación Kerberos:
Obtenga un ticket Kerberos para la cuenta AD:
kinit user@AD.EXAMPLE.COM
# kinit user@AD.EXAMPLE.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow Opcionalmente, mostrar el billete:
klist
# klistCopy to Clipboard Copied! Toggle word wrap Toggle overflow Utilice la utilidad
negotiate_kerberos_auth_testpara probar la autenticación:/usr/lib64/squid/negotiate_kerberos_auth_test proxy.ad.example.com
# /usr/lib64/squid/negotiate_kerberos_auth_test proxy.ad.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow Si la utilidad de ayuda devuelve un token, la autenticación tuvo éxito:
Ficha: YIIFTAYGKwYBBQUCoIIFqDC...
Ficha: YIIFTAYGKwYBBQUCoIIFqDC...Copy to Clipboard Copied! Toggle word wrap Toggle overflow