iptables ルール - NAT テーブルを使用した転送/マスカレード サービス

iptables ルール - NAT テーブルを使用した転送/マスカレード サービス

iptables次のように構成されたネットワーク (Docker コンテナ) を使用して演習を完了する必要があります。

  1. router2 つのネットワーク インターフェイス ( eth0 <- public 10.9.0.0/24; eth1 <- lan 192.168.60.0/24; はrouter両方x.x.x.254のネットワーク上) と、デフォルト ポート 22 の SSH サーバーを備えたホスト。
  2. IP を持つjumpboxホスト、デフォルト ポート 22 および 23 で SSH および TELNET を使用。lan192.168.60.10
  3. IP をadmin持つホスト。public10.9.0.2

私たちになされた要求の 1 つは、ホストの SSH (ポート 2222) および TELNET サービスをjumbox経由でホストrouterに転送/マスカレードすることですadmin
問題は、これらのポートをリダイレクトできず、接続が永久に保留されたままになることです (返信パケットが正しく構成されていないためだと思います)。
現在、私の構成は次のとおりです ( を参照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

どなたか解決策を教えていただけませんか?
よろしくお願いします。


編集:

何度か試した後、次のコマンドで目的を達成できました。

# 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

ここで、内部 IP を使用して接続しようとすると、次のような問題が発生します。

$ telnet 192.168.60.10 23  # or
$ ssh -p2222 192.168.60.10

私はこれを行うことができますが、この行動をブロックする必要がある

答え1

私は以下のルールで目標を達成することができました:

# ...

# 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

関連情報