これらのファイアウォール ルールでは SSH を使用できないのはなぜですか?

これらのファイアウォール ルールでは SSH を使用できないのはなぜですか?

現在、Windows 10 ホスト上の SSH 経由で Linux Mint ゲストに接続しようとしています。もっと正確に言うと、特定のファイアウォール ルールを念頭に置いて、ゲストに正常に接続しようとしています。

Virtual Box を使用して、Linux Mint 仮想マシンのホスト専用アダプターを有効にしました。

特定の「すべて許可」ルールを使用してファイアウォール経由でポート 22 を通過するすべてのトラフィックを許可すると、Windows ホストから SSH を使用してゲスト マシンに正常に接続できるようになります。

しかし、Linuxゲストではのみ受け入れる私のSSH の IP。言い換えれば、ポート 22 の IP のみを受け入れるようにしたいのです (意味が通じるなら)。

私はこれらのルールでLinuxファイアウォールを設定し、できなかった接続に成功した後:

GUEST IP 22/tcp ALLOW IN HOST IP 22/tcp

HOST IP 22/tcp ALLOW OUT GUEST IP 22/tcp

注: 「GUEST IP」および「HOST IP」という用語は、コンテキストに応じて関連付けられる IP アドレスの単純なプレースホルダーです。この場合、GUEST IP は、eth1 インターフェイスからのホスト専用アダプターの IP アドレスです。言うまでもなく、HOST IP は、Windows 10 ホストで見つかったホスト IP アドレスを表します。

うまく機能するようにできる限りのことをしましたが、正直なところ、現時点では自分が求めているものをどのように実現すればよいのかわかりません。

現在の設定:

  • Windows 10 (ホスト)、MobaXtrem SSH クライアントおよび FreeSSHd SSH サーバー
  • Linux Mint 17 (ゲスト)、openSSH クライアントとサーバー付き
  • Windowsファイアウォールには全く触れなかった
  • 現在Linuxファイアウォールはドロップするように設定されていますが、前述のルールが追加されました

Linux/Unixベースのシステムに関する私の経験は、とてもシェル、SSH の使用、ファイアウォールの設定などに制限があります。

文字通り、1日前に上記の SSH ソフトウェアをインストールしました。

要約:Linux ゲストがホスト コンピューターからの SSH トラフィックのみを受け入れるように設定したいと考えています。これは IP 経由で行われるものと想定していますが、その方法がわかりません。上記のファイアウォール ルールを Linux ゲストに追加した後、接続が成功しなくなり、すべての試行がタイムアウトになりました。

追加情報: - この辺りではポート転送について言及している人を見かけました。試してみましたが、うまくいきませんでした。ホストのみのアダプタで動作させることができたので、その解決策がなくても問題ないと思いました。

余談としてSSH を使用して Linux ゲスト経由で Wi​​ndows ホストに接続することは可能ですか? Linux ターミナルから実行しようとしましたが、権限がないというメッセージが表示され続けました。

ご不明な点や追加情報が必要な場合は、お気軽にお問い合わせください。

前もって感謝します!

— TRG

答え1

TCP接続には送信元と送信先の2つのポートがあります。送信SSH接続の場合、送信先ポートは22ですが、送信元ポートはランダムに選ばれた(BGP など、同一の送信元ポートと宛先ポートを使用するプロトコルはごくわずかです。)

したがって、次の点について規則を緩和する必要があります。

allow incoming from hostIP (any)/tcp to guestIP 22/tcp
allow outgoing from guestIP 22/tcp to hostIP (any)/tcp

もしあなたが心配ならゲストホストに再度接続する場合は、2番目のルールを削除できます。ステートフルファイアウォール(既存の接続に属する送信パケットを許可する)

iptables では、動作するルールセットは次のようになります。

-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j REJECT

# (Well, *I think* this should work.)
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -j REJECT

(「ICMPを許可する」が含まれているのは正直に

関連情報