ファイアウォールがポートを開いているが、ポートをリッスンしていないかどうかを確認する方法

ファイアウォールがポートを開いているが、ポートをリッスンしていないかどうかを確認する方法

新しいアプリケーションをサーバーにデプロイし、そのアプリケーションはポート 8443 でリッスンします。アプリケーションをデプロイする前に、ネットワーク チームにそのサーバーのポート 8443 のファイアウォールを開くように依頼しました。現在、サーバー上のその特定のポートでリッスンしているアプリケーションはありません。

ファイアウォールがポート8443に対して開いていることを確認する方法はありますか?

OS: Linux / Windows

答え1

リモート マシンから TCP 接続を形成できるかどうかを確認したい場合は、そのマシンとターゲット マシンに OpenCSW をインストールし、両方に netcat をインストールします。netcat を使用して TCP 接続をテストするための構文は次のとおりです。

nc -vz targetServer portNum

たとえば、「homeServer1」で SSH をチェックするには:

nc -vz homeserver1 22

これにより、リモート システムからの TCP レベルの接続をテストできます。Netcat は、クライアントとして動作するのではなく、ポートをリッスンするように構成することもできます。TCP/8443 をリッスンするには、次のようにします。

アプリケーションを格納するサーバー上:nc -l homeserver1 8443

ファイアウォールの外側にあるマシンの場合:nc -vz homeserver.fqdn 8443

これは成功した実行の例です。

[jadavis6@ditirlns01 ~]$ nc -vz ditirlns01.ncat.edu 8443
Connection to ditirlns01.ncat.edu 8443 port [tcp/pcsync-https] succeeded!

実行に失敗しました:

[jadavis6@ditirlns01 ~]$ nc -vz ditirlns01.ncat.edu 8443
nc: connect to ditirlns01.ncat.edu port 8443 (tcp) failed: Connection refused

答え2

ファイアウォールすべき返信するICMPメッセージリクエストをブロックする場合。ただし、必ずしもそうとは限りません(この素晴らしい記事)。

外部からテストして、ポートがファイアウォール経由でアクセスできるかどうか、またアクセスできる場合は、そのポートで何かがリッスンしているかどうかを確認することができます。 、wiresharkまたはその他のパケット スニファーを使用して観察できる TCP 要求に関する 3 つの異なるシナリオと、表示される内容を以下に示します。

1) ファイアウォールがリクエストを拒否する

ICMP メッセージが返され、リクエストを作成したツールは、この趣旨のメッセージ (「到達不能、管理者が禁止」など) をすぐに表示します。ここで言う「ツール」とは、リクエストの送信に使用しているクライアントを指します (私は を使用しました)。メッセージ1telnetの詳細は、ファイアウォールの設定方法によって異なりますが、「ポート到達不能」がおそらく最も一般的なメッセージです。

「ホストへのルートがありません」はこれを示している可能性がありますが、より微妙なルーティングの問題を示している可能性もあります。

2) ファイアウォールがパケットをドロップする

応答がないので、ツールはタイムアウトするか、ユーザーが飽きるまで待機します。

3) ファイアウォールはパケットを許可します (またはファイアウォールがありません) が、ポートでリッスンするものは何もありません。

TCP RST/ACKメッセージが返ってきます。TCPプロトコルではこれが必須だと思います。言い換えると、ポートで何もリッスンしていない場合は、OS自体がこの応答を送信します。ツールの報告だけでは、これを#1と区別するのは難しいかもしれません。5月どちらの場合も同じことを言います (ただし、ほとんどの場合、これを「接続拒否」と #1 の「ネットワークに到達できません」として区別します)。クライアント マシンのパケット スニファで観察すると、シナリオ #1 (ICMP 拒否メッセージ) と #3 (TCP RST/ACK メッセージ) は明らかに異なります。

ここでの唯一の他のオプションは、パケットがファイアウォールによって通過を許可され、何かがリッスンしているため、接続が成功することです。

言い換えると、ネットワークが全般的に正常に動作していると仮定すると、#1 または #2 が発生した場合は、ファイアウォールがポートへのアクセスを積極的にブロックしていることを意味します。#3 は、サーバーが稼働していないがポートにアクセスできる場合に発生し、もちろん (暗黙的に) #4 は接続が成功したことを意味します。


  1. 例えば、「ポートが到達不能」、「ホストが禁止」、その他さまざまな組み合わせホスト/ポート/管理者そしてアクセス不可/禁止; これらは IP ファイアウォールが動作していることを明示的に示すものなので、メッセージ内でこれらを探してください。

答え3

コマンドを使用してnetstat、ポートが開いていてリッスンしているかどうかを確認できます。

$ netstat -anp | less
Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:41716               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:17500               0.0.0.0:*                   LISTEN      3034/dropbox        
tcp        0      0 0.0.0.0:17501               0.0.0.0:*                   LISTEN      3033/dropbox        
tcp        0      0 127.0.0.1:2143              0.0.0.0:*                   LISTEN      3191/ssh                       
tcp        0      0 127.0.0.1:2025              0.0.0.0:*                   LISTEN      3191/ssh 

出力にはプロセスが表示されます(一番右の列)TCP ポートをリッスンしているポート番号は、IP アドレスの後のコロンの後に続く番号です (たとえば、0.0.0.0:111 はポート 111 になります)。

IPアドレスは地元そして海外の住所地元あなたのシステムになります外国あなたの TCP ポートに接続しているアドレス、またはあなたが相手の TCP ポートの 1 つに接続しているアドレスになります。

つまり、ポート22の場合、それは私のシステムで実行されているsshデーモンであり、聞いている接続用です。誰かがデーモンに接続しようとすると、sshデーモンは自身のコピーをフォークし、その接続を別のポートにプッシュし、TCP ポート 22 を開いたままにして、追加の接続が来るようにします。

答え4

最近、同じリクエストを受けて、このスレッドに来ました。nc コマンドを使用して、FW 上の開いているポートをスキャンできました。出力を照会すると次のようになります。

nc -v -w 1 -z -s *srcIP destIP port* 2>&1 | grep timed > /dev/null && echo closed || echo open

基本的に、「タイムアウト」になった場合、FW でポートが開いていないことを意味します。

関連情報