Red Hat Training

A Red Hat training course is available for RHEL 8

7.2. Configuración de Squid como proxy de caché con autenticación LDAP

Esta sección describe una configuración básica de Squid como proxy de caché que utiliza LDAP para autenticar a los usuarios. El procedimiento configura que sólo los usuarios autenticados puedan utilizar el proxy.

Requisitos previos

  • El procedimiento asume que el archivo /etc/squid/squid.conf es el proporcionado por el paquete squid. Si ha editado este archivo anteriormente, elimine el archivo y vuelva a instalar el paquete.
  • Un usuario de servicio, como uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com existe en el directorio LDAP. Squid utiliza esta cuenta sólo para buscar al usuario autentificador. Si el usuario de autenticación existe, Squid se vincula como este usuario al directorio para verificar la autenticación.

Procedimiento

  1. Instale el paquete squid:

    # yum install squid
  2. Edite el archivo /etc/squid/squid.conf:

    1. Para configurar la utilidad de ayuda basic_ldap_auth, añada la siguiente entrada de configuración en la parte superior de /etc/squid/squid.conf:

      auth_param programa básico /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

      A continuación se describen los parámetros pasados a la utilidad de ayuda basic_ldap_auth en el ejemplo anterior:

      • -B base_DN establece la base de búsqueda LDAP.
      • -D proxy_service_user_DN establece el nombre distinguido (DN) de la cuenta que Squid utiliza para buscar al usuario autentificado en el directorio.
      • -W path_to_password_file establece la ruta del archivo que contiene la contraseña del usuario del servicio proxy. El uso de un archivo de contraseña evita que la contraseña sea visible en la lista de procesos del sistema operativo.
      • -f LDAP_filter especifica el filtro de búsqueda LDAP. Squid sustituye la variable %s por el nombre de usuario proporcionado por el usuario autentificador.

        El filtro (&(objectClass=person)(uid=%s)) del ejemplo define que el nombre de usuario debe coincidir con el valor establecido en el atributo uid y que la entrada del directorio contiene la clase de objeto person.

      • -ZZ impone una conexión cifrada por TLS sobre el protocolo LDAP mediante el comando STARTTLS. Omita el -ZZ en las siguientes situaciones:

        • El servidor LDAP no admite conexiones cifradas.
        • El puerto especificado en la URL utiliza el protocolo LDAPS.
      • El parámetro -H LDAP_URL especifica el protocolo, el nombre del host o la dirección IP y el puerto del servidor LDAP en formato URL.
    2. Añade la siguiente ACL y regla para configurar que Squid sólo permita a los usuarios autentificados utilizar el proxy:

      acl ldap-auth proxy_auth REQUIRED
      http_access allow ldap-auth
      Importante

      Especifique estos ajustes antes de la regla http_access deny all.

    3. 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
    4. La siguiente ACL existe en la configuración por defecto y define 443 como un puerto que utiliza el protocolo HTTPS:

      acl puertos_SSL puerto 443

      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 número_de_puerto
    5. Actualice la lista de reglas de acl Safe_ports para 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 de acl Safe_ports en la configuración:

      acl Safe_ports port 21
      acl Safe_ports port 80
      acl Safe_ports port 443

      Por defecto, la configuración contiene la regla http_access deny !Safe_ports que define la denegación de acceso a los puertos que no están definidos en Safe_ports ACLs.

    6. 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

      Con estos ajustes:

      • Squid utiliza el tipo de caché ufs.
      • Squid almacena su caché en el directorio /var/spool/squid/.
      • El caché crece hasta 10000 MB.
      • Squid crea 16 subdirectorios de nivel 1 en el directorio /var/spool/squid/.
      • Squid crea subdirectorios 256 en cada directorio de nivel 1.

        Si no se establece una directiva cache_dir, Squid almacena la caché en la memoria.

  3. Si establece un directorio de caché diferente a /var/spool/squid/ en el parámetro cache_dir:

    1. Crear el directorio de la caché:

      # mkdir -p path_to_cache_directory
    2. Configure los permisos para el directorio de la caché:

      # chown squid:squid path_to_cache_directory
    3. Si ejecuta SELinux en modo enforcing, establezca el contexto squid_cache_t para el directorio de la caché:

      # semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?"
      # restorecon -Rv path_to_cache_directory

      Si la utilidad semanage no está disponible en su sistema, instale el paquete policycoreutils-python-utils.

  4. Guarde la contraseña del usuario del servicio LDAP en el archivo /etc/squid/ldap_password, y establezca los permisos adecuados para el archivo:

    # echo "password" > /etc/squid/ldap_password
    # chown root:squid /etc/squid/ldap_password
    # chmod 640 /etc/squid/ldap_password
  5. Abra el puerto 3128 en el cortafuegos:

    # firewall-cmd --permanent --add-port=3128/tcp
    # firewall-cmd --reload
  6. Habilite e inicie el servicio squid:

    # systemctl enable --now squid

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" -x "user_name:password@proxy.example.com:3128"

Si curl no muestra ningún error y el archivo index.html se ha descargado en el directorio actual, el proxy funciona.

Pasos para la resolución de problemas

Para verificar que la utilidad de ayuda funciona correctamente:

  1. Inicie manualmente la utilidad de ayuda con la misma configuración que utilizó en el parámetro auth_param:

    # /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
  2. Introduzca un nombre de usuario y una contraseña válidos, y pulse Intro:

    user_name password

    Si la utilidad de ayuda devuelve OK, la autenticación tuvo éxito.