bom vo falar como eu fiz então
Eu uso fedora core 4, squid 2.5 e openldap 2.3.11. É bom que vc tenha uma noção de como funciona o ldap, aconselho vc a dar uma lida na introdução do
www.openldap.org
Tenho o openldap instalado em /usr/local/openldap, e squid em /usr/local/squid.
EDIT: Não sei porque mas dentro dos códigos os comentários # saíram nos lugares errados, entao cuidado se forem copiar e colar
depois de estar com squid, openldap e suas dependências instalados, vamos configurar o slapd.conf. Vou colar aqui o meu slapd.conf:
Código:
include /usr/local/openldap/etc/openldap/schema/core.schema
include /usr/local/openldap/etc/openldap/schema/inetorgperson.schema
#Esses sao os schemas que serão usados. Nos schemas estão as ojbectClass e #atributos que vamos usar para construir o banco. Ao contrário do que eu pensava, não #é preciso um schema específico pro squid, pois o .ldif para o squid é bem simples
pidfile /usr/local/openldap/var/run/slapd.pid
argsfile /usr/local/openldap/var/run/slapd.args
access to * by self write
access to * by anonymous auth
access to * by * read
#######################################################################
# BDB database definitions
#######################################################################
database bdb
suffix "dc=squid"
rootdn "cn=Manager,dc=squid"
rootpw secret
directory /usr/local/openldap/var/openldap-data
readonly off
# Essas são as definições da nossa backend, que vai ser a Berkeley Database. O suffix #é o DN (distinguished name, uma entrada única) onde serão passas as queries que #vao ser passadas ao bdb. rootdn é o "administrador" do banco.
index cn,sn,uid,o pres,eq,sub
index userPassword pres,eq
index objectClass eq
# Esses serão os índices a ser mantidos. cn, sn, uid, o, userPassword são os índices #que iremos usar quando formos criar o banco, e # pres, eq, sub são tipos de índice. #Não é obrigatório criar um índice para as entradas, mas isso vai deixar a busca no #banco mais rápida.
Agora é interessante testar o seu slapd.conf pra ver se ele não está com nenhum erro, vá no diretório sbin do openldap e digite ./slaptest
Vamos agora criar o nosso banco. Pra isso, vamos criar um arquivo .ldif (LDAP Data Interchange Format). Esse é o meu ldif, criei em no /sbin dentro do openldap:
Código:
# Squid. Esse vai ser o nodo principal da nossa árvore.
dn: dc=squid
objectClass: dcObject
objectClass: organization
dc: squid
o: squid
description: Auth Squid
# Manager. Esse é o administrador. Usei o mesmo que vinha no exemplo no openldap.org
dn: cn=Manager,dc=squid
objectClass: organizationalRole
cn: Manager
description: Directory Manager
# Usuários Squid. Aqui estão os nossos usuários do squid. uid é o campo que o squid vai ler como login, e userPassword como a senha.
dn: uid=maria,dc=squid
objectClass: person
objectClass: inetOrgperson
uid: maria
sn: maria
cn: maria
userPassword: senha
dn: uid=joao,dc=squid
objectClass: person
objectClass: inetOrgperson
uid: joao
sn: joao
cn: joao
userPassword: senha
cada nodo deve ter uma única entrada, diferente de toda as outras(dn). uid,sn,cn,userPassword, o, description são os atributos que usei. Se o seu dn for: uid=joao,dn=squid o atributo uid deve ser obrigatoriamente joao. Isso vale para todas as entradas que você criar. Se você quiser fazer a autenticação de mais serviços usando o openldap como samba, qmail etc. seria interessante você criar um nodo principal que abrigue todos os serviços. Por exemplo:
Nodo principal:
dn: dc=minhaEmpresa
Serviços:
dn: dc=squid,dc=minhaEmpresa
dn: dc=qmail,dc=minhaEmpresa
dn: dc=samba,dc=minhaEmpresa
Usuarios:
dn: uid=joao,dc=squid,dc=minhaEmpresa
dn: uid=carlos,dc=samba,dc=minhaEmpresa
....
....
Voltando: Depois de criar nosso ldif, vamos alimentar o banco. Isso pode ser feito offline (sem o daemon slapd rodando) ou online (com o daemon rodando). Pra criar o banco offine eu uso o comando: (se o .ldif estiver no mesmo diretorio onde está sendo rodado o comando)
./slapadd -l squid.ldif -f /usr/local/openldap/etc/openldap/slapd.conf
pra criar online:
./ldapadd -x -w secret -f squid.ldif -D "cn=Manager,dc=squid"
o -x é pra usar autenticação simples, e o -w secret é o password que esta no rootpw dentro do slapd.conf
se você quiser ver como está o seu banco, ou fazer um backup dele pra um arquivo .ldif, use o comando ./slapcat -f arquivo_de_saida.ldif
Eu prefiro criar a database offline, pois online de vez em quando dá uns erros chatinhos. Se você estiver tendo problemas na hora de criar, ou na hora de rodar o daemon, use no final do comando -d 1 por exemplo, pra ativar o debug level 1. Existem vários níveis de debug, veja no openldap.org os niveis.
Agora vamos fazer um teste: Inice o daemon com ./slapd -d 1 pra ativar o debug, e veja se está tudo ok. Vamos agora alterar o squid.conf pra fazer a autenticação com ldap.
O programa que vamos usar pra autenticação do squid é o squid_ldap_auth. Ele deveria estar dentro do diretorio libexec do seu squid. Se não estiver, basta ir no arquivo fonte de instalação do squid em /helpers/basic_auth/LDAP e dar um make && make install
Dentro do squid.conf:
Código:
auth_param basic children 5
auth_param basic realm Digite nome e senha
auth_param basic credentialsttl 1 hour
auth_param basic casesensitive off
auth_param basic program /usr/local/squid/libexec/squid_ldap_auth -b dc=squid -D dc=squid -h localhost -v 3 -p 389
#Se vc tiver rodando o openldap em uma maquina remota, vc deve botar -h #ip_da_maquina. o -v 3 é para usar o ldap v3, eu tive que usar isso pq tava dando um #erro referente a isso.
#Agora vamos criar uma acl dentro do squid.conf que peça a autorização:
acl auto proxy_auth REQUIRED
#e no http_access botamos:
http_access allow auto
pronto! agora é so inicar o squid e o slapd, abrir o browser que vai pedir a autenticação. Se vc quiser adicionar mais usuários, basta criar um ldif apenas com a entrada desse usuário e usar o ./slapadd pra adicionar. O que eu não estou conseguindo fazer agora sao algumas operações que necessitam que o slapd esteja rodando pra funcionar, como deletar entradas e fazer buscas, pq sempre dá um erro de invalid_credentials e eu não estou conseguindo resolver. Se alguém conseguier posta aqui. Flw!