Squid
+ SquidGuard
Voici un petit
document qui décrit l'installation de
Squid avec le
plugin
SquidGuard sur
une distribution linux Debian.
SQUID est un proxy WEB puissant avec de très nombreuses
options.
SquidGuard est un plugin qui permet de rediriger certaines
pages selon des critères (mot dans l'url etc..) vers une pages choisie, ceci afin d'en interdire la
consultation.
Squid, principal composant de ce système, assure
les fonctions de :
- un cache WEB commun pour optimiser la bande passante.
- la possibilité d'introduire une
authentification utilisateurs afin d'interdire le surf
à
certains utilisateurs.
- un filtrage d'accès "basique".
SquidGuard propose un filtrage puissant d'accès au
web, en fonction :
- de groupes d'utilisateurs, définis de diverses
manières. Ici, nous nous baserons sur des IPs ou des groupes
d'IPs, mais il est possible d'utiliser l'authentification des
utilisateurs mise en place sur Squid,
- de listes de domaines et d'URI qui serviront à
définir soit des cibles autorisées,
soit des cibles interdites,
- de listes de domaines et d'URI qui ne serviront
qu'à interdire l'accès aux cibles
spécifiées,
- de plages horaires pendant lesquelles l'accès
sera autorisé ou interdit
Nous verrons ici :
- l'installation et la configuration de Squid dans le cas
d'un
serveur proxy transparent (On a pas besoin de
renseigner les informations de connexion du proxy dans les différents programmes) à l'aide
d'iptables.
- l'installation et la configuration de SquidGuard
- la consultation des logs via SquidFire
- La mise en place de statistiques via MRTG
Table des matières
- Squid + SquidGuard
- Installation
- La
configuration de Squid
- Rendre le
proxy transparent
- La
configuration de SquidGuard
- Installation
de SquidFire
- Installation
& Configuration de MRTG
- Problème
de timeout sur certains sites
à partir des postes clients
Installation
tout simplement :
a
pt-get
install squid squidguard chastity-list
Si vous désirez installer la partie webmin de squid, vous
devez installer le package webmin-squid
Nous ne verons pas ici la configuration de squid par webmin.
Squid est daemon, il se comporte donc comme n'importe quel daemon.
Pour démarrer :
/etc/init.d/squid start
Pour l'arrêter :
/etc/init.d/squid stop
Pour le redémarrrer :
/etc/init.d/squid reload
Pour relire le fichier de configuration après modifications
:
/etc/init.d/squid
reload
Les fichiers de logs sont par défaut dans :
/var/log/squid
n'oubliez pas de les consulter en cas de problèmes.
La
configuration de Squid
Le fichier de configuration est :
/etc/squid/squid.conf
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
Ici
vous
définissez les répertoires du cache, vous pouvez
définir plusieurs répertoires,
l'intêret est de
définir des répertoires sur des disques
différents
afin de gagner en vitesse.
#
Chemin des fichiers de cache
cache_dir ufs
/var/spool/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 lisibles.
# -> 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
Ici on définit les ACL, ceci vous permet de
définir des
groupes afin de leur attribuer des droits différents.
Cette
ligne définit les adresses IP des utilisateurs du
réseau.
Vous devez la personnaliser selon votre configuration réseau.
# ACL qui définit le
réseau utilisant le cache
acl MonReseau src
10.1.2.0/255.255.255.0
# 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
Cette partie définit les ports
auquels certains
utilisateurs auront droits d'accès, ici ils auront
accès
à http (port 80), https (port 443), msn (1863). Vous pouvez
bien
entendu interdire les accès en commentant ou supprimant les
lignes correspondantes.
#acl
SSL_ports port
873
# rsync
acl Safe_ports port
80
# http
acl Safe_ports port
21
# ftp
acl Safe_ports port
22
# ssh
acl Safe_ports port 443
563
# https, snews
acl Safe_ports port
1863
# msn
#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
Enfin on définit les accès
Les règles sont lues dans l'ordre et s'arretent
à la
première interdiction
correspondant au critère de l'utilisateur, un peu comme un
firewall, l'ordre des règles est donc important !
Dans l'exemple, ci dessous, localhost a tous les droits.
On permet grâce à la ligne
http_access deny !Safe_ports d'interdire
la connexion à tous les ports exceptés ceux
définis par les lignes
acl Safe_ports
acl purge method PURGE
acl CONNECT method
CONNECT
#
Accès fournis par squid
http_access allow
manager localhost
http_access deny manager
http_access allow purge
localhost
http_access deny purge
http_access deny
!Safe_ports
On donne ensuite accès au WEB au localhost et
au réseau "Mon réseau" définit plus
haut.
#donne
accès au proxy à mon réseau
http_access
allow MonReseau
http_access allow
localhost
On interdit le reste. Important car sinon votre proxy sera
un
"open proxy" il pourra être utilisé par n'importe
quel via
internet, notamment pour faire des choses malintentionnées.
#
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
Ces lignes sont importantes dans le cas d'un proxy
transparents ne les oublier pas.
#
pour le proxy transparent
httpd_accel_with_proxy on
httpd_accel_uses_host_header
on
httpd_accel_host virtual
httpd_accel_port 80
Vous devez indiquer les serveurs DNS de votre FAI
dns_nameservers
212.121.5.45 212.121.5.46
Si vous désirez effectuer des statistiques WEB
notamment avec MRTG ou rrdtool, Squid peut faire serveur SNMP
#
on active le SNMP sur squid pour les stats mrtg :)
acl snmppublic
snmp_community public
snmp_port 3401
snmp_access allow
snmppublic all
Vous définissez ensuite l'host de votre proxy
et le mail de l'administrateur.
visible_hostname
monproxy.domain
cache_mgr admin@domain
Pour plus d'informations sur la configuration
de Squid, voir le wiki officiel :
ici
Liens complémentaires :
Installation
de Squid et SquidGuard sur une Debian Testing
Configurer
Squid comme serveur proxy
Squid
/ SquidGuard par Webmin
Rendre
le proxy transparent
Afin de ne pas avoir à configurer tous les navigateurs
à
l'utilisation de notre proxy (bien que dans le cas d'internet explorer,
on puisse le configurer à travers les GPO), nous allons rendre
le
proxy transparent. Le principal est simple, notre passerelle va
intercepter le trafic en direct du port 80 (WEB) et le rediriger
automatiquement vers le proxy Squid. Ainsi, ce dernier s'occupera du
partage internet.
Pour cela nous allons faire appel à iptables.
Il suffit de saisir, la ligne :
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Note: eth0 étant l'interface du réseau local
Note : vous devez re-exéctuer cette commande à
chaque redémarrage de la machine proxy.
Autre lien :
Transparent
Proxy with Linux and Squid mini-HOWTO
Trauduction en Français :
Transparent
Proxy with Linux and Squid mini-HOWTO
http://www.fido-fr.net/linux_proxy_transparent.shtml
La
configuration de SquidGuard
Le fichier de configuration est :
/etc/squid/squidGuard.conf
#----------------------------------------------------------------
# SquidGuard CONFIGURATION FILE
#----------------------------------------------------------------
Ici on définit les répertoires où se
trouvent les blacklists et le répertoire des logs
#
CONFIGURATION DIRECTORIES
dbhome /var/lib/chastity
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 s 09:30-12:00 13:00-19:00
weekly m 09:00-12:00 13:00-19:00
weekly t 09:00-11:00 12:00-19:00
weekly w 09:00-12:00 12:00-18:00
weekly h 09:00-13:00 13:00-18:00
weekly f 09:00-12:00 13:30-18:00
weekly a 08:20-13:00 13:30-19:00
}
On définit en ensuite les groupes de
listes contenant
- les domains (domainlist) soit donc les domaines interdits.
- la liste des urls (urllist) soit donc les URL interdites.
- la liste des expressions (expressionlist) soit les
expressions interdites contenuent dans une page WEB.
L'option
log
/var/log/squid/nom_du_fichier.log permet de
générer un log lorsqu'une redirection est
effectuée.
dest
redirector {
domainlist redirector/domains
urllist redirector/urls
expressionlist
redirector/expressions
}
dest warez {
domainlist warez/domains
urllist warez/urls
}
dest ads {
domainlist ads/domains
urllist ads/urls
}
dest aggressive {
domainlist aggressive/domains
urllist aggressive/urls
}
dest drugs {
domainlist drugs/domains
urllist drugs/urls
}
dest gambling {
domainlist gambling/domains
urllist gambling/urls
log /var/log/squid/jeux.log
}
dest violence {
domainlist violence/domains
urllist violence/urls
expressionlist
violence/expressions
}
Vous pouvez ensuite définir des
groupes
source
LAN {
ip 10.1.2.0/255.255.2550
}
On définit ensuite les droits pour chaque groupe et la page
vers laquelle ils seront redirigés.
L'option pass !groupe_de_listes permet de donner l'accès si
cela ne correspond pas aux listes interdites
et l'adresse de la page vers laquelle ils sont redirigés.
Vous devez avoir un serveur HTTP installé, par
défaut, la page fournie par SquidGuard (voici son
emplacement : /usr/share/doc/squidguard/examples/squidGuard.cgi.gz) est
en cgi, vous devez la copier dans le dossier cgi (par
défaut sur apache /usr/lib/cgi-bin/ ) et activer le cgi sur
votre serveur HTTP.
# ACLs
acl {
LAN {
pass !adult !audio-video !hacking !redirector !warez !ads !aggressive
!drugs !gambling !violence all
redirect
http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u&lang=fr
}
Default
redirect
http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u
pass none
}
}
Voici des adresses où vous pourrez
télécharger des listes de sites assez
conséquentes :
ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz
http://squidguard.mesd.k12.or.us/blacklists.tgz
http://www.bn-paf.de/filter/de-blacklists.tar.gz
La page de l'université Toulouse 1 consacrée
à SquidGuard :
ici
Installation
de SquidFire
SpidFire est un projet PHP (
http://squidfire.sourceforge.net/)
qui permet de visualiser et effectuer des recherches dans les logs de
connexions (access.log) issus de Squid.
On part du principe que PHP est activé sur votre serveur
WEB, sinon dans le cas d'un serveur Apache, rendez-vous
ici
- Téléchargez la source
- Décompressez le dans le répertoire de
votre site
- Connectez-vous à sur la page setup.php
- Suivez le guide
SquidFire va comme un grand consulter le fichier /var/log/access.log
N'oubliez pas de donner les droits à l'utilisateur apache de
consulter ce fichier à l'aide des commandes chmod / chown.
Connectez-vous ensuite sur la page index.php
Sachez qu'il existe une multitude de projets de consultation pour squid,
consultez
freshmeat
Je vous conseille aussi d'utiliser
SquidAnalyser. Ce dernier permet de consulter les logs machine par machine ou
utilisateur par utilisateur. En outre, il vous
génère
des graphiques pour connaître le nombre de pages qui ont
été trouvées ou non dans le cache.
L'installation est assez simple. Je vous le conseille fortement.
Installation
& Configuration de MRTG
L'installation de mrtg est assez simple : apt-get install mrtg
MRTG va consulter les informations du serveur SNMP de Squid, vous devez
cependant créer un fichier de configuration afin de
générer les graphiques de SQUID.
Vous pouvez vous inspirer du fichier de
l'université de Nancy Metz :
ici
- Copiez le sur votre serveur SQUID : par exemple dans
/etc/mrtg
- Vous devez ensuite modifier le fichier selon votre
configuration :
- l'option WorkDir définit le
répertoire où les pages de statistiques mrtg
seront créées.
- modifez la ligne LoadMIBs:
/usr/local/squid/etc/mib.txt en LoadMIBs:
/usr/share/squid/mib.txt (chemin sur une Debian)
- Les lignes commençant par Target
définissent les différentes statistiques, vous
devez modifier @cache
par @adresse_de_votre_serveur_SNMP_Squid. Si MRTG est exécuté sur la même machine
que la
machine où Squid est installé, vous pouvez mettre @localhost
- Pour lancer les statistiques afin de vérifier
les éventuels messages d'erreurs, tapez : mrtg
/chemin/squid.cfg
- MRTG fournit un programme qui peut vous
générer votre page index, il suffit de taper : indexmaker
/chemin/squid.cfg --output /chemin/index.hml
- Automatiser les statistiques toutes les 10 minutes :
- crontab
-e
- saisir : */10 * * * * mrtg
/chemin/squid.cfg >> /dev/null
(Plus d'informations sur cron ici)
Problème
de timeout sur certains sites
à partir des postes clients
Il peut arriver que certains sites ne fonctionnent pas à
partir d'un poste client (Windows 2000/XP), et que vous ayez un
timeout lors de la connexion. Cela est dû au fait
que les équipements réseaux interdisent les
paquets dont le bit ECN est activé. Pour
désactiver le bit ECN, sur la machine où
se trouve le serveur SQUID, en root, tapez :
echo 0 > /proc/sys/net/ipv4/tcp_ecn
Vous devez repositionner cette valeur au démarrage, vous
pouvez par exemple, le mettre dans votre script firewall.
Liens complémentaires sur MRTG & SQUID :
Tutorial
MRTG Squid - université de Metz Nancy
Tutorial MRTG
- linux-sottises
Tutorial
MRTG - christian.caleca.free.fr