J'ai configuré un proxy TCP local et transparent sur localhost
. Je veux rediriger TOUT le trafic TCP vers ce proxy, afin qu'il puisse le gérer et que rien ne «fuite», contournant le proxy. J'ai besoin d'utiliser IPTables pour rediriger le trafic. J'ai pensé à utiliser TPROXY, mais cela nécessite un support d'application et seule la cible REDIRECT est supportée pour le moment.
J'ai utilisé les règles IPTables suivantes :
iptables -t nat -A OUTPUT -o lo -j RETURN
iptables -t nat -A OUTPUT -d 127.0.0.0/8 -j RETURN
iptables -t nat -A OUTPUT -d 192.168.0.0/16 -j RETURN
iptables -t nat -A OUTPUT -m owner --uid-owner proxy-owner -j RETURN
iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $PROXY_PORT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 127.0.0.0/8 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner proxy-owner -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j LOG
iptables -P OUTPUT DROP
Ils semblent fonctionner correctement, mais je ne sais pas pourquoi.
Voici deux questions auxquelles je ne connais toujours pas la réponse :
1) Concernant la dernière règle de la table NAT, pourquoi est-ce que je veux seulement rediriger les paquets SYN vers le port proxy local (--syn
) ?
Je souhaite rediriger TOUS les paquets TCP. Dans la configuration actuelle, il semble que seul le paquet SYN
soit redirigé vers le proxy local, et tous les autres paquets sont autorisés à circuler directement vers la destination, conduisant (en théorie) à un désordre total (ou tous sauf SYN étant bloqué par la table de filtrage).
Cependant, si je supprime le --syn
option et redirigez TOUS les paquets vers le proxy local, le proxy ne fonctionne pas du tout. Pourquoi ?
2) En ce qui concerne la 4ème règle du tableau de filtrage, pourquoi dois-je autoriser explicitement les connexions établies sortantes ? Le proxy est la seule application autorisée à envoyer des paquets vers des destinations non locales de toute façon, et il est déjà autorisé à le faire (règle 3), alors pourquoi ai-je besoin de la 4ème règle ? Il semble que cela permette aux connexions non proxy de contourner le proxy.
Merci !
Réponse acceptée :
Les deux parties de votre question sont liées.
La partie (1) capture un paquet SYN et le redirige comme vous le suggérez. À partir de ce moment, conntrack (2) prend le relais et reconnaît que chaque paquet suivant dans ce flux fait partie de la même connexion et le redirige de la même manière que le paquet SYN d'origine.
En relation :Changer l'environnement d'un processus en cours d'exécution ?Un aperçu du suivi des connexions est disponible à l'adresse http://en.wikipedia.org/wiki/Netfilter#Connection_Tracking