Tuto : Squidguard avec filtrage Active Directory

CE TUTO N’EST PLUS A JOUR MERCI D’UTILISER CE BILLET INSTALLATION SQUID3 + DANSGUARDIAN + CLAMAV + ADZAPPER

squid-cache_logo.jpg

Dans le monde fabuleux de l’entreprise il arrive souvent que l’on vous fasse signer une Charte Informatique, pour les utilisateurs ça veux en général dire qu’il faut respecter de simple règles de bon sens, du style : ne pas aller sur les sites de pr0n !!!

Mais pour l’administrateur la charte informatique impose souvent d’établir de nouveaux système de sécurité, nous avions vu dans un tuto précédent comment installer SQUID un système de proxy cache qui nous permettait premièrement d’optimiser notre bande passante grâce à la fonction de cache et deuxièmement de voir qui allait ou.

Une fois que ce premier pallier est mis en place il arrive souvent que l’on doivent durcir un peu notre politique 🙂

C’est pourquoi il est parfois indispensable de coupler à SQUID un module de filtrage, le bien nommé SQUIDGUARD, de base SquidGuard permet un filtrage basique, “tel groupe d’IP n’a pas le droit d’accéder a tel site durant tel heure etc …” dans ce tuto nous allons chercher à pousser le module dans ses dernier retranchement : nous allons le coupler avec des groupes Active Directory !

Dans mon exemple nous voulons ceci :

  • Les personnes de la société ne fesant pas parti d’un groupe Active Directory de restriction ont accès à rien
  • Quand une personne fait parti du groupe AD Groupe_Internet_Filtrage_webradio elle n’aura pas accès à Deezer ou à GrooveShark
  • Il suffit de rajouter une personne dans ce groupe pour que le filtrage soit mis en place.

tux-gendarme-mobile.png
Nous supposons que vous avez suivi ce tuto mais que vous n’avez pas encore commencer l’installation de SquidGuard.

L’installation de SquidGuard se fait par les sources 1.4 pour bénéficier du support LDAP qui permettra de gérer vos listes d’utilisateurs directement dans l’annuaire Active Directory, il faudra tout d’abord gérer les dépendances :

# sudo apt-get install libldap2-dev libldap-2.4-2 bison flex

Nous allons ensuite récupérer les différentes sources nécessaires à la compilation de BerkelyDB le système de Base de données utilisé par squidGuard :

#sudo -s
#cd /usr/src/
#wget //pixxlisation.net/public/images/informatique/SQUID_SQUIDGUARD/db-4.6.21.tar.gz
# tar -zxvf db-4.6.21.tar.gz
# cd db-4.6..
# cd build_unix
#../dist/configure –prefix /usr/local/BerkeleyDB
# make
# make install
# echo “/usr/local/BerkeleyDB/lib” >> /etc/ld.so.conf
# ldconfig
# ldconfig -v | grep libdb-4

Une fois BerkeleyDB installé nous allons pouvoir télécharger et compiler squidGuard :

#cd /usr/src/
#wget //pixxlisation.net/public/images/informatique/SQUID_SQUIDGUARD/squidGuard-1.4.tar.gz
# tar -zxvf squidGuard-1.4.tar.gz
# cd squidGuard-1.4
# ./configure with-squiduser=proxy with-ldap=yes (mettre des double tirets devant les options)
# make
# make install

Normalement à la fin de l’installation vous deviez obtenir le message suivant :

Installing squidGuard
Done.
Installing configuration file
Created directory /usr/local/squidGuard
Assigned /usr/local/squidGuard to user proxy
Created directory /usr/local/squidGuard/db
Assigned /usr/local/squidGuard/db to user proxy
Created directory /usr/local/squidGuard/log
Assigned /usr/local/squidGuard/log to user proxy
Copied sample squidGuard.conf
/usr/local/squidGuard/squidGuard.conf is now readable
The initial configuration is complete.
Congratulation. SquidGuard is successfully installed.

Une fois squidGuard installé le fichier de configuration se trouve dans /usr/local/squidGuard/squidGuard.conf et le fichier de log dans /usr/local/squidGuard/log/squidGuard.log

Nous allons maintenant installer un script cgi qui permettra au de rediriger les utilisateurs qui auront été bloqué par le proxy sur une page leurs expliquant pourquoi il ont été bloqué et leurs permettant de vous contacter au cas ou ce soit une erreur.

#sudo -s
#cd /usr/src/
#wget //pixxlisation.net/public/images/informatique/SQUID_SQUIDGUARD/squidguard-simple.zip
#unzip squidguard-simple.zip
#mv squidGuard-simple.cgi /usr/lib/cgi-bin/
#cd /usr/lib/cgi-bin/
#chown www-data:www-data squidGuard-simple.cgi
#chmod +x squidGuard-simple.cgi

Ensuite nous modifions le script afin de l’adapter à notre installation, ici je choisi d’afficher le nom de l’utilisateur(ligne 90), l’url visitée(ligne 93) et le groupe d’interdiction associé à la page(ligne 94), de plus je modifie l’adresse eMail de l’administrateur pour mettre la mienne (ligne 97). Pour afficher ou masquer des option il suffit de commenter ou décommenter la ligne.

Nous allons maintenant établir un premier fichier de configuration afin de vérifier si le fonctionnement de squid+squidguard est opérationnel, tout d’abord modifier le fichier squidGuard.conf comme suis :

# FICHIER DE CONF ET DB SQUIDGUARD
#
dbhome /usr/local/squidGuard/db
logdir /usr/local/squidGuard/log
#
# REGLE DE RESTRICTION SUR LES GROUPES
acl {
default {
pass none
redirect //localhost/cgi-bin/squidGuard-simple.cgi?clientname=%i&srcclass=%s&targetclass=%t&url=%u
}
}

Puis éditer le fichier squid.conf pour rajouter les lignes permettant de passer par squidGuard:

#url_rewrite_program /usr/local/bin/squidGuard -c /usr/local/squidGuard/squidGuard.conf
#url_rewrite_children 5

faite un reload de Squid:

#/etc/init.d/squid3 reload

Normalement si tout s’est bien passer voter client devrait obtenir un refus de connexion avec ce type de page :

Refus_Connexion.png

Nous allons maintenant procéder à l’installation de Webmin et du module squidGuard, cette interface nous permettra de créer facilement des listes de destinations interdite en fonction de ce que l’on veux bloquer, dans cet exemple je décide de ne blacklister que deux domaines deezer.com et grooveshark.com vous pourrez par la suite installer des bases de données complète déjà renseigner par exemple celle de l’université de Toulouse qui est mise à jour de manière régulière, pour l’installation et la gestion de blacklistes je vous renvoi à ce tutoriel qui est une véritable mine d’info.

L’installation de Webmin se fait par les packages .deb présent sur le site officiel:

#cd /usr/src/
#wget //prdownloads.sourceforge.net/webadmin/webmin_1.520_all.deb
#dpkg -i webmin_1.520_all.deb

Une fois l’installation terminer vous pouvez vous connecter à l’interface webmin en tapant dans votre navigateur internet //ip_de_votre_serveur:10000 normalement le login est celui de votre utilisateur classique (sur ubuntu server) une fois connecter aller dans Webmin>Configuration de Webmin>Modules Webmin>Cocher À partir d’une URL ftp ou http>coller l’adresse suivante //pixxlisation.net/public/images/informatique/SQUID_SQUIDGUARD/squidguard-0.91.2.wbm.gz

Aller ensuite dans la partie Serveurs et choisissez Squidguard, ici différents question vous seront posées, indiquer l’emplacement du fichier de configuration de squidGuard (/usr/local/squidGuard/squidGuard.conf) l’utilisateur qui lance squid et son groupe proxy:proxy et enfin le module vous indiquera qu’il doit modifier le fichier de conf de squid pour fonctionner pour cela créer un répertoire squid dans /etc/:

#mkdir /etc/squid/

et valider la modification du fichier de conf, en fait ce fichier ne sert a rien si ce n’est a faire croire au module qu’il à bien modifier le conf de squid.

vous obtiendrez à la fin l’interface de gestion de squidGuard.

squidguard_module.png

Nous allons maintenant créer une destination c’est un ensemble de domaine, urls ou expression qui regroupe ce que l’ont veux interdire, ici je vais créer une destination nommée webradio avec à l’intérieur deux domaine deezer.com et grooveshark.com

squidguard_destination.png

Allons voir ce qui à changer du coté de nos fichier de conf, un petit changement dans le squidGuard.conf :

#
# FICHIER DE CONF ET DB SQUIDGUARD
#
dbhome /usr/local/squidGuard/db
logdir /usr/local/squidGuard/log
#
# REGLE DE RESTRICTION SUR LES GROUPES
destination webradio {
domainlist webradio-1.destdomainlist
}

acl {
default {
pass none
redirect //localhost/cgi-bin/squidGuard-simple.cgi?clientname=%i&srcclass=%s&targetclass=%t&url=%u
}
}

Nous voyons que la destination webradio existe désormais, elle regroupe les deux domaine que j’ai renseigner, vous pourrez ainsi rajouter des domaines, des urls à cette destination ou en créer d’autre. Maintenant il est temps de coupler le tout avec l’AD.

Dans mon Active Directory j’ai créer une Unité d’Organisation que j’ai nommé InternetRules, à l’intérieur j’ai créer un groupe nommé Groupe_Internet_Filtrage_webradio et je me suis mis dans ce groupe.

squidguard_groupe_AD.png

Nous allons maintenant modifier le fichier de configuration de squidGuard afin qu’il recherche les membres du groupe Groupe_Internet_Filtrage_webradio, ces utilisateurs n’auront pas accès aux destination webradio. Nous allons donc dans un premier temps régler la connexion LDAP, dans votre fichier de conf rajouter les lignes suivantes:

#Configuration pour l’authentification LDAP
ldapbinddn cn=AdministrateurAD, cn=Users, dc=mondomaine, dc=com
ldapbindpass motdepasseadminAD
#Configuration du cache LDAP
ldapcachetime 300

il faudra bien entendu adapté ceci a votre configuration, ici Administrateur est Admin du domaine mondomaine.com il est dans l’OU user et son mot de passe est motdepasseadminAD, cet utilisateur servira à faire les requête LDAP sur votre annuaire AD il est indispensable qu’il est les droits adéquates. Nous allons ensuite rajouter un groupe d’utilisateur, ici il s’agit du groupe Groupe_Internet_Filtrage_webradio pour cela il faudra rajouter la ligne suivante:

#
# SOURCE ADDRESSES:
#
src nowebradio {
ldapusersearch ldap://adresseip_serveur_AD:3268/dc=mondomaine,dc=com?sAMAccountName?sub?
(&(memberof=CN=Groupe_Internet_Filtrage_webradio%2cOU=InternetRules%2cDC=mondomaine%2cDC=com)(sAMAccountName=%s))
}

Enfin nous allons maintenant interdire l’accès à la destination webradio à la source nowebradio (qui représente le groupe Groupe_Internet_Filtrage_webradio) pour cela nous allons rajouter la ligne suivante au fichier de conf:

acl {
nowebradio {
pass !webradio any
redirect //localhost/cgi-bin/squidGuard-simple.cgi?clientname=%i&srcclass=%s&targetclass=%t&url=%u
}
default {
pass none
redirect //localhost/cgi-bin/squidGuard-simple.cgi?clientname=%i&srcclass=%s&targetclass=%t&url=%u
}
}

Pour que la configuration soit prise ne compte nous allons faire un reload de squid:

#/etc/init.d/squid3 reload

Puis nous Allons vérifier que tout s’est bien dérouler dans le fichier /usr/local/squidGuard/log/squidGuard.log vous devriez obtenir:

2010-09-21 14:19:01 6330 New setting: dbhome: /usr/local/squidGuard/db
2010-09-21 14:19:01 6330 New setting: logdir: /usr/local/squidGuard/log
2010-09-21 14:19:01 6330 New setting: ldapbinddn: cn=Administrateur, cn=Users, dc=mondomaine, dc=com
2010-09-21 14:19:01 6330 New setting: ldapbindpass: motdepasseadminAD
2010-09-21 14:19:01 6330 New setting: ldapcachetime: 300
2010-09-21 14:19:01 6330 init domainlist /usr/local/squidGuard/db/webradio.destdomainlist
2010-09-21 14:19:01 6330 loading dbfile /usr/local/squidGuard/db/webradio.destdomainlist.db
2010-09-21 14:19:01 6330 squidGuard 1.4 started (1285071541.227)
2010-09-21 14:19:01 6330 squidGuard ready for requests (1285071541.286)
2010-09-21 14:19:01 6332 init domainlist /usr/local/squidGuard/db/webradio.destdomainlist
2010-09-21 14:19:01 6332 loading dbfile /usr/local/squidGuard/db/webradio.destdomainlist.db
2010-09-21 14:19:01 6332 squidGuard 1.4 started (1285071541.278)
2010-09-21 14:19:01 6332 squidGuard ready for requests (1285071541.322)

Dans cette configuration, les users qui ne font pas parti du groupe n’ont pas accès à internet :

default {
pass none
redirect //localhost/cgi-bin/squidGuard-simple.cgi?clientname=%i&srcclass=%s&targetclass=%t&url=%u

Les gens qui font parti du groupe Groupe_Internet_Filtrage_webradio ont accès a toutes les pages d’internet sauf les webradio deezer et grooveshark:

nowebradio {
pass !webradio any
redirect //localhost/cgi-bin/squidGuard-simple.cgi?clientname=%i&srcclass=%s&targetclass=%t&url=%u
}

Vous pouvez vérifier votre configuration avec un client web en poitant votre navigateur sur le proxy, dans mon exemple voici ce que j’obtient avec l’utlisateur cpiveteau:

cpiveteauok1.png

cpiveteaudeezer.png

cpiveteaugrooveshark.png

Maintenant l’utilisateur helpdesk passe par le proxy mais ne fait parti d’auncun groupe :

helpdesknogrp.png

Puis on le rajoute dans le groupe Groupe_Internet_Filtrage_webradio et on reload squid, voici le resultat:

helpdeskAD.png

helpdeskgrp1.png

helpdeskgrp2.png

Et voila le travail, à vous maintenant d’adapter ce tuto à votre environnement et n’hésiter pas à me poser des questions j’essaierai de vous aider dans votre configuration sur ce bonne journée ! 😎

9 réponses sur “Tuto : Squidguard avec filtrage Active Directory”

  1. Bonjour,

    Au cas où celui qui a rédigé ce tuto (ou quelqu’un d’autre qui s’y connait) lise ce commentaire, j’aimerai lui poser les questions suivantes :

    1 – Est ce qu’il y a une quelconque configuration à faire au niveau du serveur (sur lequel il y a active directory) pour que la requête ldap au niveau de squidguard marche. Y a t’il besoin de mettre en place un serveur ldap ou un truc du genre ?

    2 – Est ce qu’en utilisant une authentification ntlm au niveau de squid on peut faire des requêtes ldap avec squidguard.

    Merci.

  2. Bonjour boy,

    Pour répondre a ta première question, je n’ai rien modifier du coté de mon Annuaire Active Directory, il faut simplement que le port utiliser pour recvoir les requete soit le bon (pour mo ic’est le port par défaut 3268)
    tu n’a pas besoin de serveur LDAP, il faut juste que ton serveur squid soit relier a ton AD comme je l’ai fait ici :

    //pixxlisation.net/index.php?p

    dans un premier temps si tu souhaite mettre en place une telle infra je te conseille de suivre mon premier tuto pour ensuite revenir sur celui-ci.

    En te souhaitant bon courage 🙂

  3. Bonjour,

    J’utilise Sarg pour visualiser mes logs Access.log.

    Cependant, quand je redirige mes sites interdit vers mon .cgi, je ne vois pas dans mes rapports de log sarg ou access.log que ce site a été bloqué. Est-ce normal ?? Peut-on resoudre ce probléme ??

    Merci d’avance 🙂

  4. J’utilise aussi sarg pour visualiser la navigation, mais je ne me suis pas encore assez pencher dessus pour savoir comment vraiment l’exploiter. je ne peut pas vraiment te répondre, dans mon SARG je ne vois pas les sites interdit non plus.

  5. Je vois les utilisateurs bloqués dans le sens ou se sont ceux qui n’appartiennent a aucun groupe de mon Active Directory… La je vois bien un TCP_DENIED

    Par contre dans le SquidGuard.log pas sur que l’on puisse voir les connexions … Du coup je me demande si c’est possible de voir les connexions interdites et redirigés vers le CGI … Je poste tout cela sur le forum de SARG et je reviens te voir si j’ai une réponse…

  6. Bonjour Pixxl,
    Merci pour ce tuto, il est bien fait et super clair à comprendre.
    Par contre j’ai un problème, j’ai suivi le tuto à la lettre mais au final squidGuard me bloque toutes les pages et j’obtiens un message d’erreur dans les log du squidGuard.
    2011-04-28 15:41:40 [8284] (squidGuard): ldap_simple_bind_s failed: Invalid credentials
    2011-04-28 15:41:40 [8284] Added LDAP source: administrateur

    Est ce que tu peux m’aider un peu car j’ai bo chercher je ne comprend pas l’origine de ce message d’erreur.
    Je te remercie par avance de ton aide.
    Cordialement.

    Pour info: je suis sur une Debian avec un squid3 installé.
    Pour le squidGuard bah c’est celui de ton tuto.

  7. J’ai fais une petit erreur sur le login administrateur, autant pour moi.
    Tout à l’air de fonctionner correctement.
    Merci pour le Tuto =)

  8. Bonjour,

    J’ai bien suivi le tuto pour mettre en place ma solution de filtrage, et je suis tout de même confronté a plusieurs erreurs.

    La première et la plus genante, c’est que squidguard ne reconnais absolument pas les commandes “LDAPetc…”.

    Par exemple dans mon fichier de configuration squidGuard.fonc, j’utilise :

    #Configuration pour l’authentification LDAP
    ldapbinddn CN=administrateur,CN=users,DC=domaine,DC=local
    ldapbindpass ********************

    #Configuration du cache LDAP
    ldapcachetime 300

    src admin {
    ldapusersearch ldap://dc.domain.local:3268/dc=domaine,dc=local?sAMAccountName?sub?(&(memberof=CN=Proxy_admins%2cOU=InternetRules%2cDC=domaine%2cDC=local)(sAMAccountName=%s))
    }

    Au moment ou je donne a squidguard son fichier e configuration, je jette un oeil au fichier de log qui m’affiche qu’il trouve une erreur de syntaxe pour ces commandes.

    Je constate que pour votre configuration squidGuard reconnais bien les commandes comme dans l’exemple que vous avez copié dans votre article :

    2010-09-21 14:19:01 6330 New setting: ldapbinddn: cn=Administrateur, cn=Users, dc=mondomaine, dc=com
    2010-09-21 14:19:01 6330 New setting: ldapbindpass: motdepasseadminAD

    Est ce que j’ai oublié quelque chose d’essentiel ? Pourquoi squidguard ne prend pas en compte les paramètres et m’affiche une syntax error immediatement quand il rencontre ces lignes ?

    Merci.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.