GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Iptables und transparente Proxys?

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


Linux
  1. Was ist mit der Verbindung von Stdout und Stdin gemeint?

  2. Ausgabe umleiten und leiten?

  3. Ein- und Ausgabe von einer bestimmten ausführbaren Datei abfangen?

  4. So leiten Sie die Ausgabe in eine Datei und stdout um

  5. Unterschiedliche Farbe für Befehl und Ausgabe

16 Tipps und Tricks zu iptables für Systemadministratoren

50 nützliche und einfache IPtables-Regeln für Linux-Administratoren

Erklärt:Eingabe-, Ausgabe- und Fehlerumleitung in Linux

Was ist der Unterschied zwischen OUTPUT- und FORWARD-Ketten in iptables?

Iptables - Bridge- und Forward-Kette

Debuggen von iptables und häufigen Firewall-Fallstricken?