不必要にポートを開放していると、そこからアタックを仕掛けられることがあります。
またSSHを22番などデフォルトのポートで開放している場合もターゲットにされやすいため、別のポート番号にしておくのも定石だったりもします(諸説ありますが個人的にはピンポンダッシュを防げるのでいつも変更しています)。
不特定多数がアクセスできる状態にあるサーバや端末は、少なともリリース前にはポートスキャンをかけておくのがおすすめです。
目次
nmapのインストール
macOSの場合はbrewで一発です。
$ brew install nmap
Linuxなどの場合はyumで一発です。
$ sudo yum install nmap
今回はmacOSで作業しますが使い方はどの環境でも同じです。v7.70が入りました。
$ nmap --version
Nmap version 7.70 ( https://nmap.org )
Platform: x86_64-apple-darwin17.3.0
Compiled with: liblua-5.3.3 openssl-1.0.2n nmap-libssh2-1.8.0 libz-1.2.11 nmap-libpcre-7.6 nmap-libpcap-1.7.3 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: kqueue poll select
nmapでポートスキャン
基本的なスキャン
nmapコマンドにIPアドレスやホスト名を指定することで、1,000個のTCPポートをスキャンしてくれます。
$ nmap localhost
以下、実行例です。
$ nmap localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-29 16:28 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00058s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 959 closed ports, 35 filtered ports
PORT STATE SERVICE
80/tcp open http
110/tcp open pop3
143/tcp open imap
631/tcp open ipp
993/tcp open imaps
995/tcp open pop3s
STATEの種類
STATE列はそれぞれ以下のような意味を持ちます。
STATE | 状態 |
---|---|
open | ポートが開いている |
closed | アクセス可能だがLISTENしているアプリケーションはいない |
filtered | パケットフィルタリングされており判別不可能 |
unfiltered | アクセス可能だがopenかclosedか判別不可能 |
open/filtered | ポートが開いているかパケットフィルタリングされているか判別不可能 |
closed/filtered | ポートが閉じているかパケットフィルタリングされているか判別不可能 |
nmapのオプション
-A : OSやバージョン情報を表示
-A
オプションでサーバの種類やOSなどを表示することができます。もちろん外部から取得できる物に限られます。以下の例ではWebサーバがApacheであることやそのバージョンなどを取得することができました。
$ nmap -A localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-29 16:53 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00064s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 966 closed ports, 28 filtered ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.33 ((Unix) PHP/7.1.23)
|_http-server-header: Apache/2.4.33 (Unix) PHP/7.1.23
|_http-title: Site doesn't have a title (text/html).
110/tcp open tcpwrapped
143/tcp open tcpwrapped
631/tcp open ipp CUPS 2.2
| http-methods:
|_ Potentially risky methods: PUT
| http-robots.txt: 1 disallowed entry
|_/
|_http-server-header: CUPS/2.2 IPP/2.1
|_http-title: Home - CUPS 2.2.5
993/tcp open imaps?
995/tcp open pop3s?
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 24.02 seconds
-p : ポート番号を指定する
-p
でポート番号を指定できます。これは単一のポート番号はもちろんですが、-p 1-1024
のように範囲を指定することもできます。
試しに全ポートをスキャンしたらlocalhostにも関わらず12分近くかかりましたw
$ nmap -p 1-65535 localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-29 17:01 JST
Strange read error from 127.0.0.1 (22 - 'Invalid argument')
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00032s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 65514 closed ports
PORT STATE SERVICE
80/tcp open http
110/tcp open pop3
143/tcp open imap
631/tcp open ipp
993/tcp open imaps
995/tcp open pop3s
5037/tcp open unknown
12080/tcp open unknown
12110/tcp open unknown
12143/tcp open unknown
12443/tcp open unknown
12993/tcp open unknown
12995/tcp open unknown
15292/tcp open unknown
15393/tcp open unknown
56814/tcp open unknown
56825/tcp open unknown
57889/tcp open unknown
60507/tcp filtered unknown
61403/tcp open unknown
65106/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 717.65 seconds
UDPポートを調べたい場合はnmap -p U53
、明示的にTCPを指定する場合はnmap -p T123
とします。
-sU : UDPポートをスキャン
-sU
オプションでUDPポートのスキャンができるのですが、一般ユーザーで実行するとroot権限が必要と怒られてしまうので、sudo
などで実行します。
$ nmap -sU localhost
You requested a scan type which requires root privileges.
QUITTING!
今度は動きました。
$ sudo nmap -sU localhost
Password:
Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-29 17:22 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000039s latency).
Other addresses for localhost (not scanned): ::1
All 1000 scanned ports on localhost (127.0.0.1) are closed (500) or open|filtered (500)
Nmap done: 1 IP address (1 host up) scanned in 3.50 seconds
-O : OSを検出する
-O
オプションで指定したホストのOSを調査します。
これも確実にわかるわけではないのですが、何らかのヒントがある場合はそれをもとに推察してくれます。
$ sudo nmap -O mi53.net
Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-29 17:25 JST
Nmap scan report for mi53.net (13.112.155.59)
Host is up (0.011s latency).
rDNS record for 13.112.155.59: ec2-13-112-155-59.ap-northeast-1.compute.amazonaws.com
Not shown: 997 filtered ports
PORT STATE SERVICE
53/tcp open domain
80/tcp open http
443/tcp closed https
Aggressive OS guesses: Linux 2.6.9-55.0.2.EL (Red Hat Enterprise Linux) (89%), Linux 2.6.17 (Mandriva) (87%), Linux 2.6.18 (CentOS 5.2) (87%), Linux 2.6.18 - 2.6.32 (87%), Linux 2.6.18 (Centos 5.3) (87%), Linux 2.6.8 (Debian 3.1) (87%), Linux 2.6.18 (86%), Linux 4.3 (86%), Linux 2.6.9-022stab078.19-enterprise (CentOS 4.2 x86) (86%), Riverbed Steelhead Mobile Controller 4.0.3 (86%)
No exact OS matches for host (test conditions non-ideal).
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 9.62 seconds
回答は以下の通り。
$ uname -a
Linux ip-XXX-XXX-XXX-XXX 4.14.106-79.86.amzn1.x86_64 #1 SMP Tue Mar 19 00:48:07 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2018.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2018.03"
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
参考ページ
売り上げランキング: 3,945
このブログを応援する
お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。