いくつかのNmapポートスキャンでDebianサーバーをテストしています。私の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:Port unreachableエラーで応答します。
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:Port unreachableエラーで応答するのはなぜですか?これはセキュリティの問題ですか?
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 )
一部のサービスは実際にTCPおよびUDPポートに同時に応答します。DNSおよびNTPサービスの場合と同様ですが、必ずしもそうではありません通常はデフォルトでポート80/TCPにのみ応答するWebサーバーを使用(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は3ウェイハンドシェイクを使用します。クライアントがサーバーとの接続を試みる前に、サーバーはまずポートにバインドしてリッスンして、接続用に開く必要があります。これはパッシブオープンと呼ばれます。パッシブオープンが確立されると、クライアントはアクティブオープンを開始できます。接続を確立するには、3ウェイ(または3ステップ)ハンドシェイクが発生します。
SYN:アクティブなオープンは、サーバーにSYNを送信するクライアントによって実行されます。クライアントは、セグメントのシーケンス番号をランダムな値Aに設定します。SYN-ACK:サーバーはSYN-ACKで応答します。
ただし、サービスがそこで実行されていない場合、TCP/IPは、カーネルがICMPメッセージをUDPサービスの「ポート到達不能」メッセージとともに送信することを定義し、TCP RSTメッセージTCPサービス。
到達不能な宛先は、ホストまたはそのインバウンドゲートウェイ[3]によって生成され、何らかの理由で宛先に到達できないことをクライアントに通知します。 Destination Unreachableメッセージは、TCP、UDP、または別のICMP送信の結果として生成される場合があります。 Unreachable TCPポートは、予期したとおり、特に、Destination Unreachableタイプ3ではなく、TCP RSTで応答します。
そのため、実際には、ポート80/UDPへのUDPスキャンは、その組み合わせまたはプロトコル/ポートをリッスンしているサービスがないため、単にICMP到達不能メッセージを受信します。
セキュリティに関する考慮事項として、デフォルトですべてのメッセージを削除するファイアウォール/ iptablesルールを定義し、マシンが外部に提供するポートでのみ許可する場合、それらのICMP宛先到達不能メッセージは確実にブロックされます。これにより、特にネットワークで開いているすべてのポートに対してnmapスキャンが遅くなり、サーバーが使用するリソースが少なくなります。
追加の利点として、デーモン/サービスが追加のポートを開くか、新しいサービスが誤って追加された場合、新しいファイアウォールルールで明示的に許可されるまで、サービスはリクエストを処理しません。
IptablesでDROPを使用する代わりにREJECTルールを使用する場合、カーネルはスキャン/ TCP/IPネゴシエーションの試行を無視せず、宛先に到達できない、コード13のICMPメッセージで応答することに注意してください。 (管理フィルタリングにより、パケットが転送されなくなります)」。
TCP/80とUDP/80は2つの異なるプロトコルです(/etc/protocols
)たまたま同じポート番号を共有しています。 TCP/80は開いており、UDPにはICMP応答を生成する他のルールがあります。