Vous êtes ici : Accueil / Debian GNU/Linux / Serveurs / HTTP / Installer un serveur mandataire Squid sur Debian

Installer un serveur mandataire Squid sur Debian

Par Pierre-Yves Landuré Dernière modification 11/11/2017 09:42

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