Installation de Squid et SquidGuard sur une Debian ETCH
But de ce document
Ce document me sert de mémo pour installer Squid et SquidGuard sur une Debian ETCH. Je le diffuse en espérant qu’il puisse servir à d’autres personnes.
Pré-requis
Avoir installé une Debian de Base :
Installation Squid
Paquet à installer :
# aptitude install squid
Configuration de Squid
Fichier de configuration de Squid :
/etc/squid/squid.conf
Le fichier de configuration de Squid comporte de nombreuses pages (surtout des commentaires), mais il y a très peu de choses à changer pour le faire fonctionner.
Personnellement, j’ai supprimé les commentaires après avoir fait une copie de sauvegarde du fichier d’origine :
# cd /etc/squid/
# mv squid.conf squid.conf.sav
# cat squid.conf.sav | grep -v ^# | grep -v ^$ > squid.confRechercher la partie concernant la déclaration des acl et ajouter une ligne correspondante à la configuration du réseau :
acl VotreDomaine src 192.168.0.0/255.255.255.0
Ensuite, quelques lignes plus bas avant la dernière ligne « http_access deny all » ajouter la ligne suivante :
http_access allow VotreDomaine
Redémarrer le serveur pour prendre en compte les modifications :
/etc/init.d/squid restart
Configuration du poste client
Dans la partie configuration du proxy, il faut indiquer le nom ou l’adresse IP du proxy et le port par défaut 3128.
Il est possible de désactiver le cache du navigateur en le mettant à 0 car celui du proxy est suffisant.
Il est possible aussi d’indiquer une liste de serveurs accessibles sans passer par le proxy (ex : Intranet)
Vérification du fonctionnement
La commande suivante permet de surveiller les logs du proxy pour vérifier que tout fonctionne correctement :
tail - f /var/log/squid/access.log
Problème pour accéder aux serveurs internes
Si sur votre réseau, vous avez des serveurs Web accessibles par exemple à l’adresse « monserveur », vous allez certainement rencontrer ce message si vous tentez d’y accéder en passant par squid :
The requested URL could not be retrieved
Unable to determine IP address from host name for { intranet }
Pour résoudre ce problème, il y a trois solutions :
append_domain .mondomaine.net
Remarque : Après chaque modification du fichier « squid.conf », il faut recharger la configuration :
/etc/init.d/squid reload
Modifier la taille du cache
Si votre disque dur dispose de suffisant de place, vous pouvez augmenter la taille du cache de Squid.
Pour cela, il faut ajouter ou modifier cette ligne dans « squid.conf » :
cache_dir ufs /var/spool/squid 1024 256 256
Voici la signification des différentes valeurs :
Ensuite, il faut initialiser le cache avec ces commandes :
# /etc/init.d/squid stop
# squid -z
# /etc/init.d/squid startRemarque : Vous pouvez vérifier que l’arborescence est correctement créée dans « /var/spool/squid ».
Comment créer un cache supplémentaire
Pour augmenter les performances de squid, il faut répartir les caches sur le maximum de disques. Si le serveur comporte deux disques, il est donc conseillé de créer un nouveau cache sur ce deuxième disque. Voici la procédure à suivre pour créer ce nouveau cache :
Création du répertoire sur le deuxième disque (ex : /sdb1) :
# mkdir /sdb1/squid
Affectation des mêmes droits que le répertoire du premier cache « /var/spool/squid » créé lors de l’installation :
# chmod 750 /sdb1/squid
# chown proxy.proxy /sdb1/squid Ligne à ajouter dans « /etc/squid/squid.conf » pour paramétrer le nouveau cache :
# cache_dir ufs /sdb1/squid 200 16 256
Commandes pour initialiser le nouveau cache (Création des sous-répertoires) :
# /etc/init.d/squid stop
# squid -z
# /etc/init.d/squid startOptimisation des performances
Il est possible de modifier quelques variables dans « squid.conf » pour optimiser les performances du cache :
Taille maximum de mémoire vive utilisée pour stocker du cache :
cache_mem 128 MB
Taille maximum des objets stockés dans le cache :
maximum_object_size 15 MB
Utilisation illimitée de la bande passante :
delay_parameters 1 -1/-1 -1/-1
Installation de SquidGuard
Paquets à installer :
# aptitude install squidguard
Récupération de la liste des sites sensibles :
wget ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz
tar zxvf blacklists.tar.gz -C /var/lib/squidguard/db/
cd /var/lib/squidguard/db
mv blacklists/* .
/usr/bin/squidGuard -C all
chown -R proxy: /var/lib/squidguard/db/ATTENTION : Si les bases de données ne sont pas générées ou les droits incorrectes au lancement de squid, squidGuard va monopoliser toute la puissance du serveur et la seule solution sera de tuer les processus de squidGuard avec par exemple cette commande :
# kill `ps aux | grep squidGuard | grep -v grep | awk '{print $2}' | xargs`
ATTENTION : Le temps de compilation des blacklists avec la commande « squidGuard -C all » est très long (plus de 10mn)
Ajouter les deux lignes suivantes dans /etc/squid/squid.conf
redirect_program /usr/bin/squidGuard
redirect_children 10J’ai commencé par épurer le fichier de configuration de SquidGuard :
# cd /etc/squid/
# mv squidGuard.conf squidGuard.conf.sav
# cat squidGuard.conf.sav | grep -v ^# | grep -v ^$ > squidGuard.conf J’ai ajouté les lignes suivantes dans /etc/squid/squidGuard.conf pour filtrer les sites adultes :
dest adult {
domainlist adult/domains
urllist adult/urls
expressionlist adult/expressions
redirect http://votresite/interdit.html
}
acl {
default {
pass !adult
redirect http://votresite/interdit.html
}
}
Redémarrer le serveur pour prendre en compte les modifications :
/etc/init.d/squid restart
Exemple complet et commenté du fichier /etc/squid/squid.conf
# Le fichier de configuration fourni par défaut sous Debian
# est très long et contient énormément de commentaires.
# -> Cette version est épurée de tous les commentaires
# Pas d'infos sur ces lignes
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
# Taille maximum de mémoire vive utilisée pour stocker du cache
cache_mem 16 MB
# Taille maximum des objets stockés dans le cache
maximum_object_size 15 MB
# Paramétrage du cache N°1 sur le premier disque
# - Type de stockage
# - Emplacement du cache
# - Taille totale du cache en MB
# - Nombre de répertoires de niveau 1 et de niveau 2
cache_dir ufs /var/spool/squid 200 16 256
# Paramétrage du cache N°2 sur le deuxième disque
cache_dir ufs /mnt/sdb1/squid 200 16 256
# Format des logs :
# -> Avec off, squid utilise son propre format de logs,
# mais la date et l'heure ne sont pas lisible.
# -> Avec on, squid utilise le format standard CLF
emulate_httpd_log off
# Ces deux lignes permettent d'intégrer le plugin SquidGuard
redirect_program /usr/bin/squidGuard
redirect_children 4
# Pas d'infos sur ces lignes
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
# **********************************************************
# ** Définition des restrictions pour l'accès au cache **
# **********************************************************
# Liste des acl par défaut -> A conserver
acl all src 0.0.0.0/0.0.0.0
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 SSL_ports port 443 563 # https, snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
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 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
# ACL qui définit le réseau utilisant le cache
acl MonReseau src 192.168.0.0/255.255.255.0
# Accès par défaut -> A conserver
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
# Donne accès au cache au réseau
http_access allow MonReseau
# Interdit tout le reste
http_access deny all
# Autorise les réponses pour tout le monde (par défaut)
http_reply_access allow all
# Autorise le protocole icp pour tout le monde (par défaut)
icp_access allow all
coredump_dir /var/spool/squid
Proxy transparent avec Squid et Shorewall
Dans « /etc/shorewall/rules » il faut ajouter cette ligne pour rediriger le port 3128 sur le port 80 sauf pour les adresses internes
REDIRECT loc:192.0.0.16 3128 tcp www - !192.168.0.0/24
De plus, il faut configurer Squid pour activer le mode transparent en ajoutant cette ligne au fichier « /etc/squid/squid.conf » :
http_port 3128 transparent
ATTENTION : Pour l’accès à certains site https via ssl, il est nécessaire d’indiquer le proxy dans la configuration du navigateur pour que ça fonctionne
Installation de Webalizer
Webalizer permet de générer des graphiques à partir des fichiers de logs d’Apache, de serveur FTP ou de Squid.
Installation :
# aptitude install webalizer
Ensuite, il faut modifier les lignes suivantes du fichier « /etc/webalizer/webalizer.conf » :
LogFile /var/log/squid/access.log
LogType squid
Cette commande permet d’exécuter l’analyse des logs :
# webalizer
Le résultat de l’analyse est stocké par défaut dans « /var/www/webalizer »
Remarques :
Liens pour avoir plus d’informations
Document très complet, récent et surtout en français sur la configuration de Squid :
Site officiel de Squid :
Historique des modifications
| Version | Date | Commentaire |
|---|---|---|
| 0.1 | 25/11/04 | Création par Tony GALMICHE |
| 0.2 | 03/12/04 | Mise à jour |
| 0.3 | 06/01/05 | Mise à jour suite à installation serveur Pentium Pro 200 |
| 0.4 | 14/01/05 | Ajout des chapitres « Exemple complet et commenté du fichier /etc/squid/squid.conf », « Comment créer un cache supplémentaire » et « Liens pour avoir plus d’informations » |
| 0.5 | 26/01/09 | Mise à jour suite à installation sur nouveau serveur |

Commentaires
> Installation de Squid et SquidGuard sur une Debian Testing
Merci pour votre excellente documentation que je ne cesse d’exploiter depuis que je l’ai découverte.
L’article sur Squid et SquidGuard m’a permis de les installer à mon domicile. J’ai rencontré seulement 3 obstacles :
1) La ligne "tail - f /var/log/squid/access.log" contient un espace malencontreux entre - et f . J’ai mis un peu de temps avant de m’en rendre compte.
2) En voulant rendre le proxy obligatoire aux clients, j’ai fini par trouver la réponse sur le site de l’ECP (http://people.via.ecp.fr/ alexis/formation-linux/proxy-arp.html) :
echo "1" > /proc/sys/net/ipv4/ip_forward
autorise le partage d’internet
echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
autorise le partage d’internet par le proxy.
Au départ, mettre les 2 fichiers à "1" pour activer le partage. Ensuite mettre le premier à "0" pour rendre le proxy obligatoire.
3) Comment automatiser la mise à jour des blacklists ? L’article de Stephane Barcik propose une solution : http://sbarcik.free.fr/article.php3 ?id_article=22
Encore merci à vous.