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

iptables leiten lokale Verbindungen zum entfernten System/Port um

Ich bin mir nicht ganz sicher, ob ich das verstanden habe, aber ich glaube, du bist einfach in der falschen Kette. :-) Ich war auch verwirrt, als ich das erste Mal iptables benutzte. Aber der Weg nach vorwärts der Einheimische port ${LOCAL UNPRIV PORT} ist die folgende Anweisung:

$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport ${LOCAL UNPRIV PORT} 
     -j DNAT --to ${ANOTHER SYSTEM}:${REMOTE PORT}

Es ist eine Mischung aus einem semantischen Problem und der Funktionsweise von Netfilter:Früher erforderte die Weiterleitung eines lokalen Ports eine Verbindung zu der weiterleitenden Box plus eine zweite Verbindung zum Ziel. Iptables erledigt dies in einem Schritt. Anstelle von zwei Verbindungen leiten Sie also den Datenverkehr zu diesem Port direkt an das Ziel weiter. Netfilter führt alle Plausibilitätsprüfungen und Buchhaltungen durch:Nur Pakete, die zu einer gültigen Verbindung gehören, werden NATted und können daher weitergeleitet werden.

Das Aktivieren von DNAT erlaubt keine Weiterleitung von Paketen. Sie müssen auch eine Regel hinzufügen:

$IPT -N INET-PRIV
$IPT -A FORWARD -i eth0 -o eth1 -j INET-PRIV
$IPT -A FORWARD -j DROP

$IPT -A INET-PRIV -p tcp -d ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j ACCEPT

$IPT -A INET-PRIV -j DROP

Und Sie müssen natürlich die Weiterleitung aktivieren.

echo "1" > /proc/sys/net/ipv4/ip_forward

Pro iptables :sicherer, flexibler, weniger Speicher- und CPU-Verbrauch pro Verbindung

Verhütungsmittel :Das Weiterleiten einer Verbindung von einer internen Maschine zu einer internen Maschine (Rückspeisung in eth0) macht mit iptables keinen Sinn (natürlich können Sie immer direkt eine Verbindung herstellen), das Weiterleiten von lokal generiertem Datenverkehr funktioniert nicht (ein port forwarding daemon könnte helfen - macht aber normalerweise keinen Sinn)

Genau das könnte das Problem sein :Sie versuchen, NAT auf einem Nicht-Router zu verwenden, also sollten Sie einen Weiterleitungs-Daemon verwenden oder diese zusätzliche Port-Weiterleitung vollständig überspringen und Folgendes tun:

ssh -L 1234:${ANOTHER SYSTEM}:${REMOTE PORT} special-vpn-box

Auf special-vpn-box können Sie nur eingehende Verbindungen vom Router und ausgehende Verbindungen zu ${ANOTHER SYSTEM}:${REMOTE PORT} mit iptables zulassen. Auf diese Weise können Benutzer der special-vpn-box nur auf ${ANOTHER SYSTEM}:${REMOTE PORT} zugreifen und nichts anderes tun, wenn ihnen nicht vertraut wird.


Folgendes mache ich speziell für die Localhost-Weiterleitung:

iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp --dport 3306 -j DNAT --to-destination ip.ip.ip.ip
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE

sysctl -w net.ipv4.conf.all.route_localnet=1

Stellen Sie sicher, dass Sie ip.ip.ip.ip ersetzen für Ihre echte öffentliche IP und auch die --dport 3306 für den Port, den Sie weiterleiten möchten.

Führen Sie schließlich den Befehl sysctl aus und aktualisieren Sie auch Ihre /etc/sysctl.conf

Sie können sysctl.ctl aktualisieren um das Routing von localhost mit dem folgenden Befehl zuzulassen:

echo "net.ipv4.conf.all.route_localnet=1" >> /etc/sysctl.conf

Nun, das alles scheint einfach und gut zu sein, aber es bedurfte einiger Recherche und Jagd. Seien Sie gewarnt und verstehen Sie, dass die Weiterleitung von localhost/127.0.0.1 diese Methode erfordert und die typischen anderen Beispiele nicht funktionieren. Einige Beispiele für Lösungen, die mit localhost nicht funktionieren:

iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to ip.ip.ip.ip:3306
iptables -t nat -A POSTROUTING -d ip.ip.ip.ip -j MASQUERADE

http://realtechtalk.com/iptables_how_to_forward_localhost_port_to_remote_public_IP-1788-articles


# Enable IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A PREROUTING  -p tcp \
--dport ${LOCAL UNPRIV PORT} -j DNAT --to-destination ${ANOTHER SYSTEM}:${REMOTE PORT}

iptables -t nat -A POSTROUTING -p tcp \
--dst ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j SNAT --to-source ${LOCAL SYSTEM}

Linux
  1. Whitelist eine IP in CSF für entfernte MySQL-Verbindungen

  2. MongoDB unter Linux dazu bringen, auf Remote-Verbindungen zu lauschen

  3. So öffnen Sie einen Port unter Linux

  4. Alle eingehenden Verbindungen mit iptables ablehnen?

  5. FTP mit IPTables zulassen

SSHFS:Mounten eines Remote-Dateisystems über SSH

So überprüfen Sie, ob ein Port auf einem Remote-Linux-System geöffnet ist

Lsyncd – Lokale Verzeichnisse mit Remote-Linux synchronisieren

Leiten Sie die Konsole auf einen seriellen Anschluss um

REJECT vs. DROP bei Verwendung von iptables

Portweiterleitung unter Linux ohne iptables?