Proxy Squid com autenticação NTLM transparente – ..:: tonev.pro.br ::..
Solução rápida e pratica para quem utiliza Squid e quer integrar ele com a autenticação do Windows. Já estou levando em consideração de que vai haver redundância, tanto na autenticação, como no serviço de proxy.
– Domínio Windows AD com 2 servidores. Servidor 1 – IP 10.0.0.10, FQDN AD01.DOMINIO.LOCAL. Servidor 2 – IP 10.0.0.11, FQDN AD02.DOMINIO.LOCAL ;
– Dois servidores para o Squid já com a instalação básica do Debian 8.5 de 64bits. Servidor 1 – IP 10.0.0.20, FQDN PROXY01.DOMINIO.LOCAL. Servidor 1 – IP 10.0.0.21, FQDN PROXY02.DOMINIO.LOCAL. ( ambiente em que a solução foi testada );
– Conta administrativa no AD ( ex: adm.tonev );
– Conhecimentos de AD, DHCP, DNS, DNS reverso, HTTP, criação de GPOs, administração Windows, administração Linux;
1 – Instale os pacotes básicos necessários:
apt-get install squid3 telnet tcpdump ntpdate samba winbind vim telnet tcpdump mc xz-utils rsync
2 – Em cada servidor Squid ajuste o arquivo /etc/hosts com o IP da maquina local e o IP dos ADs:
No servidor proxy01.dominio.local:
10.0.0.20 proxy01.dominio.local proxy01
10.0.0.10 ad01.dominio.local ad01
10.0.0.11 ad02.dominio.local ad02
No servidor proxy02.dominio.local:
10.0.0.21 proxy02.dominio.local proxy02
3 – Em cada servidor Squid ajuste o arquivo /etc/samba/smb.conf para o conteúdo abaixo:
netbios name = proxy01 ( altere na segunda maquina para refletir o nome dela )
server string = proxy01 ( altere na segunda maquina para refletir o nome dela )
password server = 10.0.0.10, 10.0.0.11
4 – No AD crie o registro de DNS e DNS Reverso para o proxy01 e proxy02 e aguarde o tempo necessário para replicação e refresh do DNS;
5 – Insira as maquinas Squid no domínio do AD. Tem que ser feito localmente nas maquinas
net ads join -U adm.tonev
6 – Reinicie os serviços do samba e winbind
/etc/init.d/samba restart ; /etc/init.d/winbind restart
7- Teste a comunicação das maquinas proxy com o domínio Windows:
Tem que retornar "checking the trust secret for domain DOMINIO via RPC calls succeeded"
8 – Teste a autenticação no domínio Windows:
wbinfo -a adm.tonev
Depois de solicita a senha duas vezes, deve retornar as linhas abaixo:
9 – Alterar o chmod do /usr/bin/ntlm_auth para que o autenticador rode como root. O único problema é que sempre que o pacote do samba for atualizado será necessário reexecutar o comando para que a autenticação não pare:
chmod 6755 /usr/bin/ntlm_auth
10 – Ajuste a configuração do squid ( /etc/squid3/squid.conf ) com o conteúdo abaixo:
auth_param ntlm program /usr/bin/ntlm_auth –helper-protocol=squid-2.5-ntlmssp –domain=DOMINIO
auth_param ntlm children 512
acl WINDOWS_AUTH proxy_auth REQUIRED
acl SSL_ports port 80 443 1025-65535
acl Safe_ports port 21 70 80 210 280 443 488 591 777 1025-65535
http_access allow WINDOWS_AUTH
cache_mem 3072 MB
11 – Ajuste o /etc/sysctl.conf para os parametros abaixo:
net.core.somaxconn = 49152
12 – Crie um arquivo com o nome wpad.dat com o conteúdo abaixo e o coloque em um servidor web que todas as maquinas cliente possam acessar.
return "PROXY proxy01.dominio.local:3128;PROXY proxy02.dominio.local:3128";
13 – Ajuste a configuração do DHCP da rede para incluir a opção 252 e informar a localização do arquivo wpad.dat
14 – Crie uma GPO forçada para o domínio AD e especifique que os browsers devem usar autoconfiguração e especifique o caminho do wpad.dat. Opcionalmente pode travar a opção de usuário poder alterar a configuração de proxy. O Internet Explorer e o Chrome usam a mesma configuração ( a do IE ), para o Mozilla é necessário baixar o modelo administrativo ( aqui o link do download )
Atenção: nessa configuração do Squid as maquinas cliente somente poderão navegar se conseguirem se autenticar via NTLM. Isso vale somente para maquinas que fazem parte do domínio Windows. Maquinas que não fazem parte serão bloqueadas automaticamente e não vai aparecer nenhuma tela solicitando login/senha. Para que isso aconteça é necessário especificar mais tipos de autenticação. O próximo postá será sobre como implementar autenticação via RADIUS.
Atenção [2]: Se a carga de autenticação for muito grande, pode ser que o Squid pare de atender as conexões dos clientes. Agende um "squid3 -k reconfigure" no crontab para rodar a cada 5 minutos. Assim os processos do ntlm_auth serão reciclados e mantidos somente os necessarios. Ainda preciso reproduzir o bug para poder relatar.
Pronto. Reinicie o squid e aproveite.
lamasbr disse:
Muito bom, funcionou quase de primeira. No entanto, após fazer toda a configuração, inserir o servidor proxy no domínio, testar a autenticação e etc, o Squid gerava o seguinte erro no cache.log: ipcCreate: /usr/bin/ntlm_auth: (13) Permission denied
No meu caso que uso Ubuntu 16.04.3 LTS, aqui precisei fazer um ajuste no arquivo /etc/init.d/winbind e na linha 43 alterar:
– DE: chgrp winbindd_priv $PIDDIR/winbindd_privileged/ || return 1
– PARA: chgrp proxy $PIDDIR/winbindd_privileged/ || return 1
E incluir logo abaixo:
O ntlm_auth tem que rodar com SUID ( chmod 6755 ). Toda vez que atualiza o samba tem que executar o chmod novamente.