Pessoal,
No cliente aonde fico alocado estamos implementando uma política de senha no Proxy, já que efetuamos testes e quebramos diversas senhas fracas no mesmo.
O Proxy (Squid) é integrado ao Ldap e existe uma aplicação em php junto com o Ldap q efetua a troca de senha através de uma página. Até aí tudo está em ordem! rs...
O objetivo é forçar a troca de senha dos usuários e após ser efetuada a troca de senha a Internet será liberada para o usuário, como apoio a essa solução estamos utilizando uma variável no Ldap que cada usuário possui, chamada trocasenha que é igual a 0. Todos os usuário partirão com a variável trocasenha=0, após ser trocada a senha pela aplicação em PHP então a variável trocasenha ficará igual a 1 e então a Internet será liberada.
Chega de papo e vamos às linhas do squid.conf:
Squid: Version 2.7.STABLE3
Código:
auth_param basic program /usr/lib/squid/ldap_auth -b dc=domain -f "(uid=%s)" -u uid -D "cn=admin,dc=domain" -w "senha" -H ldap://192.167.42.98:389 -P -v 3
auth_param basic children 5
auth_param basic realm Você está sendo monitorado.
auth_param basic credentialsttl 8 hours
auth_param basic casesensitive on
acl ldapauth proxy_auth REQUIRED
external_acl_type checkvalido %LOGIN /usr/lib/squid/ldap_auth -b dc=domain -f "(&(uid=%s)(trocasenha=1))" -u uid -D "cn=admin,dc=domain" -w "senha" -H ldap://192.167.42.98:389 -P -v 3
acl liberado external checkvalido
deny_info http://trocasenha.domain !liberado
http_access allow liberado
http_access allow ldapauth
Como expliquei, preciso do seguinte funcionamento:
Nas linhas:
Código:
external_acl_type checkvalido %LOGIN /usr/lib/squid/ldap_auth -b dc=domain -f "(&(uid=%s)(trocasenha=1))" -u uid -D "cn=admin,dc=domain" -w "senha" -H ldap://192.167.42.98:389 -P -v 3
acl liberado external checkvalido
deny_info http://trocasenha.domain !liberado
http_access allow liberado
http_access allow ldapauth
* A primeira eu verifico consultando a base do Ldap se o nome do usuário (uid=%s) e (&) se a variável trocasenha do usuário autenticado é igual a "1", (trocasenha=1), sendo verdade isso vamos para a segunda linha
* Chamo a acl liberado em caso de confirmação válida da acl externa checkvalido
* Na terceira linha, o intuito é redirecionar todos aquele que não estão na condição de liberado (!liberado) para a página de troca de senha (http://trocasenha.domain), ou seja todos aqueles que a váriável trocasenha for diferente de 1 entram nessa condição.
* Nas últimas 2 linhas eu libero o acesso a internet para quem estiver liberado (trocasenha=1) e autenticado.
O problema é que "external_acl_type" não está funcionando, a internet está liberando para todos, se eu excluir as últimas linhas aí funciona o redirect de página.
Observação que eu testei o comando " /usr/lib/squid/ldap_auth" pelo shell e funciona perfeitamente as consultas na base LDAP bem como a confirmação da variável trocasenha igual ou diferente de 0 dos usuários.
Testei também com ldapsearch e funciona perfeitamente a consulta, visulizando os valores da variável trocasenha de cada usuário, acredito q o problema está na arrumação das acls ou na linha "acl liberado external checkvalido".
Será que algum profissional cascudo de squid poderia me ajudar???
Abraços!