iptables-Regeln - Forward/Masquerade-Dienste mit NAT-Tabelle

iptables-Regeln - Forward/Masquerade-Dienste mit NAT-Tabelle

Ich muss eine Übung in iptableseinem Netzwerk (Docker-Container) absolvieren, das wie folgt konfiguriert ist:

  1. Ein routerHost mit 2 Netzwerkschnittstellen ( eth0 <- public 10.9.0.0/24; eth1 <- lan 192.168.60.0/24; das routerist der x.x.x.254in beiden Netzwerken) und einem SSH-Server auf Standardport 22;
  2. Ein jumpboxHost lanmit IP 192.168.60.10, mit SSH und TELNET auf den Standardports 22 und 23;
  3. Ein adminHost publicmit IP 10.9.0.2.

Eine der an uns gestellten Anfragen ist die Weiterleitung/Maskierung der SSH- (auf Port 2222) und TELNET-Dienste des jumboxHosts über den routeran den adminHost.
Das Problem ist, dass ich diese Ports nicht umleiten kann, die Verbindung bleibt dauerhaft in der Warteschleife (ich denke, weil die Rückpakete nicht richtig konfiguriert sind).
Derzeit sieht meine Konfiguration wie folgt aus (siehe ADMIN'S RULES):

#!/bin/bash

# Reset IPv4 rules
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# Set default policies for chains
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Allow loopback traffic
iptables -A INPUT -i lo -j ACCEPT

# Allow traffic for ongoing connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


# ====================== #
#  NAT INTERNAL NETWORK  #
# ====================== #

# Masquerade internal network hosts
iptables -t nat -A POSTROUTING -s 192.168.60.0/24 -o eth0 -j MASQUERADE

# Forward internal network requests to external network
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT


# =============== #
#  ADMIN'S RULES  #
# =============== #

# Allow 'admin' connection to 'jumpbox' SSH (on 2222 port)
iptables -t nat -A POSTROUTING -s 192.168.60.10 -p tcp --sport 22   -j SNAT --to 10.9.0.254:2222
iptables -t nat -A PREROUTING  -s 10.9.0.2      -p tcp --dport 2222 -j DNAT --to 192.168.60.10:22
iptables        -A FORWARD     -s 10.9.0.2      -p tcp --dport 22   -j ACCEPT

# Allow 'admin' connection to 'jumpbox' TELNET
iptables -t nat -A POSTROUTING -s 192.168.60.10 -p tcp --sport 23 -j SNAT --to 10.9.0.254
iptables -t nat -A PREROUTING  -s 10.9.0.2      -p tcp --dport 23 -j DNAT --to 192.168.60.10
iptables        -A FORWARD     -s 10.9.0.2      -p tcp --dport 23 -j ACCEPT

Kann mir bitte jemand den Weg zur Lösung weisen?
Vielen Dank im Voraus.


BEARBEITEN:

Nach mehreren Versuchen ist mir mein Vorhaben mit diesen Befehlen gelungen:

# Allow 'admin' connection to 'jumpbox' SSH (on 2222 port)
iptables -t nat -A PREROUTING  -s 10.9.0.2 -d 10.9.0.254    -p tcp --dport 2222 -j DNAT   --to 192.168.60.10:22
iptables        -A FORWARD     -s 10.9.0.2 -d 192.168.60.10 -p tcp --dport 22   -j ACCEPT
iptables -t nat -A POSTROUTING             -d 192.168.60.10 -p tcp --dport 22   -j SNAT   --to 192.168.60.254

# Allow 'admin' connection to 'jumpbox' TELNET
iptables -t nat -A PREROUTING  -s 10.9.0.2 -d 10.9.0.254    -p tcp --dport 23 -j DNAT   --to 192.168.60.10
iptables        -A FORWARD     -s 10.9.0.2 -d 192.168.60.10 -p tcp --dport 23 -j ACCEPT
iptables -t nat -A POSTROUTING             -d 192.168.60.10 -p tcp --dport 23 -j SNAT   --to 192.168.60.254

Wenn ich nun versuche, eine Verbindung über die interne IP herzustellen, tritt folgendes Problem auf:

$ telnet 192.168.60.10 23  # or
$ ssh -p2222 192.168.60.10

Ich kann das, aberIch muss dieses Verhalten blockieren.

Antwort1

Mit folgenden Regeln konnte ich mein Ziel erreichen:

# ...

# Allow 'admin' connection to 'jumpbox' SSH (on 2222 port)
iptables -t nat -A PREROUTING  -s 10.9.0.2 -d 10.9.0.254                                -p tcp --dport 2222 -j DNAT   --to 192.168.60.10:22
iptables        -A FORWARD     -s 10.9.0.2 -d 192.168.60.10 -m conntrack --ctstate DNAT -p tcp --dport 22   -j ACCEPT
iptables -t nat -A POSTROUTING             -d 192.168.60.10                             -p tcp --dport 22   -j SNAT   --to 192.168.60.254

# Allow 'admin' connection to 'jumpbox' TELNET
iptables -t nat -A PREROUTING  -s 10.9.0.2 -d 10.9.0.254                                -p tcp --dport 23 -j DNAT   --to 192.168.60.10
iptables        -A FORWARD     -s 10.9.0.2 -d 192.168.60.10 -m conntrack --ctstate DNAT -p tcp --dport 23 -j ACCEPT
iptables -t nat -A POSTROUTING             -d 192.168.60.10                             -p tcp --dport 23 -j SNAT   --to 192.168.60.254

verwandte Informationen