SSHファイアウォールパススルー

SSHファイアウォールパススルー

こんにちは。私は Ubuntu サーバーを使用するプロジェクトに取り組んでおり、3 つの VM をセットアップしています。今のところ、ファイアウォール、ルーター、クライアント (1) です。現在は、PuTTY を使用してファイアウォールに SSH 接続し、次にルーターに SSH 接続し、最後にクライアントに SSH 接続してコードを記述してコンパイルすることができます。

私が知りたいのは、余分な SSH を使わずにクライアントに直接 SSH するにはどうすればよいかということです。

ありがとうkbot

編集:sudo iptables -t nat -v -x -n -Lファイアウォールからの出力:

Chain PREROUTING (policy ACCEPT 1217 packets, 108875 bytes)
pkts bytes target prot opt in out source destination

Chain INPUT (policy ACCEPT 2 packets, 136 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 11 packets, 783 bytes)
pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 6 packets, 406 bytes)
pkts bytes target prot opt in out source destination
35 2218 MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0

答え1

まず、ファイアウォールがすでにルーター機能を実装しているため、ファイアウォール サーバーとルーター サーバーを 1 つのサーバーに統合することをお勧めします。

ファイアウォールへの SSH 機能を維持しながら、外部からクライアントに直接 SSH する機能も追加するとします。この目的には別のポートを使用する必要があります。これは、iptables ルール セットが目的を決定する唯一の方法だからです。ここではポート 2222 を使用しますが、空いているポートはどれでも使用できます。

nat テーブルに PREROUTING ルールが必要になります。

sudo iptables -t nat -A PREROUTING -p tcp -i $EXTIF --dport 2222 -j DNAT --to $INTIP:22

ここで、$EXTIF は外部ネットワーク インターフェイス名です。eth0 だと思います。$INTIP は内部 IP アドレスです。

デフォルトのポリシーは DROP であるため、トラフィックが FORWARD チェーンを通過できるようにする必要があります。

sudo iptables -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 2222 -d $INTIP -m state --state NEW -j LOG --log-prefix "PFNEW2222:" --log-level info
sudo iptables -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 2222 -d $INTIP -m state --state NEW -j ACCEPT

ここで、$INTIF は内部ネットワーク インターフェイス名です。eth1 だと思います。

ログ記録ルールもあることに注意してください。単なる提案です。

帰り道は大丈夫でしょう

その他の提案:

デフォルトのポリシーは ACCEPT であるため、現在の OUTPUT チェーン ルールは必要ありません。

外部 IP アドレス (以下の $EXTIP) がわかっている場合は、MASQURADE の代わりに SNAT を使用します。

sudo iptables -t nat -A POSTROUTING -o $EXTIF -j SNAT --to $EXTIP

そうでない場合はOK

転送はすでに有効になっていると思います:

$ cat /proc/sys/net/ipv4/ip_forward
1

関連情報