ファイアウォールでポートが開いているがリッスンしていないことを確認する方法

ファイアウォールでポートが開いているがリッスンしていないことを確認する方法

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

とにかく、ファイアウォールでポート8443が開いていることを確認できますか?

オペレーティングシステム: 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メッセージを再受信すると、リクエストツールはすぐに関連情報(「アクセス不可能、管理禁止」など)を通知します。 「ツール」とは、要求を送信するために使用するクライアント(私が使用したクライアントtelnet)を意味します。メッセージ1の詳細はファイアウォールの設定方法によって異なりますが、おそらく「ポートに接続できません」が最も一般的です。

「ホストへのパスなし」はこれを示すことがありますが、より微妙なルーティングの問題を示すこともあります。

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

応答がないため、ツールはタイムアウトまたは退屈するまで待ちます。

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

TCP RST/ACK メッセージを受信します。私の考えでは、TCPプロトコルにはこれが必要だと思います。つまり、ポートでリッスンしているエントリがない場合、オペレーティングシステム自体はこの応答を送信します。ツールが報告する内容だけでは、これを#1と区別するのが難しい場合があります。可能どちらの場合も同じことを言います(ただし、「接続が拒否されました」と#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アドレスの後のコロンの後の数字です(たとえば、ポート111の場合は0.0.0.0:111)。

IPアドレスの表示地元のそして海外住所地元のあなたのシステムになります外国のこれは、TCP ポートに接続されたアドレス、または接続された TCP ポートのいずれかです。

ポート22に関する限り、これは私のシステムで実行されているSSHデーモンです。聞く接続のため。誰かがデーモンに接続しようとするとすぐに、sshデーモンはTCPポート22を開いたままにして、自分のコピーを作成し、接続を別のポートにプッシュし、同時に他の接続が入るようにします。

答え4

最近私も同じ要求を受けてこのスレッドに来ました。出力を照会するのと同じように、ncコマンドを使用してファームウェアのオープンポートを取得できました。

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

デフォルトでは、「タイムアウト」が発生すると、ファームウェアのポートが開いていないことを意味します。

関連情報