
Ich bin auf einen neuen Webserver umgezogen und leite nun den gesamten Datenverkehr auf den neuen Server um mit
echo "1" > /proc/sys/net/ipv4/ip_forward
#clear old rules:
iptables -F
iptables -t nat -F
#masquerade and redirect everything:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -d 1.1.1.1 -j DNAT --to-destination 2.2.2.2
das funktioniert gut, bis alle DNS-Einträge verteilt sind. Aber jetzt kann ich mich nicht mehr in die alte Maschine einloggen.
Wie kann ich einen SSH-Port auf dem alten Server 1.1.1.1 offen halten?
Antwort1
In iptables gewinnt die erste passende Regel. Daher ist die richtige Reihenfolge der Regeln wichtig.
In diesem Fall muss die Regel, die bestimmt, was mit dem Verkehr auf Port 22 geschehen soll,Vordie Regel, die besagt, was mit „allem anderen“ zu tun ist. Und obwohl RETURN funktionieren würde, wenn die Richtlinie der Kette gegenüber der Standardeinstellung unverändert bleibt, wäre es vielleicht klarer, explizit zu sein und einfach ACCEPT als Synonym für „einfach wie gewohnt verarbeiten“ zu verwenden:
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -m tcp -p tcp --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -d 1.1.1.1 -j DNAT --to-destination 2.2.2.2