今さらながら「nmap」を確認
nmapを使う機会は多数あったが、実際のパケットをまともに見たことがなかったので、動作とともに確認する。
対象
nmapにはあまりに多数のオプションがあるので、ここでは、次の3つをターゲットとした。
- -sS:TCP Synスキャン
- -sT:TCP Connectスキャン
- -sN:TCP Nullスキャン
これらの説明については、次のサイトがわかりやすいと感じる。
上記オプションの結果とTCPフラグの受信内容をまとめると下記のとおり。
結果 | open | closed | filtered |
---|---|---|---|
-sS | SYN-ACK受信 | RST受信 | 受信なし |
-sT | SYN-ACK受信 | RST受信 | 受信なし |
-sN | 受信なし | RST受信 | 受信なし |
- 「-sS」と「-sT」のnmapの結果としては同じであるが、後者ではTCPセッション確立という点で違いがある。
- 受信しなくても、「closed」の可能性は0ではない。
テスト環境
GNS3上のルーターにVMである、LubuntuとBusterdogとが存在し、Busterdog上にListenしているTCPポートがあり、Lubuntu上でnmapを実行する。また、Routerのアクセスコントールにより、特定のTCPポートをブロックすることも実施。
Listen側(Busterdog)設定
今回は、iperfを用いて、TCP Listenの状態を設けた。
# iperf -s -p 1001 &
# iperf -s -p 1003 &
#
# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:1001 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1003 0.0.0.0:* LISTEN
ポート1001および1003で、Listenする。
検証
探索ポートを1001、1002、1003とした、nmap(Lubuntu)の実行結果を記す。
ルーターでのアクセスコントールなし
-sS
$ sudo nmap -sS -p 1001-1003 10.0.0.11
PORT STATE SERVICE
1001/tcp open webpush
1002/tcp closed windows-icfw
1003/tcp open unknown
このときのWiresharkの結果は下記となった。
Openしているポート1001および1003からは「Syn-Ack」が、Closeしているポート1002からは「RST」が返ってきている。nmapの結果は文字どおりのものとなっている。
-sT
$ sudo nmap -sT -p 1001-1003 10.0.0.11
PORT STATE SERVICE
1001/tcp open webpush
1002/tcp closed windows-icfw
1003/tcp open unknown
Wiresharkの結果は下記のとおり。
基本的に「-sS」のときと同じであるが、「Syn-Ack」に対して「Ack」を返し、TCPセッションを確立させている(その後「RST」送信)が異なる。
-sN
$ sudo nmap -sN -p 1001-1003 10.0.0.11
PORT STATE SERVICE
1001/tcp open|filtered webpush
1002/tcp closed windows-icfw
1003/tcp open|filtered unknown
Wiresharkの結果は下記のとおり。
TCPフラグを何もセットしていないパケットを送信していることがわかる。それに対して、クローズしているポート(1002)から「RST」が返されている。ポート1001および1003に対しては応答がないので、openしているかFirewallなどでブロックされているかわからないため、nmapの結果としては「open|filtered」となる。
ルーターでのアクセスコントールあり
ルーターに、nmapからのポート1003アクセスブロックを設定。
interface FastEthernet0/0
ip address 192.168.0.1 255.255.255.0
ip access-group 101 in
access-list 101 deny tcp any any eq 1003
access-list 101 permit ip any any
-sS
$ sudo nmap -sS -p 1001-1003 10.0.0.11
PORT STATE SERVICE
1001/tcp open webpush
1002/tcp closed windows-icfw
1003/tcp filtered unknown
Wiresharkの結果は下記のとおり。
ポート1003の通信がブロックされ、ICMP Destination unreachableが返ってきており、nmapの結果が「filtered」となっている。
-sT
$ sudo nmap -sT -p 1001-1003 10.0.0.11
PORT STATE SERVICE
1001/tcp open webpush
1002/tcp closed windows-icfw
1003/tcp filtered unknown
「-sS」とほぼ同じのため、説明略。
-sN
undeux3@vamos:~$ sudo nmap -sN -p 1001-1003 10.0.0.11
PORT STATE SERVICE
1001/tcp open|filtered webpush
1002/tcp closed windows-icfw
1003/tcp filtered unknown
Wiresharkの結果は下記のとおり。
ポート1003の結果であるが、ICMP Destination unreachableを受けて、nmapの結果としては「filtered」となっている(と考えている)。
おわりに
OSやFirewallによる違いなどもあるだろうが、基本的なところはこんなところだろう。nmapには多数のオプションがあり、Wiresharkの結果と組み合わせて、結果を理解するのがベター。