IP-abhängige lokale Portweiterleitung unter Linux

IP-abhängige lokale Portweiterleitung unter Linux

Ich habe das SSHD meines Servers so konfiguriert, dass es auf einem nicht standardmäßigen Port 42 lauscht.

Bei der Arbeit befinde ich mich jedoch hinter einer Firewall/einem Proxy, die/der nur ausgehende Verbindungen zu den Ports 21, 22, 80 und 443 zulässt. Daher kann ich von der Arbeit aus keine SSH-Verbindung zu meinem Server herstellen, was schlecht ist. Ich möchte SSHD nicht auf Port 22 zurückführen.

Die Idee ist folgende: Auf meinem Server lokal Port 22 an Port 42 weiterleitenWennDie Quell-IP stimmt mit der externen IP meines Arbeitsnetzwerks überein. Zur Verdeutlichung nehmen wir an, dass die IP meines Servers 169.1.1.1 (auf eth1) und meine externe Arbeits-IP 169.250.250.250 ist. Für alle IPs, die von 169.250.250.250 abweichen, sollte mein Server mit der erwarteten „Verbindung abgelehnt“ antworten, wie dies bei einem nicht lauschenden Port der Fall ist.

Ich bin ein Neuling bei iptables. Ich habe mir das ausführliche iptables-Handbuch und diese damit zusammenhängenden/relevanten Fragen kurz angesehen:

Diese Fragen beziehen sich jedoch auf kompliziertere Szenarien mit mehreren Hosts, und mir ist nicht klar, welche Tabellen und Ketten ich für die lokale Portweiterleitung verwenden soll und ob ich zwei Regeln (für „Frage“- und „Antwort“-Pakete) oder nur eine Regel für „Frage“-Pakete haben soll.

Bisher habe ich nur die Weiterleitung über sysctl aktiviert. Ich werde morgen mit dem Testen von Lösungen beginnen und freue mich über Hinweise oder vielleicht fallspezifische Beispiele zur Implementierung meines einfachen Szenarios.

Ist der folgende Lösungsentwurf richtig?

iptables -A INPUT [-m state] [-i eth1] --source 169.250.250.250 -p tcp
    --destination 169.1.1.1:42 --dport 22 --state NEW,ESTABLISHED,RELATED
    -j ACCEPT

Soll ich die mangleTabelle statt verwenden filter? Und/oder FORWARDdie Kette statt INPUT?

Antwort1

Um Dinge weiterzuleiten/umzuleiten, müssen Sie die NAT-Tabelle bearbeiten.

Eine Regel wie diese kommt Ihrem Bedarf wahrscheinlich am nächsten.

/sbin/iptables --table nat --append PREROUTING --protocol tcp \
               --source 169.250.250.250 --dport 22 \
               --jump REDIRECT --to-ports 42

Es wäre viel einfacher und wahrscheinlich besser, SSH einfach auf dem Standardport zu belassen und diesen richtig abzusichern. Die Verwendung eines alternativen Ports würde einen motivierten Angreifer nur für ein paar Sekunden verlangsamen. Richten Sie ein Intrusion Prevention System wie denyhosts/fail2ban ein und deaktivieren Sie die kennwortbasierte Authentifizierung. Oder ziehen Sie eine Ratenbegrenzung für eingehende SSH-Verbindungen in Betracht.

Sehen:

Antwort2

Ich würde Shorewall zur Verwaltung von IP-Tabellen verwenden. Es richtet eine anständige Basis-Firewall ein und es ist ganz einfach, die gewünschten Dinge zu tun. Fügen Sie eine Regel zu /etc/shorewall/rules hinzu wie:

DNAT-Netz:169.250.250.250 Ort:169.250.250.250 TCP 42 22

Wie die anderen bin ich mir nicht sicher, warum Sie SSHD auf einem anderen Port ausführen. Wenn es sich um einen Internet-Port handelt, sollten Sie sich Port-Knocking ansehen, um den Port geschlossen zu halten, bis Sie zuerst einen anderen Port erreichen. Shorewall handhabt dies ganz einfach.

verwandte Informationen