Installer un serveur mandataire Squid sur Debian
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.
Ce guide a été testé sur:
- Debian 5.0 Lenny
- Debian 6.0 Squeeze
Installation
Installez le serveur:
command apt-get install squid3
Par défaut, Squid attend les connexion sur le port 3128.
Configurez le nom d'hôte du serveur proxy. Ce nom s'affiche dans les messages d'erreur :
command sed -i -e "/TAG: visible_hostname/,/^#[ ]*visible_hostname/{/#[ ]*visible_hostname/a\\
visible_hostname ${HOSTNAME}
;}" "/etc/squid3/squid.conf"
Accéder au serveur mandataire depuis le réseau local
Par défaut, seul l'hôte local peut utiliser le serveur mandataire. Renseignez la plage d'adresse du réseau local autorisée à utiliser le serveur Squid:
LAN_RANGE="192.168.1.0/24"
Renseignez un alias pour la plage réseau ( l'alias doit être un "mot" sans espaces):
LAN_ALIAS="my-local-network"
Autorisez les connexions venant de cet emplacement :
command 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'
Pour autoriser tout le monde à utiliser Squid (dangereux):
command sed -i -e 's/^http_access deny all/http_access allow all/' \
'/etc/squid3/squid.conf'
Rechargez la configuration pour rendre Squid accessible depuis le réseau local:
/etc/init.d/squid3 reload
Configurations spéciques
Désactiver complètement le cache
Désactivez complètement le cache des sites visités:
command sed -i -e '/TAG: cache$/,/^[\t ]*$/{/^[\t ]*$/i\
\
# Disabling cache for all sites\
cache deny all
;}' '/etc/squid3/squid.conf'
Rechargez la configuration:
/etc/init.d/squid3 reload
Désactiver sélectivement le cache
Pour que le cache soit désactivé pour certains sites seulement, renseignez le domaine à ignorer:
NOCACHE_DOMAIN="www.mon-cms.org"
Calculez le numéro d'identifiant de la règle:
NOCACHE_ID=$(command grep -e "acl.*nocache-" '/etc/squid3/squid.conf' \
| command wc --lines)
Configurez Squid pour ne pas mettre en cache les pages de ce domaine:
command 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'
Rechargez la configuration:
/etc/init.d/squid3 reload
Mettre en place l'outil de contrôle parental SquidGuard
Bien que moins élaboré que DansGuardian, SquidGuard est aussi beaucoup plus léger à mettre en œuvre. Là où DansGuardian vérifie le contenu des pages visitées, SquidGuard se contente de vérifier que les sites visités ne font pas partie de la liste noire.
Installez SquidGuard :
command apt-get install squidguard
Configurez Squid pour filtrer les URLs avec SquidGuard:
command sed -i -e '/TAG: url_rewrite_program/,/^#[ ]*none/{/#[ ]*none/a\
url_rewrite_program /usr/bin/squidGuard
;}' '/etc/squid3/squid.conf'
Mettez à jour l'emplacement des journaux de SquidGuard pour correspondre à la configuration de Squid 3 :
command sed -i -e 's|^logdir .*$|logdir /var/log/squid3|' \
'/etc/squid/squidGuard.conf'
Choisissez le site affiché à la place des sites bannis. Par exemple, le plan de l'internet:
SQUIDGUARD_DESTINATION="http://www.perdu.com/"
Configurez maintenant SquidGuard pour rediriger les sites pour adultes vers le site de remplacement:
command sed -i -e 's/^[# ]*\(dest adult.*\)$/\1/' \
-e '/^dest adult/,/}/{ s/^#// ;}' \
-e "/^dest adult/,/}/{ s|^\(.*redirect[\t ]*\).*\$|\1${SQUIDGUARD_DESTINATION}| ;}" \
'/etc/squid/squidGuard.conf'
Appliquez cette configuration à tous les utilisateurs:
command sed -i -e '/^[\t ]*default/,/}/{ s/^\(.*pass[\t ]*\).*$/\1!adult/ ;}' \
'/etc/squid/squidGuard.conf'
Ajoutez le script cron mettant à jour quotidiennement la liste noire :
command 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' \
> '/etc/cron.daily/update-squidguard-blacklist'
command chmod +x '/etc/cron.daily/update-squidguard-blacklist'
Initialisez la liste noire:
/etc/cron.daily/update-squidguard-blacklist
Redémarrez Squid:
/etc/init.d/squid3 restart
Autoriser l'accès SSL sur un port non standard pour un serveur web donné
Il est nécessaire de configurer explicitement Squid pour autoriser les connexions HTTPS sur d'autres ports que le 443.
Renseignez le nom de domaine du serveur utilisant un port HTTPS non standard:
WEIRD_HTTPS_SERVER="www.some-server.org"
Renseignez ensuite le numéro de port utilisé:
WEIRD_HTTPS_PORT="8080"
Calculez le numéro d'identifiant de la règle:
WEIRD_HTTPS_ID=$(command grep -e "weird-ssl.*domain dst" '/etc/squid3/squid.conf' \
| command wc --lines)
Autorisez la méthode CONNECT pour le site :
command 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'
Rechargez la configuration de Squid:
/etc/init.d/squid3 reload
Références
Ces livres peuvent vous aider:
Remerciements
- Merci aux développeurs de Squid.
- Merci à Alternatik pour l'article Installation d'un proxy Web : Squid - Debian Etch.
- Merci à Steve Kemp pour son article Transparent proxies via Squid sur le site Debian Administration.
- Merci à Coagul pour l'article Installation de Squid et SquidGuard sur une Debian Testing.
- Merci aux auteurs de la page Squid Web Cache FAQ.
- Merci au site L'Internet Rapide et Permanent pour l'article Squid.
- Merci à Disaster sur #ubuntu-fr pour son aide lorsque j'ai buté sur certaines expressions régulières.