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


29

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

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

OS:Linux / Windows

回答:


16

リモートマシンから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

これは、ファイアウォールがポートをブロックしているかどうかの質問を(まったく)解決しません。と思われるnc要求がファイアウォールを経由して、ICMP(またはポート上のサービスがあってもなくてもよいという意味でバウンスされたとき、「ネットワークが到達不能である」ポートがアクセス可能であるが、ないリスナーが存在しない、とするときレポート「接続が拒否しました」 )。ファイアウォールが実際にパケットを拒否する代わりにパケットをドロップするncと、しばらくの間ハングします。
goldilocks

最後のnetcatコマンドでの私の目標は、実行が成功した場合と失敗した場合の例を提供して、何らかの理由で不明な場合に結果を解釈できるようにすることでした。彼らの質問に答える部分は、最初の「マシン上」/「サーバー上」の部分です。
ブラッチリー

質問はSolaris 10に関するものでしたが、参考までに、v11にはレポジトリでnetcatが用意されています。
sleepyweasel

15

ファイアウォール、要求をブロックするときにICMPメッセージで応答する必要があります。ただし、必ずしもそうとは限りません(この素晴らしい記事に興味があります)。

外部からテストして、ファイアウォールを介してポートにアクセスできるかどうかを確認できます。アクセスできる場合は、ポートでリッスンしているかどうかを確認できます。以下に、tcp要求を含む3つの異なるシナリオを示します。これらのシナリオは、、wiresharkまたは他のパケットスニファーで確認でき、表示される内容は次のとおりです。

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

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

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

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

返信がないため、ツールはタイムアウトするか退屈するまで待機します。

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

TCP RST / ACKメッセージが返されます。TCPプロトコルにはこれが必要だと思います。つまり、ポートで何もリッスンしていない場合、OS自体がこの応答を送信します。ツールが報告するものだけに基づいてこれを#1と区別するのは難しいかもしれません、なぜならそれ両方のケースで同じことを言うかもしれないからです(しかし、おそらくこれを「接続拒否」と#1「ネットワーク到達不能」と区別するでしょう)。クライアントマシンのパケットスニファーで観察される、シナリオ#1(ICMP拒否メッセージ)と#3(TCP RST / ACKメッセージ)は明確に区別されます。

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

言い換えると、ネットワークが一般的に適切に機能していると仮定すると、#1または#2を受け取った場合、ファイアウォールがポートへのアクセスを積極的に妨げていることを意味します。サーバーが実行されていないがポートにアクセスできる場合は#3が発生し、もちろん(暗黙の)#4は正常に接続されています。


  1. 例えば、「ポート到達不能」、「ホスト禁止」、ホスト/ポート/管理者および到達不能/禁止のさまざまな組み合わせ。IPファイアウォールが機能していることを明示的に示しているため、メッセージでこれらを探してください。

4

このコマンド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は、追加の接続のために開いたままになります。


netstat構文はGNU固有であるという参考までに、これはSolarisでネイティブに機能する最も近いものです netstat -a -P tcp -f inet | awk '/LISTEN$/ {print $0}'
。– Bratchley

Solarisのモットーは、「これほど簡単なものはありません。
ブラチリー

1

ファイアウォール構成の構成とステータスは、ファイアウォール/ OS固有です。

あなたができることは、server2から試してみることです:

nmap server1

ご協力いただきありがとうございます。残念ながら、このコマンドはSolarisにはありません(またはインストールされていません)。「nmap:コマンドが見つかりません」という
メッセージが表示されます-yottabrain

@ user1734143おそらく「リポジトリ」または同等のSolarisにありますが、とにかくダウンロードして、ここ
RSFalcon7

@ user1734143は、OpenCSWを介して利用できます。おそらく、とにかくインストールする必要があり、管理エクスペリエンスが非常に簡単になります。
ブラッチリー

1

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

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

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


0

www.firewallruletest.comなどのオンラインツールを使用して、外部ホストがtcp接続を確立できるかどうかを確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.