CentOS-Portweiterleitung funktioniert nicht

7

Ich verwende CentOS 6.5 und habe meinen iptables die folgenden Befehle hinzugefügt, um den gesamten eingehenden Datenverkehr auf Port 8088 an 4569 weiterzuleiten:

iptables -A PREROUTING -t nat -p udp --dport 8088 -i eth0 -j DNAT --to-destination 127.0.0.1:4569
iptables -I FORWARD 1 -d 127.0.0.1 -p udp --dport 4569 -j ACCEPT

iptables --list zeigt die folgende Ausgabe:

iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     udp  --  anywhere             localhost.localdomain udp dpt:iax

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Wenn ich jedoch eine Paketverfolgung auf dem udp-Port 4569 durchführe, werden an diesem Port keine Pakete angezeigt. Dann habe ich folgendes hinzugefügt:

iptables -A PREROUTING -t nat -p udp --dport 8088 -i eth0 -j REDIRECT --to-ports 4569

Und mein iptable sieht so aus:

Table: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    DNAT       udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:8088 to:127.0.0.1:4569
2    REDIRECT   udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:8088 redir ports 4569

Aber immer noch kein Glück. Was mache ich falsch?

user3360140
quelle

Antworten:

7

Um Pakete an die Loopback-Schnittstelle umzuleiten, müssen Sie das REDIRECTZiel verwenden.

iptables -A PREROUTING -t nat -p udp --dport 8088 -i eth0 -j REDIRECT --to-ports 4569

Andernfalls ändern Sie die Zieladresse, bevor die Routing-Entscheidung getroffen wird 127.0.0.1. Dies bedeutet, dass es vom Kernel als Mars-Paket betrachtet und von Ihrer Reverse-Path-Filterrichtlinie verworfen wird.

Die beiden für dieses Verhalten verantwortlichen Kernelparameter sind:

  • net.ipv4.conf.eth0.route_localnet

route_localnet - BOOLEAN

Betrachten Sie Loopback-Adressen beim Routing nicht als Marsquelle oder -ziel. Dies ermöglicht die Verwendung von 127/8 für lokale Routingzwecke.

Standard FALSE

  • net.ipv4.conf.eth0.rp_filter

rp_filter - INTEGER

0 - Keine Quellenvalidierung.
1 - Strict-Modus wie in RFC3704 definiert. Strict Reverse Path Jedes eingehende Paket wird gegen die FIB getestet. Wenn die Schnittstelle nicht der beste Reverse Path ist, schlägt die Paketprüfung fehl. Standardmäßig werden fehlgeschlagene Pakete verworfen.
2 - Loose-Modus wie in RFC3704 Loose Reverse Path definiert Die Quelladresse jedes eingehenden Pakets wird auch anhand der FIB getestet. Wenn die Quelladresse über keine Schnittstelle erreichbar ist, schlägt die Paketprüfung fehl.

Derzeit wird in RFC3704 empfohlen, den strengen Modus zu aktivieren, um IP-Spoofing durch DDos-Angriffe zu verhindern. Wenn Sie asymmetrisches Routing oder ein anderes kompliziertes Routing verwenden, wird der lose Modus empfohlen.

Der Maximalwert von conf / {all, interface} / rp_filter wird verwendet, wenn die Quellvalidierung auf der {interface} durchgeführt wird.

Der Standardwert ist 0. Beachten Sie, dass einige Distributionen ihn in Startskripten aktivieren.

Da Sie dieses legitime Verhalten REDIRECTunbedingt beibehalten möchten, muss die Kette verwendet werden, um diese Bedingung für eine bestimmte Regel zu umgehen.

Xavier Lucas
quelle
Versucht, aber kein Glück. Bitte überprüfen Sie meine aktualisierte Frage.
user3360140
@ user3360140 Warum haben Sie die DNAT-Regel zugelassen? Es ist das einzige, das erreicht wurde, als Sie die REDIRECT-Regel danach angehängt haben ...
Xavier Lucas
-1

Möglicherweise müssen Sie die IP-Weiterleitung im Linux-Kernel aktivieren.

Überprüfen Sie zunächst den aktuellen Wert.

sysctl net.ipv4.ip_forward

Eine Null bedeutet, dass die IP-Weiterleitung deaktiviert ist. Dies ist die Standardeinstellung.

Aktivieren Sie die IP-Weiterleitung.

sysctl -w net.ipv4.ip_forward = 1

Jetzt erneut testen.

dmourati
quelle