SquidGuard

De NCad Wiki
Aller à la navigation Aller à la recherche

Présentation

SquidGuard est un module pour le serveur proxy Squid. Ce module ajoute des fonctionnalités avancées en matière de filtrage basé sur une liste noire de sites web à bloquer et une liste blanche de sites à ignorer.

Installation

Prérequis

Vous devez disposez du serveur proxy Squid installé - fonctionnel et mis à jour sur votre machine avant de pouvoir commencer l'installation. Le cas échéant reportez vous à l'article Squid.

Installation

SquidGuard

Depuis les dépôts synaptic ou dans une fenêtre de terminal tapez la commande suivante :

sudo apt-get install squidguard

Listes filtrage

Des listes comportant un grand nombre de catégories de sites web sont disponibles gratuitement et tenues à jour par l'université de l'académie de Toulouse.

Configuration

Le fichier de configuration est présent dans le dossier /etc/squid/squidguard.conf. Ce dernier permet de renseigner des règles de filtrage selon divers critères comme :

  • l'adresse ip de la machine cliente,
  • l'utilisateur exécutant la requête
  • l'heure d'exécution de la requête
  • le contenu consulté

Définition de quelques répertoires

Par défaut il faut préciser dans le fichier de configuration, les répertoires d'accès :

  • Aux logs de SquidGuard (logdir)
  • Aux bases de données des blacklistes (dbhome)
  • Exemple :
dbhome /var/lib/squidguard/db
logdir /var/log/squid

Définition des listes

Ensuite - dans le cadre de l'installation, au préalable, des listes - il faudra définir les règles de filtrage. Ces règles de filtrage sont définies à l'aide des entrées dest :

dest nom_de_la_liste {
     domainlist repertoire de la liste des domaines depuis /var/lib/squidguard/db.
     urllist repertoire de la liste des urls depuis /var/lib/squidguard/db.
     redirect adresse de redirection en cas de consultation d'un site présent dans les listes.
     log spcécifie un répertoire de log dans /var/log/squid enregistrant tous les sites de la catégorie qui ont été visités ou bloqués.
}
Ici, les listes n'ont aucune attribution particulière du type liste noire ou liste blanche. Elles sont simplement définies.
  • Exemple : voici les acls respectives aux listes noires de l'Universite de Toulouse :
dest adult {
       domainlist adult/domains
       urllist adult/urls
       redirect http://error.ncad.fr/warning.php?reason=Site-pour-adulte
}
dest agressif {
       domainlist agressif/domains
       urllist agressif/urls
       redirect http://error.ncad.fr/warning.php?reason=Site-agressif
}
dest astrology {
       domainlist astrology/domains
       redirect http://error.ncad.fr/warning.php?reason=Site-astrologue
}
dest audio-video {
       domainlist audio-video/domains
       urllist audio-video/urls
       redirect http://error.ncad.fr/warning.php?reason=Contenu-Multimedias
}
dest blog {
       domainlist blog/domains
       urllist blog/urls
       redirect http://error.ncad.fr/warning.php?reason=Blog-site-personnel
}
dest cleaning {
       domainlist cleaning/domains
       urllist cleaning/urls
       redirect http://error.ncad.fr/warning.php?reason=Site-securite-informatique
}
dest dangerous_material {
       domainlist dangerous_material/domains
       urllist dangerous_material/urls
       redirect http://error.ncad.fr/warning.php?reason=Site-armes
}
dest dating {
       domainlist dating/domains
       urllist dating/urls
       redirect http://error.ncad.fr/warning.php?reason=Site-rencontre
}
dest drogue {
       domainlist drogue/domains
       urllist drogue/urls
       redirect http://error.ncad.fr/warning.php?reason=Drogue
}
dest filehosting {
       domainlist filehosting/domains
       urllist filehosting/urls
       redirect http://error.ncad.fr/warning.php?reason=Plateforme-multimedia
}
dest financial {
       domainlist financial/domains
       redirect http://error.ncad.fr/warning.php?reason=Finance
}
dest forums {
       domainlist forums/domains
       urllist forums/urls
       redirect http://error.ncad.fr/warning.php?reason=Forums
}
dest gambling {
       domainlist gambling/domains
       urllist gambling/urls
       redirect http://error.ncad.fr/warning.php?reason=Jeux-hasard
}
dest games {
       domainlist games/domains
       urllist games/urls
       redirect http://error.ncad.fr/warning.php?reason=Jeux-et-online
}
dest hacking {
       domainlist hacking/domains
       urllist hacking/urls
       redirect http://error.ncad.fr/warning.php?reason=Hacking
}
dest liste_bu {
       domainlist liste_bu/domains
       urllist liste_bu/urls
       redirect http://error.ncad.fr/warning.php?reason=Education-national
}
dest malware {
       domainlist malware/domains
       urllist malware/urls
       redirect http://error.ncad.fr/warning.php?reason=Malware
}
dest marketingware {
       domainlist marketingware/domains
       redirect http://error.ncad.fr/warning.php?reason=Marketing-special
}
dest mixed_adult {
       domainlist mixed_adult/domains
       redirect http://error.ncad.fr/warning.php?reason=Contenu-reserve-adult
}
dest mobile-phone {
       domainlist mobile-phone/domains
       redirect http://error.ncad.fr/warning.php?reason=Telephonie-Mobile
}
dest phishing {
       domainlist phishing/domains
       redirect http://error.ncad.fr/warning.php?reason=Phishing
}
dest publicite {
       domainlist publicite/domains
       urllist publicite/urls
       redirect http://error.ncad.fr/warning.php?reason=Publicites
}
dest radio {
       domainlist radio/domains
       urllist radio/urls
       redirect http://error.ncad.fr/warning.php?reason=Media-Radio
}
dest redirector {
       domainlist redirector/domains
       urllist redirector/urls
       redirect http://error.ncad.fr/warning.php?reason=Redirecteur
}
dest sect {
       domainlist sect/domains
       redirect http://error.ncad.fr/warning.php?reason=Sect
}
dest sexual_education {
       domainlist sexual_education/domains
       urllist sexual_education/urls
       redirect http://error.ncad.fr/warning.php?reason=Education-sexuel
}
dest shopping {
       domainlist shopping/domains
       redirect http://error.ncad.fr/warning.php?reason=Shopping
}
dest tricheur {
       domainlist tricheur/domains
       urllist tricheur/urls
       redirect http://error.ncad.fr/warning.php?reason=Tricherie
}
dest warez {
       domainlist warez/domains
       urllist warez/urls
       redirect http://error.ncad.fr/warning.php?reason=Warez
}
dest violence {
       domainlist violence/domains
       urllist violence/urls
       redirect http://error.ncad.fr/warning.php?reason=Site-violent
}
dest webmail {
       domainlist webmail/domains
       urllist webmail/urls
       redirect http://error.ncad.fr/warning.php?reason=Webmail
}

Adaptez la variable redirect - ici elles redirigent vers les pages d'erreurs NCad Network dédiées pour SquidGuard.

Définition de groupes d'utilisateurs

La création de groupes d'utilisateurs permet d'appliquer un ensemble de règles à des utilisateurs appartenant à un même groupe. Ceci évite de définir manuellement les autorisations pour chacun des utilisateurs.

Ici seront utilisées les entrées src pour nommer la règle - et user pour énumérer le(s) utilisateur(s) appartenant au groupe ainsi défini.

  • Exemple : Nous voulons créer trois groupes utilisateurs : enfant, adolescent et adulte.
src adolescent {
  user benjamin cecile nicolas
}
src adulte {
  user pierre lucien said
}
src enfant {
  user maxime terence
}

Ne fonctionne uniquement si Squid est configuré pour demander des logs d'authentification à ses utilisateurs. Sinon voir Squid.

Dans le cas où Squid n'est pas configuré pour demander des identifiants de connexion lors de l'accès à Internet des usagers, il est possible de créer des groupes selon l'adresse IP du poste informatique client. La syntaxe des règles reste similaire.

  • Exemple : Réseau composé de trois sous-réseaux, un pour les élèves, le second pour la salle des professeurs et le troisième pour l'administration de l'établissement.
src eleve {
   ip 10.0.0.0/24
}
src professor {
   ip 10.0.1.0/24
}
src admin {
   ip 10.0.2.0/24
}

Note :

  • le groupe élève est définis par toutes les machines dont l'adresse IP est comprise entre 10.0.0.1 et 10.0.0.255.
  • le groupe professor est définis par toutes les machines dont l'adresse IP est comprise entre 10.0.1.1 et 10.0.1.255
  • le groupe admin est définis par toutes les machines dont l'adresse IP est comprise entre 10.0.2.1 et 10.0.2.255.

On peut aussi spécifier l'adresse IP de chacune des machines pour les réseaux de petite envergure :

src enfants {
   ip 192.168.1.20 192.168.1.21 192.168.1.22
}
src parents {
   ip 192.168.1.10 192.168.1.11
}

Définition des règles de filtrage

Les règles de filtrage seront définies dans une acl globale. Cette dernière énumère les différentes règles de filtrage dont se sert le proxy pour autoriser ou non les utilisateurs à se connecter à Internet mais aussi pour définir le niveau de filtrage de ces derniers.

Par défaut l'acl permet à tous les utilisateurs de se connecter au proxy sans pour autant être filtré. Cette règle se présente comme ceci :

acl {
    default {
        pass all
    }
}

Pour appliquer une règle de filtrage il suffit de modifier la ligne contenant pass all. Ainsi, si l'on veut comparer le trafic internet et en particulier les sites consultées aux listes nommées plus haut adult et mixed-adult, il suffit d'adapter la règle :

acl {
    default {
        pass !adult !mixed-adult all
    }
}

Cette règle ci-dessus précise que tout utilisateur se connectant à internet et dont le site spécifié n'appartient pas à ceux spécifiés dans les listes nommées adult et mixed-adult seront autorisés à accédé au contenu. Le paramètre !in-addr spécifie qu'il est interdit d'accéder à un site à partir de l'adresse IP de l'hôte.

Dans la synthaxe, le "!" précédant le nom de la liste se traduit par "exclut"

Définition de règles de filtrage de groupe

A partir des groupes définis précédement, il est possible de créer des règles de filtrage propre à chacun de ces groupes. Dans notre exemple nous définirons :

  • le groupe adolescent qui peut accéder à tous les sites sauf : adult agressif astrology dangerous_material dating drogue forums gambling games hacking malware marketingware mixed_adult mobile-phone phishing publicite redirector sect tricheur warez violence.
  • le groupe adulte qui peut accéder à tous les sites sauf : adult agressif astrology dangerous_material drogue gambling hacking malware marketingware phishing publicite sect tricheur warez violence.
  • le groupe admin qui peut accéder à tous les sites sauf : adult agressif astrology dangerous_material drogue gambling hacking malware marketingware phishing publicite sect tricheur warez violence.
  • Exemple :
acl {
  default {
       pass none
       redirect http ://error.ncad.fr/disable.php?reason=Utilisateur-inconnu
  }
  adolescent {
       pass !adult !agressif !astrology !dangerous_material !dating !drogue !forums !gambling !games !hacking !malware !marketingware !mixed_adult !mobile-phone !phishing !publicite !redirector !sect !tricheur !warez !violence all
  }
  adult {
       pass !adult !agressif !astrology !dangerous_material !drogue !gambling !hacking !malware !marketingware !phishing !publicite !sect !tricheur !warez !violence all
  }
  admin {
       pass !adult !agressif !astrology !dangerous_material !drogue !gambling !hacking !malware !marketingware !phishing !publicite !sect !tricheur !warez !violence all
  }
}

Ne fonctionne uniquement si Squid est configuré pour demander des logs d'authentification à ses utilisateurs. Sinon voir -> Squid.

Dans le cas des groupes définis selont l'adresse IP de la machine cliente :

  • le groupe eleve qui peut accéder à tous les sites sauf : adult agressif astrology dangerous_material dating drogue forums gambling games hacking malware marketingware mixed_adult mobile-phone phishing publicite redirector sect tricheur warez violence.
  • le groupe professor qui peut accéder à tous les sites sauf : adult agressif astrology dangerous_material drogue gambling hacking malware marketingware phishing publicite sect tricheur warez violence.
  • le groupe admin qui peut accéder à tous les sites sauf : adult agressif astrology dangerous_material drogue gambling hacking malware marketingware phishing publicite sect tricheur warez violence.
  • Exemple :
acl {
  default {
       pass none
       redirect http ://error.ncad.fr/disable.php?reason=Utilisateur-inconnu
   }
   eleve {
       pass !adult !agressif !astrology !dangerous_material !dating !drogue !forums !gambling !games !hacking !malware !marketingware !mixed_adult !mobile-phone !phishing !publicite !redirector !sect !tricheur !warez !violence all
   }
   professor {
       pass !adult !agressif !astrology !dangerous_material !drogue !gambling !hacking !malware !marketingware !phishing !publicite !sect !tricheur !warez !violence all
   }
   admin {
       pass !adult !agressif !astrology !dangerous_material !drogue !gambling !hacking !malware !marketingware !phishing !publicite !sect !tricheur !warez !violence all
   }
}

Débloquer un site

Il peut s'avérer nécessaire de débloquer un site web, dans la mesure ou ce dernier ne correspond pas ou plus au critère qui l'on conduit a être bloqué. pour cela il y a deux manière de débloquer un site web :

  • soit en créant un fichier de différence ou seront répertorié les domaines à bloquer/débloquer,
  • soit en créant une nouvelle liste de filtrage.

Fichier de différence

Les fichiers de différences sont propre à chacune des listes chargés sur squidGuard. La synthaxe de ce fichier est semblable aux autres fichier de squidGuard à la diffèrence près ou chacun des sites répertorié devra comporter le signe + ou - selon qu'il faut le supprimer de la liste ou l'ajouter à la liste. Ce fichier doit être nommé domains.diff et placé dans le répertoire de la liste à mettre à jour.

  • Par exemple : Nous avons le site bloquer.com répertorié dans la liste Malware. Nous souhaitons débloquer ce site et bloquer en revanche le site jesaispas.fr.

Voici la synthaxe du fichier :

- bloquer.com
+ jesaispas.fr

Le fichier doit être nommé domains.diff et placer dans la liste Malware. Pour prendre en compte les modifications il suffit de tapez les lignes de commandes suivantes :

sudo squidGuard -u
squid -k reconfigure


Le fichier domains.diff sera effacé dès une mise à jour ultérieure des listes.

Liste blanche

Cette méthode consiste à créer une nouvelle liste dans le système. Cette liste comporte l'ensemble des sites à débloquer et sera charger en tant que liste blanche pour tous les groupes d'utilisateur.

Les listes blanches sont prioritaires sur les listes noires.

Exemple de fichier de configuration

Voici le fichier de configuration final :

#
# CONFIG FILE FOR SQUIDGUARD
#

dbhome /var/lib/squidguard/db
logdir /var/log/squid

# ------------------------------------------------------------
# Definition des listes
# ------------------------------------------------------------
dest adult {
       domainlist adult/domains
       urllist adult/urls
       redirect http ://error.ncad.fr/warning.php?reason=Site-pour-adulte
}
dest agressif {
       domainlist agressif/domains
       urllist agressif/urls
       redirect http ://error.ncad.fr/warning.php?reason=Site-agressif
}
dest astrology {
       domainlist astrology/domains
       redirect http ://error.ncad.fr/warning.php?reason=Site-astrologue
}
dest audio-video {
       domainlist audio-video/domains
       urllist audio-video/urls
       redirect http ://error.ncad.fr/warning.php?reason=Contenu-Multimedias
}
dest blog {
       domainlist blog/domains
       urllist blog/urls
       redirect http ://error.ncad.fr/warning.php?reason=Blog-site-personnel
}
dest cleaning {
       domainlist cleaning/domains
       urllist cleaning/urls
       redirect http ://error.ncad.fr/warning.php?reason=Site-securite-informatique
}
dest dangerous_material {
       domainlist dangerous_material/domains
       urllist dangerous_material/urls
       redirect http ://error.ncad.fr/warning.php?reason=Site-armes
}
dest dating {
       domainlist dating/domains
       urllist dating/urls
       redirect http ://error.ncad.fr/warning.php?reason=Site-rencontre
}
dest drogue {
       domainlist drogue/domains
       urllist drogue/urls
       redirect http ://error.ncad.fr/warning.php?reason=Drogue
}
dest filehosting {
       domainlist filehosting/domains
       urllist filehosting/urls
       redirect http ://error.ncad.fr/warning.php?reason=Plateforme-multimedia
}
dest financial {
       domainlist financial/domains
       redirect http ://error.ncad.fr/warning.php?reason=Finance
}
dest forums {
       domainlist forums/domains
       urllist forums/urls
       redirect http ://error.ncad.fr/warning.php?reason=Forums
}
dest gambling {
       domainlist gambling/domains
       urllist gambling/urls
       redirect http ://error.ncad.fr/warning.php?reason=Jeux-hasard
}
dest games {
       domainlist games/domains
       urllist games/urls
       redirect http ://error.ncad.fr/warning.php?reason=Jeux-et-online
}
dest hacking {
       domainlist hacking/domains
       urllist hacking/urls
       redirect http ://error.ncad.fr/warning.php?reason=Hacking
}
dest liste_bu {
       domainlist liste_bu/domains
       urllist liste_bu/urls
       redirect http ://error.ncad.fr/warning.php?reason=Education-national
}
dest malware {
       domainlist malware/domains
       urllist malware/urls
       redirect http ://error.ncad.fr/warning.php?reason=Malware
}
dest marketingware {
       domainlist marketingware/domains
       redirect http ://error.ncad.fr/warning.php?reason=Marketing-special
}
dest mixed_adult {
       domainlist mixed_adult/domains
       redirect http ://error.ncad.fr/warning.php?reason=Contenu-reserve-adult
}
dest mobile-phone {
       domainlist mobile-phone/domains
       redirect http ://error.ncad.fr/warning.php?reason=Telephonie-Mobile
}
dest phishing {
       domainlist phishing/domains
       redirect http ://error.ncad.fr/warning.php?reason=Phishing
}
dest publicite {
       domainlist publicite/domains
       urllist publicite/urls
       redirect http ://error.ncad.fr/warning.php?reason=Publicites
}
dest radio {
       domainlist radio/domains
       urllist radio/urls
       redirect http ://error.ncad.fr/warning.php?reason=Media-Radio
}
dest redirector {
       domainlist redirector/domains
       urllist redirector/urls
       redirect http ://error.ncad.fr/warning.php?reason=Redirecteur
}
dest sect {
       domainlist sect/domains
       redirect http ://error.ncad.fr/warning.php?reason=Sect
}
dest sexual_education {
       domainlist sexual_education/domains
       urllist sexual_education/urls
       redirect http ://error.ncad.fr/warning.php?reason=Education-sexuel
}
dest shopping {
       domainlist shopping/domains
       redirect http ://error.ncad.fr/warning.php?reason=Shopping
}
dest tricheur {
       domainlist tricheur/domains
       urllist tricheur/urls
       redirect http ://error.ncad.fr/warning.php?reason=Tricherie
}
dest warez {
       domainlist warez/domains
       urllist warez/urls
       redirect http ://error.ncad.fr/warning.php?reason=Warez
}
dest violence {
       domainlist violence/domains
       urllist violence/urls
       redirect http ://error.ncad.fr/warning.php?reason=Site-violent
}
dest webmail {
       domainlist webmail/domains
       urllist webmail/urls
       redirect http ://error.ncad.fr/warning.php?reason=Webmail
}

# ------------------------------------------------------------
# Liste blanche (prioritaire)
# ------------------------------------------------------------

dest localwhite {
       domainlist localwhite/domains
       urllist localwhite/urls
}

# ------------------------------------------------------------
# Restrictions horaires
# ------------------------------------------------------------
 
# ------------------------------------------------------------
# Définition des groupes
# ------------------------------------------------------------

src adolescent {
       user khermot dufossm
}

src adult {
       user cachelb picolod cachelp
}

src admin {
       user cacheln
}

# ------------------------------------------------------------
# Definition des règles de filtrage
# ------------------------------------------------------------

acl {
  default {
        pass none
        redirect http ://10.0.0.100/error/disable.php?reason=Utilisateur-inconnu
  }
  adolescent {
        pass !adult !agressif !astrology !dangerous_material !dating !drogue !forums !gambling !games !hacking localwhite !malware !marketingware !mixed_adult !mobile-phone !phishing !publicite !redirector !sect !tricheur !warez !violence all
  }
  adult {
        pass !adult !agressif !astrology !dangerous_material !drogue !gambling !hacking localwhite !malware !marketingware !phishing !publicite !sect !tricheur !warez !violence all
  }
  admin {
        pass !adult !agressif !astrology !dangerous_material !drogue !gambling !hacking localwhite !malware !marketingware !phishing !publicite !sect !tricheur !warez !violence all
  }
}