GNU/Linux >> Tutoriels Linux >  >> Linux

Iptables et proxys transparents ?

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


Linux
  1. Bloquer la liste noire des hôtes et iptables

  2. Comment fonctionnent la saisie au clavier et la sortie de texte ?

  3. Que signifie connecter Stdout et Stdin ?

  4. Rediriger et canaliser la sortie ?

  5. Intercepter l'entrée et la sortie d'un exécutable spécifique ?

16 trucs et astuces iptables pour les administrateurs système

50 règles IPtables utiles et simples pour l'administrateur Linux

Explication :Redirection des entrées, des sorties et des erreurs sous Linux

Quelle est la différence entre les chaînes OUTPUT et FORWARD dans iptables ?

Iptables - Chaîne Bridge et Forward

Débogage d'iptables et des pièges courants du pare-feu ?