私は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の記録:
どうやってこれができますか?私のポート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は非接続プロトコルです。
(源泉: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で応答します。
ただし、サービスがそこで実行されていない場合、TCP / IP定義カーネルはUDPサービスに対して「ポートに接続できません」というメッセージを含むICMPメッセージを送信し、TCPサービスに対してTCP RSTメッセージを送信します。
接続できない宛先は、何らかの理由で宛先に接続できないことをクライアントに通知するために、ホストまたはそのインバウンドゲートウェイ[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」(管理的管理禁止)で応答します。フィルタリングするとパケットは転送されません。)
答え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