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

  1. Squid + SquidGuard
    1. Installation La configuration de Squid
    2. Rendre le proxy transparent
    3. La configuration de SquidGuard
    4. Installation de SquidFire
    5. Installation & Configuration de MRTG
    6. 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, vousdevez 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

# 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 FA

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 lamachine 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

    (Visited 947 times, 2 visits today)

    2 thoughts on “Squid + SquidGuard

    Laisser un commentaire

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