Installer un serveur mandataire (proxy) Squid 3 sur Debian 4.0 Etch et 5.0 Lenny
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 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 à Coagul pour l'article Contrôle parental avec DansGuardian et TinyProxy.
- 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.
Parametre SquidGuard
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
Je souhaitais juste vous féliciter pour la qualité de votre tutorial, il fonctionne à 100%, c'est génial !
Julien
Paradoxal !!!
pour squid et dansguardian
tout se passe bien a part la mise a jour de clamAV ,
je suis en ubuntu 10.10 server et j'ai 2 cartes reseau, cela marche t il aussi si dans ce cas ?
je veux mettre en place ce schema : (bind9 et dhcp3 installe)
internet freeBOX reseau en 192.168.0.0 ethN ubuntuserver ethN+1 reseau en 10.0.0.0
merci de votre reponse
2 réseaux
je ne vois aucune raison pour que cela ne fonctionne pas dans l'environnement que vous décrivez. Faites attention toutefois que le bind et le dhcp 3 soit bien actif que pour le réseau en 10.0.0.0. Je ne pense pas qu'il y ai besoin de changer quoi que ce soit à la configuration de SQUID pour que cela fonctionne.
Le mieux est de se lancer et d'essayer :)
Bon courage.
2 reseaux
je dois ire que je suis novice en ubuntu and co, j'eessaye d'apprendre .
le dhcp tourne maintenant et attribue bien les adresse en reseau 10, mon dns tourne mais j'arrive pas a le parametrer dans windob, je reste en workgroup , ca a l'air de marcher quand meme .
par contre PAS ACCES INTERNET , mes machine reseau192 et reseau10 ne se voient pas : peut etre normal ?
mon squid ecoute http_port 10.0.0.1:3128, mon LA?_RANGE=10.0.0.0/24 (pour l'acl que nous avons défini au début) , mais comment il passe au reseau 192 et a internet ?
il faut pas une redirection iptable ? ou j'ai mal defini un (des) trucs ?
passerelle etc.
vos 2 réseaux ne se voient pas car :
- ils n'ont pas la même "range" d'adresse IP : 10.0.0.* + 255.255.255.0 ne peut pas voir 192.168.0.* + 255.255.255.0.
- ils sont séparé par votre serveur SQUID avec 2 ip.
Le serveur SQUID a accès a internet via le réseau 192.168.0.* , et fournit l'accès au réseau 10.0.0.* à l'aide d'un serveur proxy.
Si vous souhaitez que 10.0.0.* ai un accès direct a internet, il vous faut paraméter une passerelle NAT à l'aide d'iptables sur l'ordi ou est installé SQUID.
Bonne chance.
iptable
j'ai trouvé ca sur le net, peut il etre adapté et utile .?
iptables -t nat -A PREROUTING -s 192.168.0.0/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
proxy transparent
pour que tu ai un proxy transparent avec squid :
echo '#!/bin/bash
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128' > /etc/network/if-up.d/iptables
chmod +x /etc/network/if-up.d/iptables
Charge une première fois la règle avec :
/etc/network/if-up.d/iptables
Et regarde si ca fonctionne
ne marche pas
j'ai essayé, mais ca ne marche pas .
le probleme est surement ailleurs mais je ne vois pas ou mon parametrage peche ...
un windows en aval (ne se connectant pas a internet) me dit "prasserelle par defaut inaccessible"
j'ai desinstallé/reinstaller mon dns et dhcp, rien n'y fait ...
ce probleme de 2 carte reseau semble insoluble ou alors il y a quelque chose que je ne sais pas
si tu as une idée ...
clamAV et dansguardian
l'installation de dansguardianse passe bien, mais
lors de son redemarage il met "fail" car des problemes arrive avec clamAV
*************************************************************************
root@myuserver:~# /etc/init.d/dansguardian restart
Restarting DansGuardian: * Restarting DansGuardian:
LibClamAV Error: cli_loaddb(): No supported database files found in /var/lib/cla
mav/
Error loading clamav db: Can't open file or directory
Content scanner plugin init returned error value: -1
Error loading CS plugins
Error parsing the dansguardian.conf file or other DansGuardian configuration fil
es
...fail!
**********************************************************************************************
j'ai tout installer comme tu l'as dit, j'ai meme fait un apt-update et upgrade
je suis en ubuntu server 10.10 et je n'ai installer en plus que telnet + ton tuto
c'est quoi le probleme de clamAV ?
merci de ta reponse
version de clamav ?
Bonne chance.
clamAV
oui au redemmarage il me dit que clamav est obsolete
j'ai du desactiver 'contentscanner=......clamav.conf' , car rien ne s'affiche : car squid ne peut scanner les pages
dans le fichier dansguardian.conf j'ai vu d'autre scanner ? ca peut marcher ?
merci , si tu trouve la solutce, je vais voir de mon coté
Merci
Au passage un merci de ma fille aussi, qui (étonnamment?) était contente de ce système.