Outils personnels
Vous êtes ici : Accueil GNU / Linux Debian Installer un serveur mandataire (proxy) Squid 3 sur Debian 4.0 Etch et 5.0 Lenny
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 15: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 13: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 14: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 10: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 08: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 ;)).

pour squid et dansguardian

Posté par miki le 29/12/2010 01:19
bien sur ce tuto est EXCELLENT !!

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

Posté par Lone Wolf le 29/12/2010 09:47
Bonjour,

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

Posté par miki le 29/12/2010 22:44
je me suis lancé,
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.

Posté par Lone Wolf le 30/12/2010 09:43
Bonjour,

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

Posté par miki le 30/12/2010 22:24
mon message a disparu, ca doit etre du a un copier/coller que j'ai fait

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

Posté par Lone Wolf le 31/12/2010 09:37
En m'inspirant de http://www.faqs.org/docs/Linux-mini/TransparentProxy.html :

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

Posté par miki le 02/01/2011 13:43
tout d'abord merci et bonen année , lone wolf et au autres internautes !

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

Posté par miki le 08/01/2011 17:51
tout d'abord bonen annee lone wolf et aux internautes

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 ?

Posté par Lone Wolf le 08/01/2011 18:36
Peut-etre que la version Debian de ClamAV est trop ancienne. La mise à jour de la base de donnée (par clam-update ?) ne fonctionne peut-etre pas. Je te conseille de regarder du coté des dépôts volatiles de debian. Je ferais une petite maj de ce guide dès que possible.

Bonne chance.

clamAV

Posté par miki le 08/01/2011 20:44
deja a l'install de dansguardian, il y a une erreur lié clamav qui n'est pas a jour etc ...

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é

BlogBang
Navigation
 

Réalisé avec Plone

Ce site respecte les normes suivantes :

Wikio