System-Linux

Aller au contenu | Aller au menu | Aller à la recherche

Installation et Configuration du Proxy Squid

squid3 jpg

Pour surveiller vos utilisateurs !

A quoi sert un proxy ? Quelle est son utilité ?

Un proxy est un service qui permet beaucoup de chose. Dans une configuration "normal", il vous permettra de gérer l'accès à internet aux users de votre parc informatique en fonction des heures d'accès, des ports de destination d'un service, d'ip sources, etc. Il permet aussi de mettre en cache les sites visité afin d’accélérer le trafic.

Le logiciel que nous utiliserons est Squid

Dans cet article (en attendant d'autres plus poussé sur l'intégration avec Active Directory, reverse proxy, ...) nous verrons comment configurer Squid. de manière simple et nous apprendrons à le gérer, à le comprendre.

Prérequis :

Connaître un tant soit peu Linux et le réseau.

Objectif :

Réaliser et comprendre toutes les étapes de la configuration d'un proxy avec squid en tant que proxy web simple.

Matériel :

Deux machines en virtuel ou en physique. (Une sous Linux et l'autre, le client, avec n'importe quel OS. De quoi faire communiquer les deux machines (switch, câbles UTP, etc)

Squid est disponible sous deux versions avec Debian. Squid 2.7 et Squid 3. Les changements apporté par Squid 3: réécriture du code en C++, prise en charge d'ICAP (Internet Content Adaptation Protocol), de l'IPv6, d'ESI (Edge Side Includes). Je ne m'étendrai pas sur ces différentes fonctionnalités mais tant qu'à faire, autant rester à jours

Nous prendrons donc Squid 3 pour configurer notre proxy et vous verrez que c'est extrêmement simple.

aptitude install squid3

Le fichier de configuration de squid est trèèèès long. En fait, il n'y a pas de man 5 squid.conf et ce n'est pas nécessaire vu la richesse du fichier. Toutes les options y sont déjà données, commentées avec leurs valeurs par défaut.

Nous allons donc le sauvegarder et ensuite l'éditer

cp /etc/squid3/squid.conf  /etc/squid3/squid.conf.old

vim /etc/squid3/squid.conf

Dans ce fichier nous allons mettre ces différentes lignes :

# Cette première ligne veut dire que Squid écoute sur le port 3128 et
# qu'il s'attendra à recevoir des requêtes redirigées sans que l'utilisateur 
# client en ait conscience
http_port 3128 transparent

# Cette ligne affichera le nom de machine spécifié lors des messages 
# d'erreurs
visible_hostname squid.test.local

# Access List. Ici on crée un groupe qui sera utilisé pour gérer l'IP 
# source des clients qui utiliserons le proxy.
acl localnet src 192.168.2.0/24

# Squid fonctionne un peu comme Iptables. La première règle qui est 
# concordante avec le paquet qui arrive sera utilisée et n'ira pas plus 
# loin. Ainsi donc, dans notre cas, l'ACL qui regroupe les ip du lan 
#seront autorisées et toutes les autres refusées
http_access allow localnet
http_access deny all


# Spécifie le chemin vers les logs d’accès créé pour chaque page 
# visitée
access_log /var/log/squid3/access.log

# Indique à Squid d'attendre 4 secondes avant de se couper quand on 
# essaye de le stoper ou de le redémarrer. Par défaut c'est 30 secondes
shutdown_lifetime 4 secondes

Une fois que notre fichier squid.conf est édité, vous pouvez redémarrer Squid sans problème.

/etc/init.d/squid3  restart

Normalement vous avez une interface vers internet et une vers le lan. Pour que internet puisse répondre aux requêtes qui ne viennent pas du proxy, donc celle du Lan avec une IP 192.168.2.0/24, il faudra faire du nat. Et pour que le requêtes vers le proxy arrivent en transparent, il faut rediriger le port 80 vers le port 3128 quand elles arrivent.

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

De cette façon, toutes les requêtes vers un site en http depuis le Lan vers le Wan passerons par le proxy.

Il existe une multitude d'acl existante pour filtrer non pas juste l'adresse ip source mais aussi celle de destination, le domaine de destination, l'url, la mac adresse, l'heure de connexion ainsi que les jours. Bref, beaucoup de chose que vous pouvez utiliser pour gérer les connexions à internet. N'oubliez pas que pour rendre les règes d'Iptables persistante, il faut faire ceci

iptables-save > /etc/iptables
echo "post-up iptables-restore < /etc/iptables" >> /etc/network/interfaces

Tout devrait rouler maintenant. non ?

Par GanGan | le lundi, mai 31 2010 07:00

Commentaires

1. Kiyoshi

lundi, mai 31 2010 | 09:02

Merci beaucoup pour ce billet !

Seulement voilà je possède une config semblable (transparent) et j'ai un petit problème. Si un utilisateur s'amuse à configurer un proxy dans son navigateur il peut alors sans problèmes outrepasser le proxy filtrant...qu'elle est la parade à cela ?

2. Toto

lundi, mai 31 2010 | 13:27

Je vois deux solutions actuellement et je me renseigne pour trouver une méthode plus élégante.

1) Analyser les logs de Squid via SARG ou Webalizer afin de voir les ip qui sont fortement utilisé (et donc p-e des proxy externe) et ensuite utiliser un ACL pour interdire cette ip ou le domaine

2) Ne plus utiliser le mode transparent, bloquer le port 80 et paramètrer le proxy dans chaque navigateur afin qu'ils soient obligés d'utiliser le tien. Ou plutôt que de bloque le port 80, le rediriger vers un site qui explique comment configurer le proxy dans les différents navigateurs. Il y a aussi possibilité de le configurer grâce à une GPO (valide que pour IE mais heureusement safari, chrome et opera utilisent le proxy configuré dans IE ;) )

je continue de chercher

3. kidrek

lundi, mai 31 2010 | 13:49

Kiyoshi> Ce que je te conseille, c'est de gérer ton parefeu pour qu'il n'autorise que les flux sortants sur le net provenant de ton proxy. Et ainsi tu limites déjà pas mal les proxy perso.

4. Toto

lundi, mai 31 2010 | 14:08

Je me trompe peut etre mais si l'utilisateur dans le lan utilise un proxy externe (que ce soit chez lui ou autre part) qui écoute sur le port 80, avec cette méthode on ne pourra pas l'interdire ?

5. kidrek

lundi, mai 31 2010 | 19:50

C'est sur, mais tout dépend de la connaissance des clients du LAN, car le fait de monter un proxy perso chez soit, est plus réservé à un public averti.
A ce niveau là, ils trouveront toujours un moyen de contourner. Pour ma part, nous avons blacklisté la plupart des proxy du NET au niveau de la conf de squid.

6. Toto

lundi, mai 31 2010 | 22:10

Je pense finalement que la pratique la plus courante, facile à mettre en place et gratuite est d'utiliser un logiciel de filtrage de contenu tel SquidGuard ou Dansguardian.

J'en ferai mon prochain billet :)

7. Hervé

lundi, mai 31 2010 | 23:34

Oui pour éviter l'utilisation de proxy externe, je conseille d'utiliser un outil de filtrage d'URLs en complément de squid.
Par exemple SquidGuard fonctionne très bien et est très simple à installer : http://www.squidguard.org
Tu peux ensuite télécharger des blacklists qui contiennent la plupart des open proxies.

8. kidrek

mardi, juin 1 2010 | 10:00

tout à fait d'accord avec vous, nous avons couplé notre squid à dansguardian (+clamav), et le résultat est assez satisfaisant. Petit bémol, il y a beaucoup de faux positif, qui nécessitent un temps de paramétrage des urls à blacklister ou à mettre en exception assez long.

9. boubz

lundi, octobre 25 2010 | 18:26

Un proxy agit sur la couche application; il suffit de configurer le navigateur du client pour envoyer les requétes directement sur le proxy ;
Ce dernier enverra la requete à sa passerelle par defaut ...

Mais dans votre exemple le proxy agit comme un routeur ? puisque vous mettez en place une régle iptable pour du NAT ...

10. Fred

mardi, novembre 23 2010 | 10:35

Bonjour,

Je souhaite déployer et installer plusieurs proxy SQUID dans nos différents filiales (10 sites dans le monde) certainement sur machines RedHat. Existe-t-il un outil de centralisation de la gestion de plusieurs proxy SQUID ? Par exemple, appliquer une configuration définie en central vers un ensemble de serveurs SQUID. Je souhaite simplifier l'administration de ces proxys. Merci.

Frédéric