
Ich muss eine Übung in iptables
einem Netzwerk (Docker-Container) absolvieren, das wie folgt konfiguriert ist:
- Ein
router
Host mit 2 Netzwerkschnittstellen (eth0 <- public 10.9.0.0/24
;eth1 <- lan 192.168.60.0/24
; dasrouter
ist derx.x.x.254
in beiden Netzwerken) und einem SSH-Server auf Standardport 22; - Ein
jumpbox
Hostlan
mit IP192.168.60.10
, mit SSH und TELNET auf den Standardports 22 und 23; - Ein
admin
Hostpublic
mit IP10.9.0.2
.
Eine der an uns gestellten Anfragen ist die Weiterleitung/Maskierung der SSH- (auf Port 2222) und TELNET-Dienste des jumbox
Hosts über den router
an den admin
Host.
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