Red Hat Training

A Red Hat training course is available for RHEL 8

7.3. Configurando o Squid como um proxy de cache com autenticação de kerberos

Esta seção descreve uma configuração básica do Squid como um proxy de cache que autentica os usuários a um Active Directory (AD) usando Kerberos. O procedimento configura que somente usuários autenticados podem usar o proxy.

Pré-requisitos

  • O procedimento pressupõe que o arquivo /etc/squid/squid.conf é o fornecido pelo pacote squid. Se você editou este arquivo antes, remova o arquivo e reinstale o pacote.
  • O servidor no qual você deseja instalar o Squid é um membro do domínio AD. Para detalhes, veja Configurando o Samba como membro do domínio na documentação do Red Hat Enterprise Linux 8 Deploying different types of servers.

Procedimento

  1. Instale os seguintes pacotes:

    yum instalar estação de trabalho squid krb5
  2. Autenticar como administrador do domínio AD:

    # parente administrador@AD.EXAMPLE.COM
  3. Crie uma tabela de chaves para o Squid e armazene-a no arquivo /etc/squid/HTTP.keytab:

    # export KRB5_KTNAME=FILE:/etc/squid/HTTP.keytab
    # net ads keytab CREATE -U administrator
  4. Acrescente o principal serviço HTTP ao keytab:

    # net ads keytab ADD HTTP -U administrador
  5. Defina o proprietário do arquivo keytab para o usuário do squid:

    # chown squid /etc/squid/HTTP.keytab
  6. Opcionalmente, verifique se o arquivo keytab contém o principal do serviço HTTP para o nome de domínio totalmente qualificado (FQDN) do servidor proxy:

    #  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. Edite o arquivo /etc/squid/squid.conf:

    1. Para configurar o utilitário helper negotiate_kerberos_auth, adicione a seguinte entrada de configuração ao topo do site /etc/squid/squid.conf:

      auth_param negociar programa /usr/lib64/squid/negociar_kerberos_auth -k /etc/squid/HTTP.keytab -s HTTP/proxy.ad.example.com@AD.EXAMPLE.COM

      A seguir descrevemos os parâmetros passados para o utilitário helper negotiate_kerberos_auth no exemplo acima:

      • -k file define o caminho para o arquivo da aba chave. Note que o usuário da lula deve ter permissões de leitura neste arquivo.
      • -s HTTP/host_name@kerberos_realm define o Kerberos principal que a Lula usa.

        Opcionalmente, você pode habilitar o registro passando um ou ambos os parâmetros a seguir para o utilitário auxiliar:

      • -i registra mensagens informativas, como o usuário que se autentica.
      • -d permite o registro de depuração.

        O Squid registra as informações de depuração do utilitário auxiliar no arquivo /var/log/squid/cache.log.

    2. Adicione a seguinte ACL e regra para configurar que o Squid permite que somente usuários autenticados possam usar o proxy:

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

      Especifique estas configurações antes da regra http_access deny all.

    3. Remover a seguinte regra para desativar a autenticação por proxy a partir de faixas IP especificadas em localnet ACLs:

      http_access permite rede local
    4. A seguinte ACL existe na configuração padrão e define 443 como uma porta que usa o protocolo HTTPS:

      acl Porta SSL_port 443

      Se os usuários devem ser capazes de usar o protocolo HTTPS também em outras portas, acrescente uma ACL para cada uma dessas portas:

      acl Porta SSL_ports port_number
    5. Atualizar a lista de regras acl Safe_ports para configurar com quais portas a Squid pode estabelecer uma conexão. Por exemplo, para configurar que os clientes que utilizam o proxy só podem acessar recursos nas portas 21 (FTP), 80 (HTTP) e 443 (HTTPS), mantenha apenas as seguintes declarações acl Safe_ports na configuração:

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

      Por padrão, a configuração contém a regra http_access deny !Safe_ports que define a negação de acesso às portas que não estão definidas em Safe_ports ACLs.

    6. Configure o tipo de cache, o caminho para o diretório de cache, o tamanho do cache e outras configurações específicas do tipo de cache no parâmetro cache_dir:

      cache_dir ufs /var/spool/squid 10000 16 256

      Com estas configurações:

      • A lula usa o tipo de cache ufs.
      • A Squid armazena seu cache no diretório /var/spool/squid/.
      • O cache cresce até 10000 MB.
      • A Squid cria subdiretórios de nível 1 em 16 no diretório /var/spool/squid/.
      • A Squid cria subdiretórios 256 em cada diretório de nível 1.

        Se você não definir uma diretiva cache_dir, a Squid armazena o cache na memória.

  8. Se você definir um diretório de cache diferente de /var/spool/squid/ no parâmetro cache_dir:

    1. Criar o diretório do cache:

      # mkdir -p path_to_cache_directory
    2. Configurar as permissões para o diretório do cache:

      # chown squid:lula path_to_cache_directory
    3. Se você executar o SELinux no modo enforcing, defina o contexto squid_cache_t para o diretório do cache:

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

      Se o utilitário semanage não estiver disponível em seu sistema, instale o pacote policycoreutils-python-utils.

  9. Abra a porta 3128 no firewall:

    # firewall-cmd --permanent --add-port=3128/tcp
    # firewall-cmd --reload
  10. Habilite e inicie o serviço squid:

    # systemctl habilita --agora lula

Etapas de verificação

Para verificar se o proxy funciona corretamente, baixe uma página da web usando o utilitário curl:

# curl -O -L"https://www.redhat.com/index.html" --proxy-negotiate -u : -x"proxy.ad.example.com:3128"

Se curl não exibir nenhum erro e o arquivo index.html existir no diretório atual, o proxy funciona.

Passos para a solução de problemas

Para testar manualmente a autenticação Kerberos:

  1. Obter um bilhete Kerberos para a conta AD:

    # parente usuário@AD.EXAMPLE.COM
  2. Opcionalmente, exibir o bilhete:

    # klist
  3. Use o utilitário negotiate_kerberos_auth_test para testar a autenticação:

    /usr/lib64/squid/negociar_kerberos_auth_test proxy.ad.example.com

    Se o utilitário auxiliar devolver um token, a autenticação foi bem sucedida:

    Token: YIIFtAYGKwYBBQUCoIIFqDC...