Squid & LDAP

Comment brancher un squid 2.6 (et supérieur normalement) sur un LDAP (openldap en l'occurence).

Les ingrédients

installer les composants de base de la recette :

apt-get install slapd squid pwgen ldap-utils

J'ai l'habitude d'utiliser un utilisateur servant aux applications à se binder sur le LDAP, et qui possède des droits de lecture uniquement. C'est ma façon de faire, libre à vous de l'utiliser ou pas.

Faire revenir le LDAP

Créer une OU “squid_users” :

dn: ou=squid_users,dc=mon_arbre
ou: squid_users
objectClass: organizationalUnit
objectClass: top

Créer un utilisateur :

dn: uid=test,ou=squid_users,dc=mon_arbre
uid: test
userPassword: {MD5}CY9rzUYh03PK3k6DJie09g==
objectClass: account
objectClass: simpleSecurityObject
objectClass: top

Cet utilisateur est le fameux test/test :)

Petit script rapide pour ajouter facilement des utilisateurs :

#!/bin/bash

if [ -f /tmp/squid.ldif ]
then
        rm -f /tmp/squid.ldif
fi

for user in $(cat $1)
do
        password=`pwgen 8`
        password_crypt=`/usr/sbin/slappasswd -h {MD5} -s $password`

        if [ -f /tmp/squid.ldif ]
        then
                rm -f /tmp/squid.ldif
        fi

        echo "dn: uid=$user,cn=$2,ou=squid_users,dc=mon_arbre" > /tmp/squid.ldif
        echo "uid: $user" >> /tmp/squid.ldif
        echo "userPassword: $password_crypt" >> /tmp/squid.ldif
        echo "objectClass: account" >> /tmp/squid.ldif
        echo "objectClass: simpleSecurityObject" >> /tmp/squid.ldif
        echo "objectClass: top" >> /tmp/squid.ldif

        ldapadd -x -c -D "cn=admin,dc=mon_arbre" -w secret -f /tmp/squid.ldif

        ./envoimail "[acces internet]" "$user@mon_entreprise.tld" cmd "./msg_proxy.sh $user $password $2"
        rm -f /tmp/squid.ldif
done

Rissoler le squid

Dans le squid.conf :

# Auth LDAP
auth_param basic program /usr/lib/squid/ldap_auth -h 127.0.0.1 -D "cn=applications,dc=mon_arbre" -w secret -b "ou=squid_users,dc=mon_arbre" -f (&(objectclass=account)(uid=%s))
auth_param basic realm Authentification requise !
auth_param basic children 10
auth_param basic credentialsttl 2 hours
acl ldapauth proxy_auth REQUIRED
http_access deny !ldapauth

Avec ça, tous les utilisateurs authentifiés ont accès au ternet convivial

Ajouter les oignons

# On trie
external_acl_type ldap %LOGIN  /usr/lib/squid/squid_ldap_group -h 127.0.0.1 -D "cn=applications,dc=mon_arbre" -w secret -b "ou=squid_users,dc=mon_arbre" -f (&(objectclass=account)(uid=%v)(entryDN=uid=%v,cn=%a,ou=squid_users,dc=mon_arbre))

# Ensuite les ACL des groupes
acl vip external ldap vip
acl normal external ldap normal
acl full_vip external ldap full_vip

#et enfin les http_access associes
http_access allow normal sites_autorises
http_access allow full_vip
http_access allow vip !no_exe

Note : Utiliser entryDN est un fix un peu gruik, parce que normalement je devrais tester l'appartenance à un groupe à avec groupMembership, mais *apparemment* ce n'est dispo que sur les annuaires Novell… d'où ce petit hack

unix/squid_ldap.txt · Last modified: 2010/01/12 13:29 (external edit)