Squid autenticado no Active Directory com Winbind
Tutorial resumido, que trata da instalação e configuração do Squid com autenticação no Active Directory usando o Samba e Winbind para a comunicação de dados entre os servidores.
Parte 4: Configuração do SQUID
Vamos remover as linhas que permitem o proxy transparente (caso já utilizasse o sistema desta forma), comente as linhas:
#httpd_accel_host virtual
#httpd_accel_port 80
#httpd_accel_with_proxy on
#httpd_accel_port 80
#httpd_accel_with_proxy on
Insira também um bloco de configuração como este:
auth_param basic realm "Acesso a internet - Sua Empresa"
# Autenticação básica HTTP
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param ntlm children 5
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 2 minutes
auth_param ntlm use_ntlm_negotiate off
# Insira isto se você precisar que os usuários estejam contidos em grupos
external_acl_type nt_group ttl=0 concurrency=5 %LOGIN /usr/lib/squid/wbinfo_group.pl
# Autenticação básica HTTP
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param ntlm children 5
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 2 minutes
auth_param ntlm use_ntlm_negotiate off
# Insira isto se você precisar que os usuários estejam contidos em grupos
external_acl_type nt_group ttl=0 concurrency=5 %LOGIN /usr/lib/squid/wbinfo_group.pl
OBS: Em algumas páginas que encontrei, se dizia para utilizar os helpers localizados em /usr/lib/squid (wb_ntlmauth), porém este helper não funciona com o SAMBA 3.x, utilize-o somente se você estiver usando SAMBA 2.x.
OBS 2: Não consegui fazer funcionar corretamente utilizando o seguinte helper:
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
Se quiser tentar, esteja à vontade, caso consiga fazê-lo funcionar corretamente, por favor me informe para que a solução seja adicionada a este documento, obviamente seus créditos serão mantidos :)
Após isto, insira as ACL's de acesso:
acl restrictedusers external nt_group <Grupo Restrito>
acl unrestrictedusers external nt_group <Grupo Liberado>
acl unrestrictedusers external nt_group <Grupo Liberado>
OBS: Algumas páginas de documentação que encontrei falavam de usar a tag NT_global_group, porém com o release do SQUID que estou utilizando neste momento (2.5.STABLE14), esta TAG não funciona.
Após inserir as ACL's, faça o trabalho sujo com o http_access:
http_access allow unrestrictedusers
http_access deny restrictedusers
http_access deny restrictedusers
No meu caso específico o cliente só desejava liberar ou negar o acesso a determinadas pessoas, mas muito mais pode ser feito, incluindo restrições por horário, por tipo de acesso e o que mais sua imaginação de Bastard Operator From Hell permitir, é igual a Neston: existem mil maneiras de preparar, invente a sua!
Após isto, se desejar, insira uma linha no seu script de firewall, para não permitir que ninguém navegue por fora do proxy:
/sbin/iptables -A INPUT -p tcp --dport 80 -j DROP
Um outro ponto importante é permitir que o usuário do Squid possa ler o diretório onde fica o socket do winbind, isso pode ser feito com o comando:
# chgrp proxy /var/run/samba/winbindd_privileged
Após a execução do comando, reinicie o winbind.
Dica: não tente mudar as permissões do diretório, se elas estiverem diferente de 750 o winbind simplesmente não sobe.
Valeu pelo excelente artigo!!!