web-dev-qa-db-fra.com

iptables ne redirige pas le trafic http vers mon proxy Squid!

J'ai arrangé un proxy transparent Squid qui écoute le port 3128 sur localhost, pour bloquer certains sites Web.

J'ai testé le proxy en utilisant Firefox, et cela fonctionne.

Ensuite, j'ai lancé ceci, dans l'espoir de rediriger toutes les requêtes http vers le proxy:

Sudo iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 3128

Malheureusement, rien ne se passe. Les autres navigateurs de mon système ne semblent pas utiliser le proxy. Je ne veux pas configurer chaque navigateur, utiliser le proxy non plus.

Sudo iptables -L ne montre aucune règle assignée.

Je suis sur Ubuntu 13.04 et j'utilise un modem USB 3G (ppp0) pour me connecter à Internet. Tout conseil est apprécié!

7
Naveen

Je pense que vous manquez le port de destination, essayez de suivre

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128

Sans dport, vous transférez le trafic avec le port de destination 3128 vers le port local 3128. Vous souhaitez que le trafic avec le port de destination 80 soit transféré vers le port local 3128.

De plus, pour afficher les règles nat, utilisez

iptables -t nat -L

Cependant, les règles ci-dessus ne fonctionneront pas pour une configuration de proxy transparente sur le même ordinateur du navigateur, car la chaîne PRÉROUTANT modifie les paquets avant le routage client distant et il ne fera rien pour les paquets générés localement. Ainsi, nous devrions utiliser OUTPUT chaîne pour les paquets générés localement qui sortent du système.

Essayez de suivre à la place

iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner proxy --dport 80 -j REDIRECT --to-port 3128

Il ne redirigera le trafic que pour les processus autres que ceux appartenant à proxy user.

Sans -m owner ! --uid-owner proxy, cela ne fonctionnera pas, car les règles captureront également le trafic sortant du serveur proxy et se retrouveront en boucle.

12
John Siu