Installation d'un proxy cache avec filtrage d'URL & antivirus avec authentification ActiveDirectory

 

L'installation d'un proxy en frontal d'une connexion internet, peut s'avérer utile et dans plusieurs cas de figures : contrôle parental, antivirus, filtrage d'URL, etc...

Toutes les commandes et configurations ont été faites pour être lancé sur un environnement Debian.

 

Installation.

apt-get install squid3

Par défaut Squid écoute sur le port 3128.

Le fichier de configuration de Squid se trouve dans /etc/squid3/squid.conf

Voici quelques paramètres à modifier dans le fichier :

visible_hostname Nom_du_serveur

Ce sera le nom qui apparaitra dans les logs.
acl localnet src 192.168.0.0/24 Adaptez ici le range de votre réseau...
http_access allow localnet Il faut que "localnet" corresponde au nom définit dans l'acl ci-dessus
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh Décommentez cette ligne pour avoir des logs disons lisibles

Squid est maintenant prêt à fonctionner.

/etc/init.d/squid3 restart

Utilisation de SquidGuard.

apt-get install squidguard

Attention, l'installation de Squiguard sous Etch provoque l'installation de Squid2. Donc il faut desactiver Squid2 une fois que le script apt a terminé.

/etc/init.d/squid stop
/usr/sbin/update-rc.d -f squid remove

Ensuite il faut configurer Squid pour qu'il utilise Squidguard pour filtrer les URL :

sed -i -e '/TAG: url_rewrite_program/,/^#[ ]*none/{/#[ ]*none/a\
url_rewrite_program /usr/bin/squidGuard
;}' /etc/squid3/squid.conf

Modifier aussi l'emplacement des logs pour que tout corresponde :

sed -i -e 's|^logdir .*$|logdir /var/log/squid3|' \
/etc/squid/squidGuard.conf

Il faut ensuite modifier un peu la configuration de Squidguard pour qu'en cas d'infraction le navigateur renvoit quelque chose. Ce peut être une page web avec un avertissement ou en renvoi sur Google.

Ouvrir /etc/squid/squidGuard.conf et renseigner la valeur :

SQUIDGUARD_DESTINATION=http://www.google.com/

Configurons ensuite squidguard pour renvoyer les sites pour adultes vers cette nouvelle destination :

sed -i -e 's/^[# ]*\(dest adult.*\)$/\1/' \
-e '/^dest adult/,/}/{ s/^#// ;}' \
-e "/^dest adult/,/}/{ s|^\(.*redirect[\t ]*\).*\$|\1${SQUIDGUARD_DESTINATION}| ;}" \
/etc/squid/squidGuard.conf/

Activation de cette configuration pour tous les utilisateurs :

sed -i -e '/^[\t ]*default/,/}/{ s/^\(.*pass[\t ]*\).*$/\1!adult/ ;}' \
/etc/squid/squidGuard.conf

Bien pratique, mettre ensuite une tâche planifier pour mettre à jour les blacklist (faites un copier/coller du script ci-après - /etc/cron.daily/update-squidguard-blacklist est en fait le nom et l'emplacement du script)

/bin/echo '#!/bin/bash

# Téléchargement de la mise à jour de la blacklist des sites pour adultes
/usr/bin/wget -q ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/adult.tar.gz \
--output-document=/tmp/adult.tar.gz

/bin/tar --directory /var/lib/squidguard/db -xzf /tmp/adult.tar.gz

# SquidGuard doit être capable de mettre à jour les fichiers de base de données
/bin/chown -R proxy:proxy /var/lib/squidguard/db

# Mise à jour de la base de données de SquidGuard avec les données téléchargées
if [ -x /usr/bin/squidGuard ]; then
/bin/su proxy -c "/usr/bin/squidGuard -C all > /dev/null 2>&1"
fi' \
| /usr/bin/tee /etc/cron.daily/update-squidguard-blacklist
/bin/chmod +x /etc/cron.daily/update-squidguard-blacklist

 

Utilisation de DansGuardian avec Clam Antivirus

Nous aurons besoin ici de plusieurs pacquets debian qui ne sont pas installés par défaut, donc avant de se lancer dans l'installe de DansGuardian pensez à lancer la commande suivante :

apt-get install unrar lha
apt-get install dansguardian clamav

Nous allons ensuite éditer le fichier de conf de DansGuardian /etc/dansguardian/dansguardian.conf et y appliquer des modifications :

language = 'french'

De façon à ce que les alertes soient en français.
loglevel = 1
On baisse le niveau des logs, ainsi nous n'aurons que les accès refusés
contentscanner = '/etc/dansguardian/contentscanners/clamav.conf'
Activation de l'antivirus ClamAV
#UNCONFIGURED Commentez la ligne.

Authentification automatique avec une Active Directory

pré-requis :

  • Nom de domaine ActiveDirectory : nosland.local
  • Nom du contrôleur de domaine : w2k3 (w2k3.nosland.local) - 10.73.24.2/32
  • Compte Admin de l'AD : Administrateur
  • Nom du serveur Squid sous linux : Proxy (proxy.nosland.local) - 10.73.24.30/32

Paquets necessaires au fonctionnement :

  • samba : sert à faire le lien entre le serveur linux et l'Active Directory
  • krb5-user et libpam-krb5 : sert au protocole Kerberos (protocole d'authentification de l'AD)
  • ntpdate : Sert à synchroniser les horloges sous linux avec un serveur distant
  • winbind : Composant Samba permettant de résoudre les infos utilisateurs et group d'un domaine NT4 & AD.

apt-get install samba krb5-user libpam-krb5 ntpdate winbind

Lors de l'installation, il peut vous être demandé le noms des serveurs de domaines Kerberos, répondez alors w2k3

Pour fonctionner dans l'AD votre serveur linux doit être synchronisé avec le contrôleur de domaine :

ntpdate 10.73.24.2

Il faut ensuite configurer Kerberos :

Effacer le fichier d'origine et remplacer par un vierge:

mv /etc/krb5.conf /etc/krb5.original
touch /etc/krb5.conf

Copier/coller ce contenu dans le fichier vierge :

[libdefaults]
default_realm = nosland.local
clock_skew = 300
ticket_lifetime = 24000
default_tkt_enctypes = des3-hmac-sha1 des-cbc-crc
default_tgs_enctypes = des3-hmac-sha1 des-cbc-crc
dns_lookup_realm = false
dns_lookup_kdc = true
[realms]
nosland.local = {
kdc = w2k3
admin_server = w2k3
default_domain = nosland.local
}
[domain_realm]
.nosland = nosland
nosland = nosland

Vous pouvez tester ensuite si ça marche avec la commande kinit Administrateur à l'invit saisissez le password du compte Administrateur de l'AD.

La commande klist permet de voir les tickets kerberos en cache.

Notez que si le test du compte marche pas, essayez en utilisant Administrateur@nosland.local

Notez également que pour un fonctionnement optimum il est préférable voir indispensable de paramétrer le serveur DNS de l'AD comme DNS principal de votre serveur proxy (/etc/resolv.conf)

 

Configuration de Samba

Effacer le fichier d'origine et remplacer par un vierge:

mv /etc/samba/smb.conf /etc/samba/smb.original
touch /etc/samba/smb.conf

Copier/coller ce contenu dans le fichier vierge :

[global]
workgroup = nosland
realm = nosland.com
security = ads
encrypt passwords = yes

password server = w2k3.nosland.local

idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum groups = yes
winbind enum users = yes
winbind use default domain = yes

Relancez les service samba & Winbind

/etc/init.d/samba restart
/etc/init.d/winbind restart

Rejoindre l'Active Directory : net join -U Administrateur

Si vous rencontrez des erreurs, c'est que votre Samba est mal configuré, lisez bien le message d'erreur et adaptez votre smb.conf en fonction. Notez qu'il faut impérativement relancer winbind après chaques modifications du fichier de conf de samba.

Quelques commandes

net ads testjoin Devrait vous renvoyez OK
wbinfo -g Affiche la liste des groupes de l'AD
wbinfo -u Affiche la liste des utilisateurs de l'AD

Mise en place avec Squid :

Première chose, on teste : /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic

Saisir un login / password d'un utilisateur de l'AD, par ex : NosPHeratus mot_de_passe

Normalement vous devriez voir un beau OK. Faites CTRL+C pour quitter le mode NTLM.

Editer ensuite le fichier de conf de squid : /etc/squid3/squid.conf

En principe dans la section auth_param tut devrait être commenter. Le plus simple donc et de laisser tout commenter et d'ajouter juste sous le TAG auth_param le code suivant :

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Nosland Proxy
auth_param basic credentialsttl 2 hours

Ne laisser qu'un groupe spécifique (le groupe surfeurs) le droit de surfer au travers du proxy :

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of=nosland\\surfeurs

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of=nosland\\surfeurs

Ici surfeurs est un groupe AD et pas une OU ! On peut tout aussi bien remplacer le nom surfeurs par son SID !

Il faut ensuite modifier les acl en ajoutant :

acl ntlm proxy_auth REQUIRED

Modifiez ensuite la règle de connexion :

http_access allow ntlm

(remplacer localnet de tout à l'heure par cette ligne)

Il faut décommenter la ligne append_domain (Microsoft utilisant le NetBios pour les noms court)

append_domain .domainead.local

Par sécurité ou par estétique, on désactive l'inclusion de l'IP et/ou du nom du système dans les entêtes http :

forwarded_for off

On relance Squid et hop c'est fonctionnel !