web-dev-qa-db-ja.com

ssh接続をサーバーにポートフォワードするようにiptablesを構成する

私は次のようなネットワークトポロジを持っています:

インターネット--------------------ファイアウォール-------------------------サーバー

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://www.digitalocean.com/community/tutorials/how-to-forward-ports-through-a-linux-gateway-with-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がそれと関係があると思います。

私の質問は私が見落としているものですか?それはおそらく私がこれまでずっと見逃していたものであり、私を正面から見つめています。どうぞよろしくお願いいたします。

1
MacGenius

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.1192.168.1.2のデフォルトゲートウェイである場合は、どちらも使用する必要はありません。

1
Tom Yan