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 :

SquidGuard propose un filtrage puissant d'accès au web, en fonction :

Nous verrons ici :

Table des matières

  1. Squid + SquidGuard
    1. Installation
    2. La configuration de Squid
    3. Rendre le proxy transparent
    4. La configuration de SquidGuard
    5. Installation de SquidFire
    6. Installation & Configuration de MRTG
    7. Problème de timeout sur certains sites à partir des postes clients

Installation

tout simplement :
apt-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
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

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

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
flux rss malekal.com - Sitemap - Geekeden - OxygenePC.com - Les partenaires du site McAfee you Suck