#
ドキュメント

Document

自分のための備忘録です。

ポートスキャン( Nmap を使用)

前提

Ubuntu20.04/18.04で確認。

関連

ネットワークコマンド

概要

nampsslsofの違いは以下のとおり。

  • nmapは開いているポートをすべて表示
  • ss -atunLISTENしているポートを表示
  • lsof -iは実際にプロセスが使用しているポートを表示

ref. https://www.linuxmaster.jp/linux_skill/2009/02/linux-4.html

簡単な例

$ nmap 127.0.0.1 -sS -Pn -p 80

Starting Nmap 7.92 ( https://nmap.org ) at 2022-06-16 08:51 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00052s latency).

PORT   STATE  SERVICE
80/tcp closed http

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

pオプションは1-10000というように範囲していできます。

$ nmap 127.0.0.1 -sS -Pn -p 1-10000

Nmap

  • pオプションでポートを指定しないときは代表的な2000のポートをスキャンします
  • sUオプションを指定するとTCPだけでなくUDPもスキャンします
  • 全ポートをスキャンしたいときは-p 1-65535を指定します
  • sSオプションはSYNスキャンのオプションです
  • Pnオプションは事前にpingを発行しないオプションです
    nmapはデフォルトでは事前にpingを発行して応答のある対象にのみスキャンを実施します

nmapを使用してexample.orgにSYNスキャン(sSオプション)を実行します。

$ dig +short example.org | xargs sudo nmap -Pn -sS
Starting Nmap 7.80 ( https://nmap.org ) at 2022-06-03 22:01 UTC
Stats: 0:00:04 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 28.55% done; ETC: 22:01 (0:00:10 remaining)
Nmap scan report for 93.184.216.34
Host is up (0.10s latency).
Not shown: 996 filtered ports
PORT     STATE  SERVICE
80/tcp   open   http
443/tcp  open   https
1119/tcp closed bnetgame
1935/tcp closed rtmp

同様にpオプションでポート443を指定してSYNスキャンを実行する。

# ポートを指定してSYNスキャン
$ dig +short example.org | xargs sudo nmap -Pn -sS -p 443
Starting Nmap 7.80 ( https://nmap.org ) at 2022-06-03 22:34 UTC
Nmap scan report for 93.184.216.34
Host is up (0.095s latency).

PORT    STATE SERVICE
443/tcp open  https

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

代表的なオプション

  • p:ポート指定
  • F:代表的な100ポート
  • O:OSを調べる
  • n:名前解決をしない
  • Pn:Pingをしない

スキャンの種類

  • sT:接続スキャン
  • sS:Synスキャン
  • sN:Nullスキャン
  • sF:Finスキャン
  • sX:Xmaxスキャン
  • sA:ACKスキャン
  • sI: Idleスキャン
  • sU:UDPスキャン

ポートは空いているがデーモンが稼働していない場合

仮にポートを許可していてもデーモンが起動していない場合はNmapのSTATclosed。 スリーウェイハンドシェイクができないので当然。

# AWSのセキュリティグループではTCP 80を許可
sudo nmap -Pn -n -p 80 -sT 127.0.0.1
Starting Nmap 7.80 ( https://nmap.org ) at 2022-06-04 02:17 UTC
Nmap scan report for 127.0.0.1
Host is up (0.00010s latency).

PORT   STATE  SERVICE
80/tcp closed http

Docker in EC2

セキュリティグループは以下を前提とする。

  • 22 TCP
  • ICMP (ICMPはTCPでもUDPでもなく独立したプロトコルなのでポート番号はない)
  • 8000 TCP
  • 80 TCP

httpd:latestを起動する。

$ sudo docker run -d -p 8000:80 --name httpd httpd
d0f36dfe2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ホストのIPアドレスを203.0.113.100と仮定する http://203.0.113.100:8000 でアクセスできる。

nmapでは以下のようになる。

  • 80closed
  • 8000open
sudo nmap -Pn -n -p 8000,80 -sT 127.0.0.1
Starting Nmap 7.80 ( https://nmap.org ) at 2022-06-04 02:44 UTC
Nmap scan report for 127.0.0.1
Host is up (0.00015s latency).

PORT     STATE  SERVICE
80/tcp   closed http
8000/tcp open   http-alt

fuser

Nampはポートが開いている場合に実際ポートを使用しているサービスを表示するとは限りません。 IANAを参照してSERVICEに表示することがあります。

実際に使用しているサービス/プロセスを調べるにはfuserを使用します。

fuser -v 9000/tcp