Outils personnels
Vous êtes ici : Accueil GNU / Linux Debian 4.0 Etch Installer un serveur mandataire (proxy) Squid 3 sur Debian 4.0 Etch et 5.0 Lenny
Navigation
 
Un poste de développeur PHP est à pourvoir dans mon entreprise ! Si vous êtes intéressé, plus de détails sont disponibles sur la page consacrée à l'offre d'emploi de développeur PHP.
Actions sur le document
  • Send this page to somebody
  • Print this page
  • Add Bookmarklet

Installer un serveur mandataire (proxy) Squid 3 sur Debian 4.0 Etch et 5.0 Lenny

Par Pierre-Yves Landuré Dernière modification 26/01/2009 18:38

Il existe plusieurs cas ou avoir à disposition un serveur mandataire peut être très intéressant. L'installation d'un proxy Squid peut répondre à plusieurs problématiques : économiser la bande passante, filtrer les sites Internet visités (anti-virus, contrôle parental, etc), contourner une protection d'accès basé sur l'adresse IP cliente, etc. Ce guide aborde plusieurs configurations possibles pour Squid de façon à disposer d'une protection complète de votre surf.

Installation

En premier lieu, il faut installer Squid 3:

/usr/bin/apt-get install squid3

Remarque : Par défaut, le port ou Squid attend les connexion est le port 3128.

Une fois Squid installé, il est nécessaire de le configurer correctement.

En premier lieu, il est nécessaire de renseigner le nom d'hôte du serveur proxy. Il s'agit du nom qui s'affiche dans les messages d'erreur :

/bin/sed -i -e "/TAG: visible_hostname/,/^#[ ]*visible_hostname/{/#[ ]*visible_hostname/a\\
visible_hostname $HOSTNAME
;}" /etc/squid3/squid.conf

Autoriser l'utilisation du serveur Squid par un réseau local

Une fois ceci fait, il est nécessaire de configurer les réseaux autorisés à utiliser votre proxy Squid. En effet, par défaut, seul l'ordinateur hébergeant le serveur Squid est autorisé à l'utiliser. En premier lieu, renseignez la plage d'adresse utilisée par votre réseau local:

LAN_RANGE=192.168.1.0/24

Renseignez aussi un alias pour votre réseau ( l'alias doit être un "mot" sans espace ni caractères étranges) :

LAN_ALIAS=my-local-network

Autorisez les connexion venant de cet emplacement :

/bin/sed -i -e "0,/INSERT YOUR OWN RULE(S) HERE/{//a\\
\\
# Allowing Local network allowed-lan-${LAN_ALIAS}.\\
acl allowed-lan-${LAN_ALIAS} src ${LAN_RANGE}\\
http_access allow allowed-lan-${LAN_ALIAS}
;}" /etc/squid3/squid.conf

Squid est maintenant configuré pour autoriser les connexion depuis votre réseau local, il ne vous reste plus qu'à recharger la configuration pour la prendre en compte :

/etc/init.d/squid3 reload

Configurations spéciques

Vous trouverez ci-dessous quelques exemples supplémentaires de configuration de Squid.

Désactiver la mise en cache de TOUS les sites visités

Si vous souhaitez que Squid ne mette pas en cache le contenu de TOUS les sites visités, cela se fait très simplement à l'aide de cette commande :

/bin/sed -i -e '/TAG: cache$/,/^[\t ]*$/{/^[\t ]*$/i\
\
# Disabling cache for all sites\
cache deny all
;}' /etc/squid3/squid.conf

Une fois la configuration de Squid mise à jour, n'oubliez pas de la recharger :

/etc/init.d/squid3 reload

Désactiver la mise en cache de certains sites

Si vous souhaitez que le cache soit désactivé pour certains sites seulement, cela peut être réalisé avec ce qui suit. En premier lieu, renseignez le domaine que vous ne souhaitez pas voir caché :

NOCACHE_DOMAIN=www.mon-cms.org

Calculez le numéro d'identifiant de la règle :

NOCACHE_ID=$(grep -e "acl.*nocache-" /etc/squid3/squid.conf | wc --lines)

Et configurez Squid pour ne pas cacher ce domaine :

/bin/sed -i -e "/TAG: cache\$/,/^[\\t ]*\$/{/^[\\t ]*\$/i\\
\\
# Disable caching for domain ${NOCACHE_DOMAIN}\\
acl nocache-${NOCACHE_ID} dstdomain ${NOCACHE_DOMAIN}\\
cache deny nocache-${NOCACHE_ID}
;}" /etc/squid3/squid.conf

Une fois la configuration de Squid mise à jour, n'oubliez pas de la recharger :

/etc/init.d/squid3 reload

Mise en place d'un contrôle parental à l'aide de DansGuardian

Si vous souhaitez bloquer l'accès aux sites pornographiques aux utilisateurs utilisant votre serveur proxy, vous pouvez le faire simplement à l'aide de DansGuardian. Ce logiciel à l'avantage de filtrer le contenu des sites Internet visités. Il ne se contente pas de vérifié l'URL par rapport à une liste noire de sites pornographiques.

Remarque : de nombreux sites présentent SquidGuard comme solution de contrôle parental. SquidGuard est mieux intégré à Squid que DansGuardian, et aussi beaucoup plus léger dans son fonctionnement quotidien. Mais DansGuardian à l'avantage d'intégrer un contrôle antivirus des fichiers téléchargé, et un filtre du contenu des pages téléchargées. C'est pour ces deux dernières caractéristiques que je l'ai choisi.

En premier lieu, installez DansGuardian :

/usr/bin/apt-get install dansguardian unrar lha

Configuration de DansGuardian

Si vous le souhaitez, vous pouvez faire en sorte que les messages d'alerte de DansGuardian soient en français. Pour ce faire, utilisez cette ligne de commande :

/bin/sed -i -e "s/^\(language[\t ]*=\).*$/\1 'french'/" \
/etc/dansguardian/dansguardian.conf

Afin de préserver un minimum l'intimité du surf de nos internautes, et de diminuer la taille des fichiers journaux générés, nous diminuons le niveau de journalisation :

/bin/sed -i -e 's/^\(loglevel[\t ]*=\).*$/\1 1/' \
/etc/dansguardian/dansguardian.conf

Si vous souhaitez que vos téléchargement soient scannés à la recherche de virus, activez le plugin ClamAV de DansGuardian (Attention : Cette option est très consommatrice de resources système) :

/bin/sed -i -e 's/^[\t #]*\(contentscanner[\t ]*=.*clamav.*$\)/\1/' \
/etc/dansguardian/dansguardian.conf

Une fois votre configuration adaptée à vos besoin, il ne reste plus qu'à commenter la ligne "UNCONFIGURED" pour activer DansGuardian :

/bin/sed -i -e 's/^.*UNCONFIGURED.*$/#\0/' \
/etc/dansguardian/dansguardian.conf

Il est aussi possible d'utiliser les listes noires de SquidGuard avec DansGuardian. Pour ce faire, il est nécessaire de créer le dossier destiné à contenir ces listes noires si SquidGuard n'est pas installé :

/bin/mkdir --parent /var/lib/squidguard/db
/bin/chown -R proxy:proxy /var/lib/squidguard/db

Mettez maintenant en place le script cron permettant de mettre à jour quotidiennement la liste noire :

/bin/echo '#!/bin/bash

# Downloading the adult site blacklist update
/usr/bin/wget -q ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/adult.tar.gz \
--output-document=/tmp/adult.tar.gz

/bin/tar --directory /var/lib/squidguard/db -xzf /tmp/adult.tar.gz

# SquidGuard must be able to update db files.
/bin/chown -R proxy:proxy /var/lib/squidguard/db

# We update the SquidGuard database with the downloaded data :
if [ -x /usr/bin/squidGuard ]; then
/bin/su proxy -c "/usr/bin/squidGuard -C all > /dev/null 2>&1"
fi' \
| /usr/bin/tee /etc/cron.daily/update-squidguard-blacklist
/bin/chmod +x /etc/cron.daily/update-squidguard-blacklist

Lancez une première fois la mise à jour afin d'initialisez la liste :

/etc/cron.daily/update-squidguard-blacklist

Créez un lien symbolique de cette liste noire à un emplacement approprié pour DansGuardian :

/bin/ln -s /var/lib/squidguard/db/adult/ /etc/dansguardian/lists/blacklists/

Enfin, configurez DansGuardian pour utiliser cette liste noire :

/bin/sed -i -e 's/[\t #]*\(.*Include.*adult.*\)$/\1/' /etc/dansguardian/lists/bannedsitelist

Vous pouvez maintenant redémarrer DansGuardian :

/etc/init.d/dansguardian restart

Pour utiliser DansGuardian, configurez votre navigateur pour se connecter au port 8080 du serveur proxy.

Configuration de Squid

Normallement, il n'y a pas à modifier la configuration par défaut de Squid. Cependant, si vous avez autorisé un ou plusieurs réseaux locaux à utiliser Squid directement (voir la méthode indiquée plus haut), il est nécessaire d'éditer le fichier /etc/squid/squid.conf pour retirer les lignes de configurations qui autorisent cette connexion. En effet, vos utilisateurs ne doivent pas être autorisé à se connecter directement au port 3128 de Squid, sinon, il sont capable de bypasser DansGuardian, et de se connecter à des sites indésirables.

Si vous avez suivi ce guide, la manipulation est simple. Exécutez simplement la ligne de commande :

/bin/sed -i -e '/allowed-lan-/d' /etc/squid3/squid.conf

Et rechargez la configuration de Squid :

/etc/init.d/squid3 reload

Mise en place d'un contrôle parental à l'aide de SquidGuard

Bien que moins élaboré que DansGuardian, SquidGuard est aussi beaucoup plus léger à mettre en œuvre. En effet, SquidGuard se compte de contrôler que les sites visités ne font pas partie de la liste noire.

En premier lieu, installez SquidGuard :

/usr/bin/apt-get install squidguard

Remarque : Sous Debian 4.0 Etch, SquidGuard dépend de Squid 2, il nous faut donc désactiver Squid 2 après l'installation de SquidGuard :

/etc/init.d/squid stop
/usr/sbin/update-rc.d -f squid remove

Une fois ceci fait, configurez Squid pour que SquidGuard soit utilisé pour filtrer les URL:

/bin/sed -i -e '/TAG: url_rewrite_program/,/^#[ ]*none/{/#[ ]*none/a\
url_rewrite_program /usr/bin/squidGuard
;}' /etc/squid3/squid.conf

Nous mettons à jour l'emplacement du fichier de log de SquidGuard pour correspondre à la configuration de Squid 3 :

/bin/sed -i -e 's|^logdir .*$|logdir /var/log/squid3|' \
/etc/squid/squidGuard.conf

Il est aussi nécessaire d'activer le filtrage de contenu dans la configuration de SquidGuard. Pour ce faire, commencez par renseigner l'URL de destination de la redirection. Personnellement, je redirige vers le plan de l'internet XD :

SQUIDGUARD_DESTINATION=http://www.perdu.com/

Configurez maintenant SquidGuard pour redirer les sites pour adultes vers votre site de remplacement :

/bin/sed -i -e 's/^[# ]*\(dest adult.*\)$/\1/' \
-e '/^dest adult/,/}/{ s/^#// ;}' \
-e "/^dest adult/,/}/{ s|^\(.*redirect[\t ]*\).*\$|\1${SQUIDGUARD_DESTINATION}| ;}" \
/etc/squid/squidGuard.conf

Et activez cette configuration pour tous les utilisateurs :

/bin/sed -i -e '/^[\t ]*default/,/}/{ s/^\(.*pass[\t ]*\).*$/\1!adult/ ;}' \
/etc/squid/squidGuard.conf

Maintenant que SquidGuard est configuré, mettez en place le script cron permettant de mettre à jour quotidiennement la liste noire des sites adultes banni :

/bin/echo '#!/bin/bash

# Downloading the adult site blacklist update
/usr/bin/wget -q ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/adult.tar.gz \
--output-document=/tmp/adult.tar.gz

/bin/tar --directory /var/lib/squidguard/db -xzf /tmp/adult.tar.gz

# SquidGuard must be able to update db files.
/bin/chown -R proxy:proxy /var/lib/squidguard/db

# We update the SquidGuard database with the downloaded data :
if [ -x /usr/bin/squidGuard ]; then
/bin/su proxy -c "/usr/bin/squidGuard -C all > /dev/null 2>&1"
fi' \
| /usr/bin/tee /etc/cron.daily/update-squidguard-blacklist
/bin/chmod +x /etc/cron.daily/update-squidguard-blacklist

Lancez une première fois la mise à jour afin d'initialisez la liste :

/etc/cron.daily/update-squidguard-blacklist

Vous pouvez maintenant recharger la configuration de Squid :

/etc/init.d/squid3 restart

Autoriser l'accès SSL sur un port non standard pour un serveur web donné

Si vous souhaitez accéder via Squid à des serveurs HTTPS utilisant d'autres ports que le port 443, il est nécessaire de configurer explicitement Squid pour l'autoriser. En premier lieu, renseignez le nom du serveur utilisant un port non standard pour le HTTPS :

WEIRD_HTTPS_SERVER=www.some-server.org

Renseignez ensuite le numéro du port utilisé :

WEIRD_HTTPS_PORT=8080

Calculez le numéro d'identifiant de la règle :

WEIRD_HTTPS_ID=$(grep -e "weird-ssl.*domain dst" /etc/squid3/squid.conf | wc --lines)

Et autorisez la méthode CONNECT pour ce site :

/bin/sed -i -e "0,/Deny CONNECT to other than SSL ports/{//i\\
\\
# Allowing non-standard SSL port declaration : ${WEIRD_HTTPS_SERVER} : ${WEIRD_HTTPS_PORT}.\\
acl weird-ssl-${WEIRD_HTTPS_ID}-domain dst ${WEIRD_HTTPS_SERVER}\\
acl weird-ssl-${WEIRD_HTTPS_ID}-port port ${WEIRD_HTTPS_PORT}\\
http_access allow CONNECT weird-ssl-${WEIRD_HTTPS_ID}-domain weird-ssl-${WEIRD_HTTPS_ID}-port\\

;}" /etc/squid3/squid.conf

Squid est maintenant configuré pour autoriser les connexion vers ce serveur, il ne vous reste plus qu'à recharger la configuration pour la prendre en compte :

/etc/init.d/squid3 reload

Remerciements

Merci

Posté par Valère le 13/05/2009 17:55
Bonjour, et merci pour ce tutoriel, qui m'a permis en quelques minutes de mettre en place un proxy pour le controle parental. Celui ci ne remplaçant pas le dialogue et l'accompagnement, il reste néanmoins très utile.
Au passage un merci de ma fille aussi, qui (étonnamment?) était contente de ce système.

Parametre SquidGuard

Posté par Tellier le 02/10/2009 18:49
Bonjour,
Je suis sous UBUNTU 9.04. J'écris car j'ai des soucis pour paramétrer squidGuard avec squid3.
Squid3 marche trés bien sur mon serveur. je peux voir les sites à travers le cache. Si j'éteins squid3 avec firefox je n'ai plus d'accés à mes sites.
j'ai installé squidGuard en passant par le Gestionnaire de paquets Synaptic.

J'active squidGuard en ajoutant les lignes dans mon squid.conf
url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
url_rewrite_children 5
redirector_bypass off
et je relance squid3 en rechargeant la config.
sudo /etc/init.d/squid3 reload
sudo /etc/init.d/squid3 restart

Je lance mon navigateur et je n'ai plus d'accès à internet.
Je dois avoir un mauvais fichier de config cd /etc/squidGuard.conf.
Ca fait 3 jours que je change de configuration. J'ai tout essayé.
Soit :
- squidGuard se lance et arréte squid3
- je ne peux plus me connecter du tout
- la connexion d'une page reste en l'air pendant des heures et je suis obligé d'éteindre le navigateur.

Ci joint ma config de squidGuard.conf et ensuite une copie allégé de squidGuard.conf qui ne marche pas non plus.

Ma config de squidGuard.conf
-----------------------------
dbhome /var/lib/squidguard/db
logdir /var/log/squid

src admin {
ip 192.168.1.10
}

src users {
ip 192.168.1.0/24
}

#dest pornographie {
# urllist porn/urls
# urllist porn/nurls
# domainlist porn/domains
# expressionlist porn/very_restrictive_expression
#}
#

dest adultographie {
urllist blacklists/adult/urls
urllist blacklists/adult/nurls
domainlist blacklists/adult/domains
expressionlist blacklists/adult/very_restrictive_expression
redirect http://127.0.0.1/perdu.html
}


dest drogues {
urllist drugs/urls
domainlist drugs/domains
}

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

dest marchands_de_guerre {
urllist marketingware/urls
domainlist marketingware/domains
}

acl {
admin {
pass any
}

users {
pass !pornographie !drogues !phishing !marchands_de_guerre any
redirect http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u
}

default {
pass none
redirect http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u
}
}


Config de squidGuard.conf allégée qui ne marche pas non plus
------------------------------------------------------------

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

src admin {
ip 192.168.1.10
}

acl {
admin {
pass any
}

default {
pass none
redirect http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a+clientname=%n+clientident=%i+srcclass=%s+targetclass=%t+url=%u
}
}


je vous remercie de votre aide.

Cordialement DT

1000 mercis

Posté par Julien le 16/10/2009 14:49
Bonjour,

Je souhaitais juste vous féliciter pour la qualité de votre tutorial, il fonctionne à 100%, c'est génial !

Julien

Paradoxal !!!

Posté par Laurent le 18/02/2010 11:35
Merci pour ce tuto très bien fait. Seul bémol, après installation et configuration de Dansguardian je n'accède plus à votre site (filtré par Dansguardian ;)).


Réalisé avec le CMS Plone, le système de gestion de contenu Open Source

Ce site respecte les normes suivantes :