不必要にポートを開放していると、そこからアタックを仕掛けられることがあります。 また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