回答:
リモートマシンから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
ファイアウォールは、要求をブロックするときに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は正常に接続されています。
このコマンド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 -a -P tcp -f inet | awk '/LISTEN$/ {print $0}'
ファイアウォール構成の構成とステータスは、ファイアウォール/ OS固有です。
あなたができることは、server2から試してみることです:
nmap server1
nc
要求がファイアウォールを経由して、ICMP(またはポート上のサービスがあってもなくてもよいという意味でバウンスされたとき、「ネットワークが到達不能である」ポートがアクセス可能であるが、ないリスナーが存在しない、とするときレポート「接続が拒否しました」 )。ファイアウォールが実際にパケットを拒否する代わりにパケットをドロップするnc
と、しばらくの間ハングします。