Ich habe einen lokalen, transparenten TCP-Proxy auf localhost
eingerichtet . Ich möchte den GESAMTEN TCP-Verkehr auf diesen Proxy umleiten, damit er damit umgehen kann und nichts „durchsickert“ und den Proxy umgeht. Ich muss IPTables verwenden, um den Datenverkehr umzuleiten. Ich habe über die Verwendung von TPROXY nachgedacht, aber das erfordert Anwendungsunterstützung und im Moment wird nur das Ziel REDIRECT unterstützt.
Ich habe die folgenden IPTables-Regeln verwendet:
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
Sie scheinen funktioniert gut, aber ich bin verwirrt, warum.
Hier sind zwei Fragen, auf die ich immer noch keine Antwort weiß:
1) In Bezug auf die letzte Regel in der NAT-Tabelle, warum möchte ich SYN-Pakete nur an den lokalen Proxy-Port umleiten (--syn
)?
Ich möchte ALLE TCP-Pakete umleiten. In der aktuellen Konfiguration scheint nur das SYN-Paket
zum lokalen Proxy umgeleitet zu werden, und alle anderen Pakete dürfen direkt zum Ziel fließen, was (theoretisch) zu einem totalen Durcheinander führt (oder alle außer SYN durch die Filtertabelle blockiert).
Wenn ich jedoch --syn
weglasse auswählen und ALLE Pakete an den lokalen Proxy umleiten, funktioniert der Proxy überhaupt nicht. Warum?
2) In Bezug auf die vierte Regel in der Filtertabelle, warum muss ich ausgehende etablierte Verbindungen explizit zulassen? Der Proxy ist ohnehin die einzige Anwendung, die Pakete an nicht-localhost-Ziele senden darf, und das ist ihm auch schon erlaubt (Regel 3), wozu brauche ich also die 4. Regel? Es scheint, als ob es Nicht-Proxy-Verbindungen erlaubt, den Proxy zu umgehen.
Vielen Dank!
Akzeptierte Antwort:
Beide Teile Ihrer Frage sind verlinkt.
Teil (1) erfasst ein SYN-Paket und leitet es wie von Ihnen vorgeschlagen um. Von diesem Punkt an übernimmt conntrack (2) und erkennt, dass jedes nachfolgende Paket in diesem Stream Teil derselben Verbindung ist, und leitet es auf die gleiche Weise wie das ursprüngliche SYN-Paket um.
Verwandt:Umgebung eines laufenden Prozesses ändern?Eine Übersicht über Connection Tracking finden Sie unter http://en.wikipedia.org/wiki/Netfilter#Connection_Tracking