Cette section a été envoyée par le lecteur Ram Narula de "Internet for Education" (Internet pour l'éducation) (Thailande).
La technique habituelle pour réaliser ceci dans Linux est probablement l'utilisation d'ipchains APRES s'être assuré que le trafic sortant du port 80 (web) est routé à travers le serveur faisant fonctionner squid.
Il y a 3 méthodes communes pour être sûr que le trafic sortant du port 80 est routé vers le serveur faisant fonctionner squid et une quatrième est introduite ici.
- La passerelle le fait.
-
Si vous pouvez dire à votre passerelle que les paquets sortants à destination du port 80 doivent être envoyés vers l'adresse IP du serveur squid.
MAIS
Ceci amènerait une charge supplémentaire sur le routeur et des routeurs commerciaux peuvent même ne pas supporter ceci.
- Utiliser un commutateur Couche 4.
-
Les commutateurs Couche 4 peuvent manipuler ceci sans aucun problème.
MAIS
Le coût pour un tel équipement est en général très élevé. Typiquement, un commutateur couche 4 coûte normalement plus cher qu'un serveur classique + un bon serveur linux.
- Utiliser le serveur cache comme passerelle réseau
-
Vous pouvez forcer TOUT le trafic à travers le serveur cache
MAIS
Ceci est plutôt risqué dans la mesure où Squid utilise beaucoup de ressources CPU, ce qui peut conduire à une baisse des performances de tout le réseau. Le serveur peut également ne plus fonctionner et personne sur le réseau ne pourra accéder à Internet si cela a lieu.
- Routeur Linux+NetFilter.
-
En utilisant Netfilter, une autre technique peut être implémentée. Celle-ci consiste à utiliser Netfilter pour "marquer" les paquets à destination du port 80 et à utiliser iproute2 pour router les paquets "marqués" vers le serveur Squid.
|----------------| | Implémentation | |----------------| Adresses utilisées 10.0.0.1 naret (serveur NetFilter) 10.0.0.2 silom (serveur Squid) 10.0.0.3 donmuang (routeur connecté à Internet) 10.0.0.4 kaosarn (un autre serveur sur le réseau) 10.0.0.5 RAS 10.0.0.0/24 réseau principal 10.0.0.0/19 réseau total |----------------| |Schéma du réseau| |----------------| Internet | donmuang | ------------hub/commutateur---------- | | | | naret silom kaosarn RAS etc.
Premièrement, faire en sorte que tout le trafic passe par naret en étant sûr que c'est la passerelle par défaut, à l'exception de silom. La passerelle par défaut de silom doit être donmuang (10.0.0.3) ou ceci créerait une boucle du trafic web.
(Tous les serveurs sur mon réseau avaient 10.0.0.1 comme passerelle par défaut qui était l'ancienne adresse du routeur donmuang. Cela m'a conduit à attribuer 10.0.0.3 comme adresse IP à donmuang et à donner 10.0.0.1 comme adresse IP à naret.)
Silom ----- -configurer squid et ipchains
Pour la configuration du serveur Squid sur silom, soyez sûr que celui-ci supporte le cache/proxy transparent (transparent caching/proxying). Le port par défaut pour squid est en général 3128. Tout le trafic pour le port 80 doit donc être redirigé localement vers le port 3128. Ceci peut être fait en utilisant ipchains comme suit :
silom# ipchains -N allow1 silom# ipchains -A allow1 -p TCP -s 10.0.0.0/19 -d 0/0 80 -j REDIRECT 3128 silom# ipchains -I input -j allow1
Ou, avec netfilter:
silom# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
(note: vous pouvez avoir également d'autres entrées)
Pour plus d'informations sur la configuration du serveur Squid, se référer à la page FAQ Squid sur http://squid.nlanr.net).
Soyez sûr que l"ip forwarding" est actif sur votre serveur et que la passerelle par défaut pour ce serveur est donmuand (PAS naret).
Naret ----- - configurer squid et ipchains - désactiver les messages icmp REDIRECT (si besoin)
-
"Marquer" les paquets à destination du port 80 avec la valeur 2
naret# iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 80 \ -j MARK --set-mark 2
-
Configurer iproute2 de sorte qu'il route les paquets avec la marque 2 vers silom
naret# echo 202 www.out >> /etc/iproute2/rt_tables naret# ip rule add fwmark 2 table www.out naret# ip route add default via 10.0.0.2 dev eth0 table www.out naret# ip route flush cache
Si donmuang et naret sont sur le même réseau, naret ne doit pas envoyer de messages icmp REDIRECT. Ceux-ci doivent être désactivés par :
naret# echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects naret# echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects naret# echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
La configuration est terminée, vérifions-la.
Sur naret: naret# iptables -t mangle -L Chain PREROUTING (policy ACCEPT) target prot opt source destination MARK tcp -- anywhere anywhere tcp dpt:www MARK set 0x2 Chain OUTPUT (policy ACCEPT) target prot opt source destination naret# ip rule ls 0: from all lookup local 32765: from all fwmark 2 lookup www.out 32766: from all lookup main 32767: from all lookup default naret# ip route list table www.out default via 203.114.224.8 dev eth0 naret# ip route 10.0.0.1 dev eth0 scope link 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.1 127.0.0.0/8 dev lo scope link default via 10.0.0.3 dev eth0 (soyez sûr que silom appartiens à l'une des lignes ci-dessus. Dans ce cas, c'est la ligne avec 10.0.0.0/24) |------| |-FAIT-| |------|
|---------------------------------------| |Schéma du trafic après l'implémentation| |---------------------------------------| INTERNET /\ || \/ -----------------routeur donmuang--------------------- /\ /\ || || || || || \/ || naret silom || *trafic à destination du port 80=====>(cache) || /\ || || || \/ \/ \\===================================kaosarn, RAS, etc.
Noter que le réseau est asymétrique car il y a un saut supplémentaire sur le chemin sortant.
Voici le cheminement d'un paquet traversant le réseau de kaosarn allant et venant d'Internet. Pour le trafic web/http : requête http kaosarn->naret->silom->donmuang->Internet réponse http de Internet->donmuang->silom->kaosarn Pour les requêtes non web/http (par ex. telnet) : données sortantes kaosarn->naret->donmuang->Internet données entrantes d'Internet->donmuang->kaosarn