新しいアプリケーションをサーバーにデプロイし、そのアプリケーションはポート 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 は接続が成功したことを意味します。
- 例えば、「ポートが到達不能」、「ホストが禁止」、その他さまざまな組み合わせホスト/ポート/管理者そしてアクセス不可/禁止; これらは 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 でポートが開いていないことを意味します。