私は次のようなネットワークトポロジを持っています:
インターネット--------------------ファイアウォール-------------------------サーバー
0.0.0.0/0-----172.8.45.140&192.168.1.1-----192.168.1.2
Iptablesを使用してファイアウォールを構成し、リモートクライアント(インターネット上)からサーバー(192.168.1.2上)に着信ssh接続をポート転送する必要があります。基本的に、クライアントでssh [email protected]
を実行して、192.168.1.2上のサーバーにリモート接続します。
ファイアウォールには、通信する2つのNICがあります。
172.8.45.140(パブリック)はインターフェースens33にあります
192.168.1.1(プライベート)はインターフェースens37にあります
サーバーのプライベートIPは192.168.1.2で、デフォルトの22ではなくSSH用の54045のポートを使用するように構成されています。
ファイアウォールのIptablesは、チェーンINPUTとFORWARDの両方がポリシーDROPに変更されるように構成されていますが、チェーンOUTPUTには引き続きデフォルトのポリシーACCEPTがあります。
Chain INPUT (policy DROP)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Webリクエストをファイアウォールの背後にあるWebサーバーにポートフォワードする方法を詳しく説明しているガイドをオンラインでいくつか見ました。以下を参照してください。
https://www.systutorials.com/port-forwarding-using-iptables/
https://wikileaks.org/ciav7p1/cms/page_16384684.html
これらのチュートリアルに従って、/ etc/sysctl.confファイルを介してファイアウォールでポート転送を有効にし、次のルールを試しました。
1回目の試行
INPUTおよびFORWARDポリシーDROP、OUTPUTポリシーACCEPT。
Sudo iptables -A PREROUTING -t nat -i ens33 -p tcp --dport 22 -j DNAT --to 192.168.1.2:54045
Sudo iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 54045 -j ACCEPT
結果:SSH操作がタイムアウトしました。また、疲れたINPUTおよびFORWARDポリシーACCEPTは、まだ操作がタイムアウトしました。
2回目の試行
INPUTおよびFORWARDポリシーDROP、OUTPUTポリシーACCEPT。
Sudo iptables -A FORWARD -i ens33 -o ens37 -p tcp --syn --dport 22 -m conntrack --ctstate NEW -j ACCEPT
Sudo iptables -A FORWARD -i ens33 -o ens37 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Sudo iptables -A FORWARD -i ens37 -o ens33 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Sudo iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 54045 -j DNAT --to-destination 192.168.1.2
Sudo iptables -t nat -A POSTROUTING -o ens37 -p tcp -d 192.168.1.2 -j SNAT --to-source 192.168.1.1
結果:SSH操作がタイムアウトしました。また、疲れたINPUTおよびFORWARDポリシーのACCEPT接続が拒否されました。
3回目の試行
INPUT、FORWARD、およびOUTPUTポリシーは受け入れます。
Sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination 192.168.1.2:54045
Sudo iptables -t nat -A POSTROUTING -j MASQUERADE
結果:これは機能しましたが、チェーンFORWARDがACCEPTに関するポリシーを持っていた場合に限りました。ファイアウォールを介して接続したのはこれだけです。チェーンFORWARDをDROPに変更すると、SSH接続が再びタイムアウトしました。
私の推測では、それはマスカレードされているか、FORWARDポリシーDROPがそれと関係があると思います。
私の質問は私が見落としているものですか?それはおそらく私がこれまでずっと見逃していたものであり、私を正面から見つめています。どうぞよろしくお願いいたします。
2回目の試行でルールに依存しているとすると、--dport 22
は間違っています。 DNAT/PREROUTINGチェーンを離れた後、代わりに、FORWARDチェーンの実際の/新しい宛先ポート(54045
)へのトラフィックを許可する必要があります。
P.S. -j MASQUERADE
と-o ens37 -j SNAT --to-source 192.168.1.1
はどちらも正常に機能するはずであり、ファイアウォールに静的IPがある場合は後者が推奨されます。また、192.168.1.1
が192.168.1.2
のデフォルトゲートウェイである場合は、どちらも使用する必要はありません。