Squid – Déployer un proxy et implémenter SQUIDGUARD

Cet article à pour objectif de traiter la mise en place d’un serveur proxy. La mise en œuvre d’un serveur proxy SQUID. A noter que le module Squidguard sera également présenté.

Qu’est ce qu’un PROXY ?

Un équipement Proxy Web permet de fournir les services Internet à un ensemble de machines depuis une station unique. Le fait de centraliser cette connexion vers Internet pourra permettre la fourniture d’un cache pour les pages web, permettre la traçabilité des connexions et permettre un filtrage de contenu (par URL, par mots-clés, par machine, par application, etc…).

Exemple du rôle de cache Proxy :

Voici ce qu’il se passe pour une première demande d’URL. Exemple d’une demande pour www.google.fr :

  1. Le PC demande l’URL via le proxy,
  2. Le proxy étant mandaté effectue la demande pour le compte du PC. Le serveur web renvoie la page au serveur proxy, puis celui-ci la stocke en cache,
  3. Le proxy renvoie la page demandée au PC.

Second schéma avec réutilisation du cache du proxy :

Voici ce qu’il se passe pour une seconde demande d’URL. Exemple d’une demande toujours vers www.google.fr :

  1. Le PC demande l’URL via le proxy,
  2. Le proxy renvoie la page demandée sans solliciter la connexion Internet, la page étant stockée dans son cache.

Intégration de squid:

L’intégration de la plate-forme SQUID va être réalisée sur le système d’exploitation Linux Debian.

La version du système d’exploitation qui sera intégré est Debian GNU/Linux 4.0 (Etch) RC3. Cette version est la dernière version stable en ligne de Debian à l’heure où ces lignes sont écrites.

SQUID

La version du produit mise en œuvre est la version 3.0 STABLE6-20080616

Ses fonctionnalités sont :

  • Proxy et cache des protocoles HTTP, HTTPS, Gopher, FTP,
  • Hiérarchisation du cache,
  • Gestion de cache transparent,
  • Contrôle des accès étendu,
  • Prend en charge SNMP,
  • Cache les requêtes DNS,
  • ICP, HTCP, CARP, Cache Digests,
  • WCCP (protocole permettant de rediriger un flux de données en temps réel).

Installation de SQUID

Pour l’installation de Squid, il suffit d’utiliser l’outil apt-get, l’équivalent de  « ajout suppression de programme » sous Windows.

Pour cela, il suffit de taper la commande suivante en CLI (en français, « interface en ligne de commande ») :

# apt-get install squid3

La commande suivante vous permet de vérifier que le processus SQUID est bien en fonctionnement.

# ps aux | grep squid3

IMAGE

Configuration de SQUID

Afin de configurer Squid, il suffit d’éditer le fichier de configuration suivant :

User: # nano /etc/squid3/squid.conf

Dans ce fichier de configuration il faut rajouter un certain nombre de critères en plus de ceux par défaut :

#Port d’écoute du serveur proxy

http_port 3128

#Recommended minimum configuration:

acl all src 0.0.0.0/0.0.0.0

acl LAN src sous-réseau/masque

acl manager proto cache_object

acl localhost src 127.0.0.1/255.255.255.255

acl to_localhost dst 127.0.0.0/8

#Acl définissant une liste de ports connus qui seront bloquées nativement.

acl SSL_ports port 443

acl Safe_ports port 80             # http

acl Safe_ports port 21             # ftp

acl Safe_ports port 443                       # https

acl Safe_ports port 70             # gopher

acl Safe_ports port 210                       # wais

acl Safe_ports port 1025-65535           # unregistered ports

acl Safe_ports port 280                       # http-mgmt

acl Safe_ports port 488                       # gss-http

acl Safe_ports port 591                       # filemaker

acl Safe_ports port 777                       # multiling http

acl Safe_ports port 1863                     # MSN

acl CONNECT method CONNECT

#  TAG: http_access

#

#Recommended minimum configuration:

#

#Listes de contrôles d’accès pour le service MSN

acl msn port 1863

acl msn2 url_regex e-messenger

acl msn3 req_mime_type -i âpplication/x-msn-messenger$

acl msn4 url_regex -i gateway.dll

##################### On autorise ou interdit les ACL définies plus haut #############

# On autorise à partir des ACL définies plus haut quels seront les listes d’accès réseaux.

http_access deny nolan

http_access allow LAN

# On autorise l’accès au cache uniquement à l’hôte locale.

http_access allow manager localhost

# on interdit les requêtes pour les ports connus

http_access deny !Safe_ports

# Example rule allowing access from your local networks. Adapt

# to list your (internal) IP networks from where browsing should

# be allowed

http_access allow localhost

################Configuration du cache du serveur Squid########################

#(sert à affecter un utilisateur et un groupe pour squid)

cache_effective_user proxy proxy

#visible_hostname cache.domaine.fr (c’est le nom que renvoi squid lorsqu’il est interrogé de l’extérieur)

cache_dir ufs /var/spool/squid3 500 16 256

#c’est la mémoire que l’on alloue à Squid pour tourner , valeur par défaut 8 MB.

cache_mem 16 MB

#pour indiquer à quel endroit stocker le fichier log des requêtes

cache_access_log /var/log/squid3/access.log

#(pour indiquer à quel endroit stocker le fichier log de squid

cache_log /var/log/squid3/cache.log

# La commande ci-dessous vous permet de réaliser le filtrage de contenu sur la base de squidGuard

url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf

url_rewrite_children 5

SquidGuard

Ce produit est un complément à la solution Proxy Squid. Cette extension permet de rediriger vers une URL prédéfinie (exemple, www.google.com ou une page html simple) les requêtes ne correspondant pas aux critères de navigation contenus dans les Blacks-List (ensemble d’URL non autorisées).

Installation de SquidGuard

Pour l’installation de SquidGuard, il suffit d’utiliser aptitude, utilitaire permettant l’intégration et la mise à jour d’applications pour Debian.

Pour cela il suffit de taper la commande suivante en CLI :

User: # apt-get install squidGuard

Après avoir installé squidguard, il faut ajouter les blacks-lists :

User: # wget http://cri.univ-tlse1.fr/blacklists/download/blacklist.tar.gz

User: # cp /path/to/your/blacklist.tar.gz /var/lib/squidguard/squidGuard/db

User: # cd /usr/local/squidGuard/db

User: # tar xfv blacklist.tar

La commande ci-dessous permet au dossier « /var/lib/squidguard/db/blacklists » d’être accessible en lecture-écriture et de fournir ainsi l’accès aux bases de données d’URL

User: # chown -R proxy:proxy /usr/local/squidGuard/db/blacklists

Configuration de SquidGuard

Afin de procéder à la configuration de squidGuard, il suffit de modifier le fichier suivant :

# nano /etc/squid/squidGuard.conf

Voici le contenu du fichier squidGuard.conf :

#

# CONFIG FILE FOR SQUIDGUARD

#

dbhome /var/lib/squidguard/db/blacklists

logdir /var/log/squid

#

# TIME RULES:

# abbrev for weekdays:

# s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat

time workhours {

weekly mtwhf 00:00 – 24:00

date *-*-01  00:00 – 24:00

}

dest adult {

domainlist adult/domains

urllist adult/urls

}

dest agressif {

domainlist agressif/domains

urllist agressif/urls

}

#dest  astrology {

#        domainlist astrology/domains

#        urllist astrology/urls

#        }

#dest audio-video {

#        domainlist audio-video/domains

#        urllist audio-video/urls

#        }

#dest blog {

#        domainlist blog/domains

#       urllist blog/urls

#       }

#dest cleaning {

#        domainlist cleaning/domains

#        urllist cleaning/urls

#        }

dest dangerous_material {

domainlist dangerous_material/domains

urllist dangerous_material/urls

}

#dest dating {

#        domainlist dating/domains

#        urllist dating/urls

#        }

dest drog {

domainlist drogue/domains

urllist drogue/urls

}

dest filehosting {

domainlist filehosting/domains

urllist filehosting/urls

}

#dest financial {

#        domainlist financial/domains

#        }

#dest forums {

#        domainlist forums/domains

#        urllist forums/urls

#       }

#dest gambling {

#        domainlist gambling/domains

#        urllist gambling/urls

#        }

#dest games {

#        domainlist games/domains

#        urllist games/urls

#        }

dest hacking {

domainlist hacking/domains

urllist hacking/urls

}

#dest liste_bu {

#        domainlist liste_bu/domains

#        urllist liste_bu/urls

#        }

dest malware {

domainlist malware/domains

urllist malware/urls

}

#dest marketingware {

#        domainlist marketingware/domains

#       urllist marketingware/urls

#        }i

dest mixed_adult {

domainlist mixed_adult/domains

urllist mixed_adult/urls

}

dest mobile-phone {

domainlist mobile-phone/domains

urllist mobile-phone/urls

}

dest phishing {

domainlist phishing/domains

urllist phishing/urls

}

dest publicite {

domainlist publicite/domains

urllist publicite/urls

}

dest radio {

domainlist radio/domains

urllist radio/urls

}

dest reaffected {

domainlist reaffected/domains

urllist reaffected/urls

}

dest redirector {

domainlist redirector/domains

urllist redirector/urls

}

dest sect {

domainlist sect/domains

###     urllist sect/urls

}

dest sexual_education {

domainlist sexual_education/domains

urllist sexual_education/urls

}

dest shopping {

domainlist shopping/domains

urllist shopping/urls

}

dest strict_redirector {

domainlist strict_redirector/domains

urllist strict_redirector/urls

}

dest strong_redirector {

domainlist strong_redirector/domains

urllist strong_redirector/urls

}

dest tricheur {

domainlist tricheur/domains

urllist tricheur/urls

}

dest warez {

domainlist warez/domains

urllist warez/urls

}

dest webmail {

domainlist webmail/domains

urllist webmail/urls

}

#on déclare les blacklists, ainsi qu’une redirection  vers un site en cas de blocage

acl {

default {

pass  !agressif !dangerous_material  !drog !filehosting  !hacking !adult !strict_redirector !strong_redirector !malware  !mixed_adult !warez !mobile-phone !phishing !publicite !radio !reaffected !redirector !sect !sexual_education !shopping  !tricheur !webmail !warez all

redirect http://localhost/block.html

pass none

#!astrology !audio-video !blog !cleaning !dating!financial !forums !gambling !games!liste_bu !marketingware

} }

Il ne faut pas oublier d’insérer à la fin du fichier squid.conf la commande suivante afin que SquidGuard soit pris en compte par Squid :

url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf

url_rewrite_children 5

Utilisation de SQUID

Ce chapitre décrit les paramètres à mettre en œuvre et illustre par quelques exemples la configuration de listes de contrôles d’accès. Des commandes permettant l’utilisation au quotidien de Squid y sont aussi recensées.

Position du fichier de configuration :

/etc/squid3/squid.conf

Description du fichier de configuration squid.conf :

Une description des différents paramètres implémentés au sein des serveurs Squid est effectuée ci-dessous.  Pour rappel le fichier de configuration du serveur Squid se situe dans le dossier /etc/squid3/ du serveur Proxy.

On spécifie que le port d’écoute du serveur Proxy est le 3128 :

http_port 3128

Listes d’accès de base :

acl all src 0.0.0.0/0.0.0.0

acl LAN src 192.168.100.0/255.255.255.0

acl localhost src 127.0.0.1/255.255.255.255

acl to_localhost dst 127.0.0.0/8

acl manager proto cache_object

Listes de contrôles d’accès pour le service MSN :

acl msn port 1863

acl msn2 url_regex e-messenger

acl msn3 req_mime_type -i âpplication/x-msn-messenger$

acl msn4 url_regex -i gateway.dll

Listes de contrôles d’accès ayant la particularité d’être des ports connus :

acl SSL_ports port 443

acl Safe_ports port 80             # http

acl Safe_ports port 21             # ftp

acl Safe_ports port 443                       # https

acl Safe_ports port 70             # gopher

acl Safe_ports port 210                       # wais

acl Safe_ports port 1025-65535           # unregistered ports

acl Safe_ports port 280                       # http-mgmt

acl Safe_ports port 488                       # gss-http

acl Safe_ports port 591                       # filemaker

acl Safe_ports port 777                       # multiling http

acl Safe_ports port 1863         # MSN

acl CONNECT method CONNECT

Exemple d’ACL permettant de faire du filtrage de contenue (mot clé & URL) :

acl sexe url_regex porn (filtrage par mots clés)

acl sexe url_regex porno

acl sexe2 url_regex ^http:\/\/www\.playboy.* (filtrage d’url)

acl sexe2 url_regex ^http:\/\/www\.voila.fr

………

#application des ACL

http_access deny sexe

http_access deny sexe2

Application des restrictions de MSN:

#

http_access deny LAN msn

http_access deny LAN msn2

http_access deny LAN msn3

http_access deny LAN msn4

http_access deny !Safe_ports

deny_info TCP_RESET msnlogin

http_access allow localhost

http_access allow LAN

# Authorisation d’accès au cache pour l’hôte localhost

http_access allow manager

http_access deny all

Ce paramètre permet d’affecter un utilisateur et un groupe pour l’accès au cache de Squid.

cache_effective_user proxy proxy

Cette commande permet de définir la taille du cache.

cache_dir /var/spool/squid 1000 16 256

C’est la mémoire que l’on alloue à Squid pour tourner, valeur par défaut 8 MB.

cache_mem 16 MB

Ce paramètre indique l’endroit où sera stocké le fichier log des requêtes squid.

cache_access_log /var/log/squid3/access.log

Ce paramètre indique l’endroit où sera stocké le fichier log du cache de squid.

cache_log /var/log/squid3/cache.log

Utilisation de SQUID

Après toutes modifications du fichier squid.conf, un redémarrage de l’application est nécessaire en utilisant la commande suivante :

# /etc/init.d/squid3 restart

Pour plus d’informations à ce sujet, des exemples sont fournis sur le site officiel de squid : http://www.squid-cache.org/Versions/v3/3.0/cfgman/

Utilisation de SquidGuard

Ce chapitre décrit les paramètres à mettre en œuvre et illustre par quelques exemples la configuration de listes de contrôles d’accès. Des commandes permettant l’utilisation au quotidien de SquidGuard y sont aussi recensées.

Le fichier de configuration squidGuard.conf

Une présentation des paramètres présents dans le fichier squidGuard.conf est effectuée ci-dessous.

Le fichier squidGuard.conf se trouve dans /etc/squid/. Pour l’éditer, il suffit d’utiliser un outil tel que VIM ou NANO.

# nano /etc/squid/squidGuard.conf

Définition des bases de données de filtrage utilisées :

Dbhome Endroit où les blacklists sont stockées.

Logdir Endroit où les logs sont stockés.

#Les options ci-dessous permettent de définir les heures d’utilisation.

#

# TIME RULES:

# abbrev for weekdays:

# s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat

time workhours {

weekly mtwhf 08:00 – 16:30

date *-*-01  08:00 – 16:30

}

# Définition de la base de données de filtrage utilisée.

dest adult {

domainlist adult/domains (domains contient une liste de domaines à interdire)

urllist adult/urls (contient des URLs)

}

dest publicite {

domainlist publicite/domains

urllist publicite/urls

}

dest warez {

domainlist warez/domains

urllist warez/urls

}

dest porn {

domainlist porn/domains

urllist porn/urls

}

…………………………..

#Définition de la, où les bases de données de filtrage qui ne seront pas utilisées, le dièse permet de mettre en commentaire les bases de données qui ne seront prises en compte.

#dest webmail {

#        domainlist webmail/domains

#       urllist webmail/urls

#       }

On déclare les blacklists, ainsi qu’une redirection vers un site en cas de blocage :

acl {

#Default est le nom que l’on attribue par default à la liste de contrôle d’accès des bases de données.

default {

#On spécifie les bases de données utilisée pour le filtrage sous la forme !nom_de_la_base .

pass !adult !publicite !warez !porn all

# On spécifie la page vers laquelle seront redirigés les utilisateurs.

redirect http://localhost/block.html

# On spécifie que l’accès n’est pas autorisé pour les bases de données déclaré auparavant.

pass none

}

}

Il est possible de mettre en oeuvre des ACL permettant d’intégrer et d’établir des règles avec des conditions telles que des groupes d’utilisateurs ou des plages horaires.

Pour plus d’informations à ce sujet, des exemples sont fournis sur le site officiel de Squid Guard : http://www.squidguard.org/Doc/extended.html

Présentation des listes noires de Squid Guard

Ci-dessous, la liste des bases de données pour Squid Guard, créée et entretenue par l’université de Toulouse :

Catégorie / Nombre / Description

Mise à jour de la base de données

Un script permet de mettre à jour automatiquement les bases de données SquidGuard. Pour lancer le script de mise à jour, exécuter la commande suivante :

#cd /home/user/

# sh maj_squidguard

Il suffit de l’intégrer dans /home/user/ par exemple (le chemin n’est pas fixe, vous pouvez en définir un autre).

# Répertoire ou se trouve la base de données.

destdir=/var/lib/squidguard/db

# Répertoire des logs de squid.

logdir=/var/log/squid

# Fichier de log pour savoir si le téléchargement s’est bien déroulé.

logfile=$logdir/updsgdb.log

# site ftp

ftp_url=ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/

# fichier de blacklisting

blfile=blacklists.tar.gz

#gestion d’erreurs et logs

launch() {

cmd=$1

purpose=$2

echo « #$2 » | tee -a $logfile

echo $cmd | tee -a $logfile && err=`eval « $cmd 2>&1″`

if [ $? -ne 0 ]

then

echo « ERREUR $? : $err » | tee -a $logfile

exit

fi

}

#entete et log

entete() {

cat << EOF

#—————————————-

#TELECHARGEMENT DES BLACKLISTS POUR SQUID

#—————————————-

#`date`

logfile=$logfile

EOF

}

# Chargement des BLACKLISTS

cd $destdir

# entete du fichier journal

entete | tee $logfile

#sauvegarde de l’ancienne blacklist

if [ -f « $destdir/$blfile » ]

then

launch « mv -v $destdir/$blfile $destdir/$blfile.bak » « sauvegarde de l’ancienne blacklist »

fi

#telechargement de la blacklist

launch « wget -N -P $destdir $ftp_url$blfile » « telechargement ftp de la blacklist »

# Décompression du fichier récupère

launch « tar xvzf $destdir/$blfile -C $destdir/blacklists/ » « Decompression du fichier downloade »

# changement de proprietaire pour que squid puisse fonctionner

# On a maintenant besoin d’une liste launch « chown -R proxy:proxy $destdir/blacklists $destdir/blacklists » « changement de proprietaire »

# arret de squid

launch « /etc/init.d/squid stop » « Arret de squid »

# mise a jour de la base de donnees

launch « /usr/bin/squidGuard -C all » « Mise a jour de la bdd squidguard »

# redemarrage de squid

launch « /etc/init.d/squid start » « Redemarrage de squid »

Utilisation de Squid Guard

Après avoir ajouté une nouvelle blacklist, il suffit de taper la commande suivante afin que la nouvelle modification ou base de données soit prise en compte.

User: # squidGuard -C all

Après avoir modifié une blacklist, il suffit de taper la commande suivante afin que la nouvelle modification soit prise en compte.

User: # squidGuard -u all

Cette commande permet de consulter les logs de SquidGuard en temps réel :

User: # tail -f /var/log/squid/squidGuard.log

Bannière du serveur Squid :

Il est possible de modifier les messages d’erreur affichés par Squid en éditant les messages d’erreur HTML :

User: # usr/share/squid/error/english

Diagnostique

Ci-dessous sont référencées les principales commandes permettant de vérifier le bon fonctionnement du service :

Squid

Pour consulter les logs liés aux accès vers Internet, il suffit de consulter les fichiers situés dans l’arborescence suivante : /var/log/squid3

Consulter les accès en temps réel :

# tail -f /var/log/squid3/access.log

Consulter les logs du cache du proxy :

# tail -f /var/log/squid3/cache.log

Consulter les mouvements du cache du proxy :

# tail -f /var/log/squid3/store.log

Squid Guard

Pour consulter les logs liés aux règles de filtrage, il suffit de consulter le fichier suivant : /var/log/squid/squidGuard.log

Consulter les accès en temps réel :

# tail -f /var/log/squid/squidGuard.log

En règle générale, le disfonctionnement de Squid ou de SquidGuard est soit lié à la présence d‘erreurs de syntaxe dans les fichiers de configuration, soit lié à l’utilisation de commandes non conformes.

3 thoughts on “Squid – Déployer un proxy et implémenter SQUIDGUARD

  1. Article interessant, va vas voir mon blog si ça te dit 🙂 http://actualeet.fr/ je viens d’ouvrir un forum, t’es le bienvenue ! ca parle de hacking, geek, high-tech, astuces, newe etc enfin bref a+

  2. Milesi

    Salut aghiles,

    très bien fait ton article, je suis entrain de monter une plateforme SQUID avec WEBMIN je cherche un utilitaire pour analyser les logs de mon proxy en temps réel, mais je sèche connaitrais tu un module de webmin ou un programme sous debian pour pouvoir le faire.

    merci

    @+

    Yohan M. TSAR6

  3. Milesi

    nikel, j’ai trouvé, en faisant tail -f /var/log/squid3/access.log

    encore merci

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *