Iptables-Portweiterleitung mit Einschränkungen für einige

Iptables-Portweiterleitung mit Einschränkungen für einige

Ich habe eine Reihe von Diensten, für die ich IP-basierte ACLs (Whitelist) festlegen möchte, für die anderen jedoch nicht. Die Probleme treten anscheinend auf, da die Dienste intern auf demselben Port (Port 80) ausgeführt werden, ich jedoch unterschiedliche Ports auf dem Gateway verwende, um auf sie zuzugreifen.

Port 8088 auf Gateway -> Port 80 auf 10.0.0.A (mit IP-Whitelist)
Port 80 auf Gateway -> Port 80 auf 10.0.0.B

Und ich kann dies mit allem Geöffneten zum Laufen bringen, indem ich die folgenden Regeln befolge:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 10.0.0.B
iptables -A WEITER -p tcp -i eth0 --dport 80 -j AKZEPTIEREN

Das Problem besteht darin, dass die FORWARD ACCEPT-Regel beide dieser NAT-Regeln abdeckt, da sie anscheinend auf dem Zielport (--dport 80) und nicht auf dem eingehenden Port des Gateways (80 vs. 8088) basieren.

Ich kann nicht herausfinden, wie ich die FORWARD-Regel in zwei separate Regeln umschreiben kann, sodass ich für Verbindungen, die über 80 oder 8088 in das Gateway eingehen, ein unterschiedliches Verhalten erzielen kann.

Zusätzliche Information:

lsb_release -d
Beschreibung: Debian GNU/Linux 7.5 (wheezy)
iptables --version
iptables v1.4.14

1. Lösungsversuch Ich konnte eine Kette abspalten und dort das Routing durchführen, aber ich kann die ACL-Zeile (Ablehnung) aufgrund der folgenden Fehlermeldung nicht hinzufügen:

x_tables: ip_tables: REJECT-Ziel: nur gültig in Filtertabelle, nicht nat

Folgendes habe ich eingegeben:

iptables -t nat -N Weiße Liste
iptables -t nat -A Whitelist -p tcp -j DNAT --to 10.0.0.A:80
iptables -t nat -A Whitelist -s <whatsmyip.org> -j RETURN
iptables -t nat -A Whitelist -j ABLEHNEN
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j Weiße Liste

Bis Zeile 4 funktioniert alles einwandfrei, dann schlägt das REJECT innerhalb von nat fehl. Wenn ich die REJECT-Zeile auskommentiere, kann ich bestätigen, dass der Rest der Logik funktioniert und der Port für die freie Wildbahn geöffnet wird, da nichts abgelehnt wird.

Nächster Lösungsversuch Scheint, als würde man über das ursprüngliche Problem stolpern, während man mit einer richtig eingerichteten separaten Kette arbeitet. Die PREROUTING-Regel, die den Port von Anfang an ändert, scheint immer noch ein Problem mit dem nicht-nat-ACL-Versuch zu verursachen. Die ACL-Regeln haben keine Wirkung und der Port ist für die freie Wildbahn offen.

iptables -N Whitelist
iptables -Eine Whitelist -s <whatsmyip.org> -j RETURN
iptables -Eine Whitelist -j ABLEHNEN
iptables -A INPUT -i eth0 -p tcp --dport 8088 -j Whitelist
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80

Lösungsversuch Nr. 3 Ich habe zuerst versucht, die Whitelist einzurichten und dann nach der Auflösung der Whitelist eine Portumleitung durchzuführen. Während die Regeln geladen werden, hat dies nicht den beabsichtigten Effekt, da der Datenverkehr von der auf der Whitelist stehenden IP nicht sein beabsichtigtes Ziel erreicht. Obwohl ich mir nicht 100 % sicher bin, wie das Verhalten tatsächlich ist. Ich kann nicht sagen, ob der Datenverkehr in iptables abgelehnt wird oder ob die Verbindung vielleicht akzeptiert und ohne Portänderung zum Ziel auf Port 8088 durchgereicht wird? Ich bin nicht sicher, wie ich überprüfen kann, ob die Portumleitung tatsächlich durchgeführt wird. Hier sind die Regeln für diesen Versuch:

iptables -N Whitelist
iptables -Eine Whitelist -s <whatsmyip.org> -j RETURN
iptables -Eine Whitelist -j ABLEHNEN
iptables -A INPUT -i eth0 -p tcp --dport 8088 -j Whitelist
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A
iptables -t nat -A AUSGABE -p tcp --dport 8088 -j UMLEITEN --zu-Ports 80

Aktueller Status Ungelöst. Ich bin mir nicht sicher, ob ich versuchen sollte, einen anderen Weg zu finden, den Port nach der Whitelist umzuleiten, oder ob es eine einfache Möglichkeit gibt, herauszufinden, wo die aktuelle Lösung fehlschlägt (wird die Weiterleitung über 8088 ohne die 80-Umleitung durchgeführt oder wird sie einfach blockiert?)

Antwort1

Ändern

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80

um zu einer benutzerdefinierten Kette zu springen, die Ihre ACLs implementiert. Beispiel:

iptables -t nat -N foo
iptables -t nat -A foo --source 192.168.0.0/24 -j RETURN
iptables -t nat -A foo -j REJECT

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j foo

Bearbeiten:

iptables -N foo
iptables -A foo --source 192.168.0.0/24 -j RETURN
iptables -A foo -j REJECT
iptables -A INPUT -i eth0 -p tcp --dport 8088 -j foo

Sie gestalten Ihre Paketfilterung so, dass Ihr durchgeführtes NAT völlig ignoriert wird.

verwandte Informationen