Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format
PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
utilisateurs:hypathie:tutos:proxy-transparent [17/10/2014 16:40] Hypathie [Configuration de squid comme proxy transparent] |
utilisateurs:hypathie:tutos:proxy-transparent [18/10/2014 07:19] Hypathie [Introduction] |
||
---|---|---|---|
Ligne 8: | Ligne 8: | ||
===== Introduction ===== | ===== Introduction ===== | ||
Voir : [[http://www.squid-cache.org/|le site de squid]]\\ | Voir : [[http://www.squid-cache.org/|le site de squid]]\\ | ||
- | [[http://wiki.squid-cache.org/ConfigExamples/Intercept/LinuxDnat|proxy transparent]] | + | [[http://wiki.squid-cache.org/ConfigExamples/Intercept/LinuxDnat|proxy transparent]]\\ |
+ | Voir aussi : [[http://www.sput.nl/software/squid33.html]]\\ | ||
+ | [[http://www.linux-france.org/prj/edu/archinet/systeme/ch40s02.html]] | ||
Lorsqu'un serveur mandataire est installé, on configure souvent le routage du réseau pour que l'utilisateur final soit orienté vers le serveur mandataire sans avoir à modifier sa configuration. On parle alors de « proxy transparent ». Cette configuration est obtenue par translation d'adresse IP. | Lorsqu'un serveur mandataire est installé, on configure souvent le routage du réseau pour que l'utilisateur final soit orienté vers le serveur mandataire sans avoir à modifier sa configuration. On parle alors de « proxy transparent ». Cette configuration est obtenue par translation d'adresse IP. | ||
- | ===Prérequis=== | + | ====Prérequis==== |
Un serveur DNS est installé sur la passerelle.\\ | Un serveur DNS est installé sur la passerelle.\\ | ||
Ligne 21: | Ligne 24: | ||
''iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE'' | ''iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE'' | ||
- | Le serveur squid est installé : | + | === Configuration d'iptables (NAT) === |
+ | |||
+ | * Il faut ajouter : | ||
+ | |||
+ | <code root> | ||
+ | iptables -t nat -F | ||
+ | iptables -t nat -X | ||
+ | iptables -t mangle -F | ||
+ | iptables -t mangle -X | ||
+ | |||
+ | iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.1 -p tcp --dport 80 -j ACCEPT | ||
+ | |||
+ | iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80\ | ||
+ | -j DNAT --to-destination 192.168.0.1:3128 | ||
+ | |||
+ | iptables -t mangle -A PREROUTING -p tcp --dport 3128 -j DROP | ||
+ | |||
+ | iptables -t nat -A PREROUTING -i eth1 -s 192.168.1.0/24\ | ||
+ | -p tcp --dport 80 -j REDIRECT --to-port 3128 | ||
+ | |||
+ | iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80\ | ||
+ | -j REDIRECT --to-ports 3128 | ||
+ | |||
+ | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | ||
+ | </code> | ||
+ | |||
+ | |||
+ | * Ce qui donne : | ||
+ | <code root>iptables -L -t nat</code> | ||
+ | |||
+ | <code>Chain PREROUTING (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | ACCEPT tcp -- debian-serveur.mondomaine.hyp anywhere tcp dpt:http | ||
+ | DNAT tcp -- anywhere anywhere tcp dpt:http to:192.168.0.1:3128 | ||
+ | REDIRECT tcp -- 192.168.1.0/24 anywhere tcp dpt:http redir ports 3128 | ||
+ | |||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | |||
+ | Chain OUTPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | |||
+ | Chain POSTROUTING (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | MASQUERADE all -- anywhere anywhere</code> | ||
+ | |||
+ | <code root>iptables -L PREROUTING -t mangle</code> | ||
+ | <code>iptables -L -t mangle | ||
+ | Chain PREROUTING (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | DROP tcp -- anywhere anywhere tcp dpt:3128</code> | ||
+ | |||
+ | <note> | ||
+ | **Pour mangle**, une petite citation extrait du [[http://wiki.squid-cache.org/ConfigExamples/Intercept/LinuxDnat|site officiel de squid]] : | ||
+ | |||
+ | Due to the NAT security vulnerabilities it is also a very good idea | ||
+ | to block external access to the internal receiving port. | ||
+ | This has to be done in the mangle part of iptables before DNAT happens | ||
+ | so that intercepted traffic does not get dropped. | ||
+ | |||
+ | **Par contre, concernant les deux interfaces, il faut lancer les commandes iptables pour le DNAT sur l'interface côté lan, et sur l'IP du serveur proxy du réseau côté web.** | ||
+ | |||
+ | </note> | ||
+ | ===Configurer /etc/sysctl.conf === | ||
+ | La première ligne est probablement déjà configurer tel que ce-dessous. Modifier aussi la seconde | ||
+ | <code> | ||
+ | # Controls IP packet forwarding | ||
+ | net.ipv4.ip_forward = 1 | ||
+ | |||
+ | # Controls source route verification | ||
+ | net.ipv4.conf.default.rp_filter = 0 | ||
+ | </code> | ||
+ | * Faire rendre en compte une éventuelle modification : | ||
+ | <code root>sysctl -p</code> | ||
+ | |||
+ | |||
+ | ===Installer le serveur squid3=== | ||
<code root>apt-get install squid3</code> | <code root>apt-get install squid3</code> | ||
<code root>apt-get build-dep squid3</code> | <code root>apt-get build-dep squid3</code> | ||
Ligne 33: | Ligne 112: | ||
* contrôle d'accès en fonction des heures. | * contrôle d'accès en fonction des heures. | ||
Néanmoins un proxy transparent permettra de ne rien avoir à configurer dans le navigateur du client qui "ignorera" qu'il passe par un proxy quand il navigue. Cela place donc hors sujet la question l'accès par login et mot de passe... | Néanmoins un proxy transparent permettra de ne rien avoir à configurer dans le navigateur du client qui "ignorera" qu'il passe par un proxy quand il navigue. Cela place donc hors sujet la question l'accès par login et mot de passe... | ||
- | |||
- | <note important> | ||
- | Avant toute modification du fichier /etc/squid3/squid.conf\\ | ||
- | il faut arrêter squid : | ||
- | <code root>/etc/init.d/squid3 stop</code> | ||
- | |||
- | Puis quand on a fait les modifications souhaitées, on le redémarre : | ||
- | <code root>/etc/init.d/squid3 start</code> | ||
- | </note> | ||
===Faire une sauvegarde du fichier de configuration === | ===Faire une sauvegarde du fichier de configuration === | ||
Ligne 51: | Ligne 121: | ||
* Puis pour y voir plus clair : | * Puis pour y voir plus clair : | ||
- | On supprime toutes les lignes commentées et vide du fichier original, et on le re-crée afin qu'il contienne uniquement les lignes dé-commentées par défaut dans le fichier original. | + | On supprime toutes les lignes commentées et vides du fichier original, et on le recrée afin qu'il contienne uniquement les lignes du fichier original dé-commentées par défaut. |
<code root>echo "`grep -v "^#" /etc/squid3/squid.conf | sed -e '/^$/d'`" >/etc/squid3/squid.conf</code> | <code root>echo "`grep -v "^#" /etc/squid3/squid.conf | sed -e '/^$/d'`" >/etc/squid3/squid.conf</code> | ||
Ligne 68: | Ligne 138: | ||
* Concernant le cache tout est commenté dans le fichier original | * Concernant le cache tout est commenté dans le fichier original | ||
- | On récupère ce qui le concerne et on l'ajoute aussi dans le fichier /etc/squid3/squid.conf | + | On récupère le concernant, et on l'ajoute aussi dans le fichier /etc/squid3/squid.conf |
* Ce qui donne : | * Ce qui donne : | ||
Ligne 267: | Ligne 337: | ||
<note> | <note> | ||
- | Si pour une raison ou pour une autre, il y a besoin de ré-initialiser le cache, par exemple si la taille de mémoire cache ne convient pas, ne pas hésiter à supprimer ces fichiers manuellement :\\ | + | Si pour une raison ou pour une autre, il y a besoin de ré-initialiser le cache, par exemple si la taille de mémoire cache ne convient pas, ne pas hésiter à supprimer ces fichiers manuellement, ou tout simplement si on veut le vider complètement :\\ |
+ | * Il faut arrêter squid : | ||
+ | <code root>/etc/init.d/squid3 stop</code> | ||
+ | |||
+ | * On se déplace dans le répertoire du cache : | ||
(S'il vous plaît servez-vous de l'auto-complétion, surtout ici) | (S'il vous plaît servez-vous de l'auto-complétion, surtout ici) | ||
<code root>cd /var/spool/squid3/</code> | <code root>cd /var/spool/squid3/</code> | ||
+ | |||
+ | * On supprime tous les dossiers | ||
<code root>rm -rv 0*</code> | <code root>rm -rv 0*</code> | ||
- | <code root>rm -rv swap.state*</code> | ||
- | </note> | ||
+ | * On supprime les fichiers | ||
+ | <code root>rm -v swap.state*</code> | ||
+ | * On relance squid3 : | ||
+ | <code root>/etc/init.d/squid3 start</code> | ||
+ | </note> | ||
- | ===== configuration d'iptables (NAT) ===== | ||
- | Nous n'avons pour l'instant que l'IP masquerade mis en place : | ||
- | * Il faut ajouter : | ||
- | <code root> | ||
- | iptables -t nat -A PREROUTING -s 192.168.0.1 -p tcp --dport 80 -j ACCEPT | ||
- | iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT\ | ||
- | --to-destination 192.168.0.1:3128 | ||
- | iptables -t mangle -A PREROUTING -p tcp --dport 3128 -j DROP | ||
- | iptables -t nat -A PREROUTING -i eth1 -s 192.168.1.0/24\ | ||
- | -p tcp --dport 80 -j REDIRECT --to-port 3128 | ||
- | iptables -t nat -I PREROUTING 1 -i eth1 -s 192.168.1.0/24\ | ||
- | -p tcp -m tcp --dport 80 -J ACCEPT | ||
- | </code> | ||
- | * Ce qui donne : | ||
- | <code root>iptables -L -t nat</code> | ||
- | <code>Chain PREROUTING (policy ACCEPT) | + | =====Vérifications==== |
- | target prot opt source destination | + | ====Vérifier le passage par le proxy ==== |
- | DNAT tcp -- anywhere anywhere tcp dpt:http to:192.168.1.1:3128 | + | Pour vérifier que le sous-réseau qui est connecté au web via la passerelle, passe bien de même par le proxy.\\ |
- | REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 3128 | + | Il faut : |
- | Chain INPUT (policy ACCEPT) | + | * Générer du flux depuis le sous-réseau |
- | target prot opt source destination | + | Tout bêtement, de côté du lan, on navigue ! |
- | Chain OUTPUT (policy ACCEPT) | + | * Tout en observant côté passerelle (i.e. serveur squid) |
- | target prot opt source destination | + | le fichier /var/log/squid3/access.logdes logs d'accès : |
- | Chain POSTROUTING (policy ACCEPT) | ||
- | target prot opt source destination | ||
- | MASQUERADE all -- anywhere anywhere</code> | ||
- | |||
- | ===Configurer /etc/sysctl.conf === | ||
- | * Vérifier que les lignes suivantes comportes ces valeurs : | ||
- | |||
- | <code> | ||
- | # Controls IP packet forwarding | ||
- | net.ipv4.ip_forward = 1 | ||
- | |||
- | # Controls source route verification | ||
- | net.ipv4.conf.default.rp_filter = 0 | ||
- | </code> | ||
- | * Faire rendre en compte une éventuelle modification : | ||
- | <code root>sysctl -p</code> | ||
- | |||
- | =====Vérifications==== | ||
- | ====Passage par le proxy ==== | ||
- | Vérifie si le sous-réseau qui passe est connecté au web par le passerelle, passe bien par le proxy. | ||
- | ===Générer du flux === | ||
- | Tout bêtement, de côté du lan, on navigue en observant le fichier des logs d'accès : | ||
- | * Le fichier /var/log/squid3/access.log | ||
- | Par exemple : | ||
<code root> | <code root> | ||
tail -f /var/log/squid3/access.log | tail -f /var/log/squid3/access.log | ||
Ligne 375: | Ligne 415: | ||
</note> | </note> | ||
- | * Voir le fichier /var/log/squid3/cache.log | + | ====Vérifier le cache==== |
+ | ===Voir le fichier /var/log/squid3/cache.log=== | ||
On trouve dans ce fichier beaucoup d’informations allant du nombre de descripteurs de fichiers ouverts jusqu’à la mémoire allouée. Il est possible de se référer à la documentation officielle pour obtenir plus de détails sur ce fichier.\\ | On trouve dans ce fichier beaucoup d’informations allant du nombre de descripteurs de fichiers ouverts jusqu’à la mémoire allouée. Il est possible de se référer à la documentation officielle pour obtenir plus de détails sur ce fichier.\\ | ||
- | Par exemple ci-dessous les DNS enregistrés : | + | |
+ | * Par exemple ci-dessous les DNS enregistrés : | ||
<code>2014/10/16 13:11:45| Process ID 3735 | <code>2014/10/16 13:11:45| Process ID 3735 | ||
2014/10/16 13:11:45| With 65535 file descriptors available | 2014/10/16 13:11:45| With 65535 file descriptors available | ||
Ligne 391: | Ligne 434: | ||
2014/10/16 13:11:45| Unlinkd pipe opened on FD 13<...></code> | 2014/10/16 13:11:45| Unlinkd pipe opened on FD 13<...></code> | ||
- | ====Les pages web visitées et le cache==== | ||
- | ===== Utilisation ===== | + | |