ICMP:ポートが開いていてもポートにアクセスできないエラー

ICMP:ポートが開いていてもポートにアクセスできないエラー

私はDebianサーバーをテストするためにいくつかのNmapポートスキャンを使用しています。私のDebianは、ブリッジ接続で実行される仮想マシンです。

TCP SYN要求を使用したクラシックポートスキャンは正常に機能し、ポート80が開いていることを検出します(正しい)。

nmap -p 80 192.168.1.166   

Starting Nmap 6.47 ( http://nmap.org ) at 2016-02-10 21:36 CET
Nmap scan report for 192.168.1.166
Host is up (0.00014s latency).
PORT   STATE SERVICE
80/tcp open  http
MAC Address: xx:xx:xx:xx:xx:xx (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 0.51 seconds

しかし、UDPポートスキャンを実行すると失敗し、私のDebianサーバーは次のように終了します。ICMP: ポートにアクセスできない間違い:

nmap -sU -p 80 192.168.1.166

Starting Nmap 6.47 ( http://nmap.org ) at 2016-02-10 21:39 CET
Nmap scan report for 192.168.1.166
Host is up (0.00030s latency).
PORT   STATE  SERVICE
80/udp closed http
MAC Address: xx:xx:xx:xx:xx:xx (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 0.52 seconds

Wiresharkの記録:

Wiresharkの記録


どうやってこれができますか?私のポート80が開いていますが、なぜDebianが応答するのですか?ICMP: ポートにアクセスできない間違い?これはセキュリティの問題ですか?

答え1

TCPとUDPはどちらもTCP / IPの一部ですが、どちらも同じTCP / IPまたはOSI層に属し、IP上の層ですが異なるプロトコルです。

http://www.cyberciti.biz/faq/key-differences-Between-tcp-and-udp-protocols/

TCP(トランスポート制御プロトコル)とUDP(ユーザーデータグラムプロトコル)は、インターネットプロトコルファミリの2つのコアプロトコルです。 TCPとUDPはどちらもトランスポート層TCP / IPモデルで機能し、用途が非常に異なります。 TCPは接続指向プロトコルです。 UDPは非接続プロトコルです。

TCP IPモデル
(源泉:ML-IP.com)

DNS サービスや NTP サービスなど、一部のサービスは TCP ポートと UDP ポートの両方に応答しますが、Web サーバーの場合はそうではありません。 Webサーバーは通常、デフォルトでポート80 / TCPにのみ応答します(そしてまったく機能しないか、受信しません)。 UDP)

次のコマンドを使用して、LinuxシステムのUDPリスニングポートを一覧表示できます。

$sudo netstat -anlpu
Active Internet connections (servers and established)  
Proto Recv-Q Send-Q Local Address           Foreign Address             State       PID/Program name  
udp        0      0 0.0.0.0:1900            0.0.0.0:*                           15760/minidlnad   
udp        0      0 0.0.0.0:5000            0.0.0.0:*                           32138/asterisk  
udp        0      0 0.0.0.0:4500            0.0.0.0:*                           1592/charon     
udp        0      0 0.0.0.0:4520            0.0.0.0:*                           32138/asterisk  
udp        0      0 0.0.0.0:5060            0.0.0.0:*                           32138/asterisk  
udp        0      0 0.0.0.0:4569            0.0.0.0:*                           32138/asterisk  
udp        0      0 0.0.0.0:500             0.0.0.0:*                           1592/charon     
udp        0      0 192.168.201.1:53        0.0.0.0:*                           30868/named     
udp        0      0 127.0.0.1:53            0.0.0.0:*                           30868/named     
udp        0      0 0.0.0.0:67              0.0.0.0:*                           2055/dhcpd      
udp        0      0 0.0.0.0:14403           0.0.0.0:*                           1041/dhclient   
udp    17920      0 0.0.0.0:68              0.0.0.0:*                           1592/charon     
udp        0      0 0.0.0.0:68              0.0.0.0:*                           1041/dhclient   
udp        0      0 0.0.0.0:56417           0.0.0.0:*                           2055/dhcpd      
udp        0      0 192.168.201.1:123       0.0.0.0:*                           1859/ntpd       
udp        0      0 127.0.0.1:123           0.0.0.0:*                           1859/ntpd       
udp        0      0 192.168.201.255:137     0.0.0.0:*                           1777/nmbd       
udp        0      0 192.168.201.1:137       0.0.0.0:*                           1777/nmbd       
udp        0      0 0.0.0.0:137             0.0.0.0:*                           1777/nmbd       
udp        0      0 192.168.201.255:138     0.0.0.0:*                           1777/nmbd       
udp        0      0 192.168.201.1:138       0.0.0.0:*                           1777/nmbd       
udp        0      0 0.0.0.0:138             0.0.0.0:*                           1777/nmbd       
udp        0      0 192.168.201.1:17566     0.0.0.0:*                           15760/minidlnad 

TCP ポートでリッスンするには、次のコマンドを使用します。

$sudo netstat -anlpt
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:5060            0.0.0.0:*               LISTEN      32138/asterisk  
tcp        0      0 192.168.201.1:8200      0.0.0.0:*               LISTEN      15760/minidlnad   
tcp        0      0 192.168.201.1:139       0.0.0.0:*               LISTEN      2092/smbd       
tcp        0      0 0.0.0.0:2000            0.0.0.0:*               LISTEN      32138/asterisk  
tcp        0      0 192.168.201.1:80        0.0.0.0:*               LISTEN      7781/nginx      
tcp        0      0 192.168.201.1:53        0.0.0.0:*               LISTEN      30868/named     
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      30868/named     
tcp        0      0 192.168.201.1:22        0.0.0.0:*               LISTEN      2023/sshd       
tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      1919/perl       
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      30868/named     
tcp        0      0 192.168.201.1:445       0.0.0.0:*               LISTEN      2092/smbd       
tcp        0    224 192.168.201.1:22        192.168.201.12:56820    ESTABLISHED 16523/sshd: rui [pr

通常、NMAPはスキャンされたポートにSYNを送信し、TCPプロトコルに従ってデーモン/サービスがそのポートにバインドされると、SYN + ACKで応答し、nmapはそのポートを開いたとマークします。

TCP / IP接続ネゴシエーション:3ウェイハンドシェイク

接続を確立するために、TCPは3方向ハンドシェイクを使用します。クライアントがサーバーに接続しようとする前に、サーバーは最初にポートをバインドしてリッスンして接続を開く必要があります。これを手動開放といいます。パッシブオープンを設定すると、クライアントはアクティブオープンを開始できます。接続を確立するには、3方向(またはステップ3)ハンドシェイクが必要です。

SYN:アクティブオープンは、クライアントがサーバーにSYNを送信する方法で行われます。クライアントは、データセグメントのシーケンス番号を任意の値Aに設定する。 SYN-ACK:これに応答して、サーバーはSYN-ACKで応答します。

3回の握手

ただし、サービスがそこで実行されていない場合、TCP / IP定義カーネルはUDPサービスに対して「ポートに接続できません」というメッセージを含むICMPメッセージを送信し、TCPサービスに対してTCP RSTメッセージを送信します。

ICMPターゲットに接続できない

接続できない宛先は、何らかの理由で宛先に接続できないことをクライアントに通知するために、ホストまたはそのインバウンドゲートウェイ[3]によって生成されます。 TCP、UDP、またはその他のICMP転送は、「宛先に接続できません」というメッセージを生成できます。接続できないTCPポートは、期待どおりに「接続できない宛先タイプ3」ではなく、TCP RSTで具体的に応答します。

したがって、実際にポート80 / UDPのUDPスキャンは、その組み合わせまたはプロトコル/ポートを受信するサービスがないため、ICMPに接続できないというメッセージを再受信します。

セキュリティ上の理由から、デフォルトですべてのメッセージを削除するファイアウォール/iptablesルールを定義し、コンピュータが外部から提供するポートのみを許可すると、これらのICMPターゲットに接続できないメッセージは確実にブロックされます。このように、nmapは開いているすべてのポート(特にネットワーク上)をより遅くスキャンし、サーバーはより少ないリソースを使用します。

追加の利点として、デーモン/サービスが追加のポートを開いたり、誤って新しいサービスを追加した場合、新しいファイアウォールルールが明示的に許可するまで要求は処理されません。

iptablesがDROPを使用せずに代わりにREJECTルールを使用する場合、カーネルはスキャン/TCP/IPネゴシエーションを無視せずにターゲットに接続できないICMPメッセージ、コード13:「Traffic Administrative Forbidden」(管理的管理禁止)で応答します。フィルタリングするとパケットは転送されません。)

ipchainsとiptablesでSSH / HTTPを除くすべてのポートをブロックする

答え2

TCP / 80とUDP / 80は2つの異なるプロトコルですが(参考文献を参照/etc/protocols)、同じポート番号を共有します。 TCP / 80には開いてICMP応答を生成できる他のUDPルールがあります。

答え3

Ubuntu 18.04のNFSサーバーでトラッキングネットワークトラフィックの問題を解決していますが、最新の5.4カーネルを使用してOverlayfsのエクスポートを許可します。

私はただ実行する必要があります:

rpc.mountd

ところで、NFSがTCPをサポートしていないというエラーが発生しました。何らかの理由でNFSサーバーを再起動すると問題が解決しました。

/etc/init.d/nfs-kernel-server restart

関連情報