PfSense 2.2.3– Squid + Samba4 (member) autenticando usuários via NTLM Autor: Atila Aloise de Almeida Introdução A necessidade de implementar funcionalidades de autenticação em proxy’s, nos traz possibilidade de gerir controles de acesso de forma mais organizada. O monitoramento também é favorecido, já que não precisaremos verificar manualmente que usuário está utilizando a maquina no momento em que o acesso ocorre. Problema: O PfSense não inclui as dependências envolvidas para que a autenticação transparente dos usuários do domínio ocorra. Solução: A versão 2.2 do PfSense utiliza o FreeBsd 10 como base, portanto temos o “pkg” a nossa disposição para incrementar o sistema. A autenticação transparente depende do ingresso da maquina PfSense no domínio. Assim podemos oferecer recursos do sistema para os usuários do domínio que passarão a ser reconhecidos pelo PfSense. As dependências são: • Samba • Winbind • Kerberos Primeiramente temos que fazer nosso PfSense conhecer o endereço do controlador de domínio e resolver seu nome. Edite o arquivo “/etc/hosts” e insira a linha que referencia o Controlador de domínio: 192.168.0.4
ad.meudominio.local
ad
Com isso o sistema agora resolve o endereço ad.meudominio.local para seu endereço de rede. Para garantir que todas as consultas dns relativas ao domínio “meudominio.local” insira a entrada referenciando seu controlador na seção ”Host Overrides “e ”Domain overrides“ do DNS RESOLVER. Configure agora o kerberos para lidar com seu domíno. Edite o arquivo “/etc/krb5”. [libdefaults] default_realm = MEUDOMINIO.LOCAL dns_lookup_realm = true dns_lookup_kdc = true ticket_lifetime = 24h renew_lifetime = 7d forwardable = yes Agora Instale o samba4, que nos repositórios BSD está como samba42 em sua versão mais atual. #pkg install samba42
Crie o arquivo /usr/local/etc/smb4.conf ou substitua seu conteúdo [global] workgroup = MEUDOMINIO server string = GET OUT MODAFOCA security = ads realm = MEUDOMINIO.LOCAL socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072 use sendfile = true idmap config * : backend = tdb idmap config * : range = 100000-‐299999 idmap config MEUDOMINIO : backend = rid idmap config MEUDOMINIO : range = 10000-‐99999 winbind separator = + winbind enum users = yes winbind enum groups = yes winbind use default domain = yes winbind refresh tickets = yes restrict anonymous = 2 log file = /var/log/samba4/log.%m max log size = 50 Com o samba instalado. Vamos ativar seus serviços na inicialização do sistema Adicione as linhas abaixo no arquivo /etc/rc.conf.local winbindd_enable="YES" samba_server_enable="YES" Agora sempre que o sistema reiniciar, o samba subirá automaticamente. Vamos ingressar no domínio. #net ads join –U administrator Com isso, teste o ingresso #net ads testjoin Esse comando deve retornar “join is OK”. Vamos testar o kerberos. #kinit usuário Para garantir que o sistema conhece todos os usuários use o comando “wbinfo –u” que irá retornar todos os usuários do domínio. Agora nosso sistema está pronto para integração. Instalando e configurando o SQUID Instale o squid Stable pela interface web do sistema. Os pacotes instalados no PfSense são colocados em Jaulas (literalmente), assim sendo, tudo que o pacote precisar (bibliotecas, arquivos de configuração, etc) precisa estar dentro da jaula.
Vamos utilizar o binário “ntlm_auth” fornecido pelo próprio samba. Ele fica dentro de “/usr/local/bin”. Devemos copiar o binário para dentro da “jaula” do Squid. #cp /usr/local/bin/ntlm_auth /usr/pbi/squid-‐amd64/local/libexec/squid/ Na interface web, com o squid rodando e funcionando sem autenticação, va até a seção “Custom Settings”e insira o parâmetro que chamará o ntlm. auth_param ntlm program /usr/pbi/squid-‐amd64/local/libexec/squid/ntlm_auth -‐-‐configfile=/usr/pbi/squid-‐amd64/etc/smb4.conf -‐-‐helper-‐ protocol=squid-‐2.5-‐ntlmssp Em seguida devemos adicionar um segundo helper para clientes que não tiverem suporte a autenticaçãoo Transparente. auth_param basic program /usr/pbi/squid-‐amd64/local/libexec/squid/ntlm_auth -‐-‐configfile=/usr/pbi/squid-‐amd64/etc/smb4.conf -‐-‐helper-‐ protocol=squid-‐2.5-‐basic Depois disso insira, os parâmetros que controlam os processos do binário ntlm_auth, requerem a autenticação e autorizam o acesso pelos usuários autenticados. auth_param ntlm children 10 auth_param ntlm keep_alive on acl password proxy_auth REQUIRED http_access allow password Atenção! Voce deve inserir todos esses parâmetros em uma linha apenas, separados por ponto e virgula. auth_param ntlm program /usr/pbi/squid-‐amd64/local/libexec/squid/ntlm_auth -‐-‐configfile=/usr/pbi/squid-‐amd64/etc/smb4.conf -‐-‐ helper-‐protocol=squid-‐2.5-‐ntlmssp; auth_param basic program /usr/pbi/squid-‐amd64/local/libexec/squid/ntlm_auth -‐-‐ configfile=/usr/pbi/squid-‐amd64/etc/smb4.conf -‐-‐helper-‐protocol=squid-‐2.5-‐basic;auth_param ntlm children 10;auth_param ntlm keep_alive on;acl password proxy_auth REQUIRED;http_access allow password Agora você deve monitorar o log do cache para identificar quais bibliotecas estão faltando para nosso squid com NTLM funcionar. #tail –f /var/squid/logs/cache.log Fique atento nas linhas em que o log informar que uma biblioteca nao foi encontrada. Na instalação com o squid3 – Beta, o log acusou as seguintes bibliotecas:
ibintl.so.8ibintl.so.8 libgpg-‐error.so.0 libp11-‐kit.so.0 libtspi.so.1 libtasn1.so.6 libnettle.so.4 libhogweed.so.2 libgmp.so.10 libffi.so.6 libgpg-‐error.so.0 libp11-‐kit.so.0 libtspi.so.1 libtasn1.so.6 libnettle.so.4 libhogweed.so.2 libgmp.so.10 libffi.so.6ibintl.so.8 libgpg-‐error.so.0 libp11-‐kit.so.0 libtspi.so.1 libtasn1.so.6 libnettle.so.4
libhogweed.so.2 libgmp.so.10 libffi.so.6 Voce deve copier as bibliotecas requeridas de “/usr/local/lib” para a jaula do squid em “/usr/pbi/squid-‐ amd64/local/lib”. A cada biblioteca copiada, o log apontará para a próxima. Quando o log não cobrar mais nenhuma biblioteca, reinicie o squid e teste a autenticação. Monitore o access log. #tail –f /var/squid/logs/access.log Em uma estação do seu domino, configure o proxy no navegador, e abra uma pagina da web. O navegador não deve exibir popup solicitando usuário e senha, e o usuário logado na estaçao deve estar referenciado no acceslog. Instalando Squidguard Se tudo ocorreu bem, agora você pode instalar o pacote “Squidguard”. Na interface Web de configuração do squidGuard , vá até a seção “LDAP OPTIONS” e habilite “ldap filter”. Em “LDAP DN” insira as configurações de login de acordo com o usuario que irá pesquisar usuários e grupos para o filtro. Não utilize usuario com privilégios alem do necessário para o squidguard pesquisar na base ldap, esse usuario e senha constarão em texto plano nos logs e arquivos de configuração do proxy. Marque as opçoes “Strip Nt domain Name” e “Strip Kerberos realm”. Como eu utilizei samba 4 para PDC neste ambiente, a versao do LDAP selecionada é a 2. Dependendo do seu controlador de domínio você pode precisar usar a versao 3. Salve as alterações do squidguard, habilite o serviceo e aplique. Agora vamos Filtrar por grupos. Va na aba “Groups ACL”, crie um novo grupo referenciando o grupo em questão dentro do seu controlador de domínio. Neste ambiente, criei uma unidade organizacional chamada “SERVICOS” na raiz do meu domínio. Dentro dela tenho outra unidade organizacional chamada “proxy”. Nessa unidade organizacional criarei meus grupos de filtro para o squidguard. Criei um grupo chamado proxy_teste. O Caminho do meu grupo de filtro no formato LDAP ficou assim: CN=proxy_teste,OU=proxy,OU=SERVICOS,DC=meudominio,DC=LOCAL Para que o squid guard saiba aplicar o filtro apenas para esse grupo, preencha o campo “Client (source)” assim (linha única): Ldapusersearch ldap://192.168.0.4/DC=meudominio,DC=local?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=proxy_teste%2c OU=proxy%2cOU=SERVICOS%2cDC=meudominio%2cDC=local))