0.本稿について
- 環境:本稿ではAlmaLinux9.xをMinimalで最小インストールした環境を使用しています。
1.はじめに
IPアドレスを持つノードは必ず、ポートという、「通信を行うためのドア」を持っており、アプリケーションはノード間でポートを介して通信しています。
このポートは0番から65535番まであります。
このうちの0から1023番までは、ウェルノウンポート(wellknown port)といい、httpやhttps、ntpやsshなど、定番の通信はこの番号のポートを使用して通信を行います。
このポートというのは、open(=開いている)、close(=閉じている)という概念があります。
開いている場合は通信が可能で、閉じている場合は通信が不可能になります。
この開閉についてもう少し言うと、サーバ内でプロセスがポートにバインドしているかどうか、ファイアウォールが許可しているかどうかがポイントになりますが、本稿ではサーバ外から見た時に開いているかどうかという視点で見ます。
インターネット上に公開するWebサーバやDNSサーバなどであれば、そのポートが開いていないと通信ができないため、開けてある必要がありますが、それ以外は最小権限の原則(この場合は必要なものだけ開けようねという原則)などから閉じている必要があります。
ポートスキャンって?
ノードに対してポートの開閉状況を確認する事をポートスキャンと言います。
ポートスキャンをする事で、任意のポートが開いているか、閉じているかを調べる事ができます。
本稿では、ポートスキャンツールとして昔からある、nmapを使う方法を簡単に紹介します。
お品書き
2.nmapのインストール
3.nmapを使ってみる
2.nmapのインストール
まずはnmapがあるかどうかを確認します。
[yoyo@dev1 ~]$ which nmap
/usr/bin/which: no nmap in (/home/yoyo/.local/bin:/home/yoyo/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin)
no nmap
となりました。私の環境では入っていませんでした。今度はdnf
でパッケージを調べてみます。
[yoyo@dev1 ~]$ dnf info nmap
Last metadata expiration check: 0:07:10 ago on Mon Apr 21 14:03:57 2025.
Available Packages
Name : nmap
Epoch : 3
Version : 7.92
Release : 3.el9
Architecture : x86_64
Size : 5.4 M
Source : nmap-7.92-3.el9.src.rpm
Repository : appstream
Summary : Network exploration tool and security scanner
URL : http://nmap.org/
License : Nmap
Description : Nmap is a utility for network exploration or security auditing. It supports
: ping scanning (determine which hosts are up), many port scanning techniques
: (determine what services the hosts are offering), and TCP/IP fingerprinting
: (remote host operating system identification). Nmap also offers flexible target
: and port specification, decoy scanning, determination of TCP sequence
: predictability characteristics, reverse-identd scanning, and more. In addition
: to the classic command-line nmap executable, the Nmap suite includes a flexible
: data transfer, redirection, and debugging tool (netcat utility ncat), a utility
: for comparing scan results (ndiff), and a packet generation and response
: analysis tool (nping).
どうもappstream
リポジトリに存在しているようです。インストールを行います。
[yoyo@dev1 ~]$ sudo dnf install nmap -y
Last metadata expiration check: 0:06:28 ago on Mon Apr 21 14:06:05 2025.
Dependencies resolved.
===========================================================================================================================================
Package Architecture Version Repository Size
===========================================================================================================================================
Installing:
nmap x86_64 3:7.92-3.el9 appstream 5.4 M
Installing dependencies:
libibverbs x86_64 51.0-1.el9 baseos 426 k
libpcap x86_64 14:1.10.0-4.el9 baseos 172 k
nmap-ncat x86_64 3:7.92-3.el9 appstream 222 k
Transaction Summary
===========================================================================================================================================
Install 4 Packages
Total download size: 6.2 M
Installed size: 26 M
Downloading Packages:
(1/4): nmap-ncat-7.92-3.el9.x86_64.rpm 6.7 MB/s | 222 kB 00:00
(2/4): libibverbs-51.0-1.el9.x86_64.rpm 10 MB/s | 426 kB 00:00
(3/4): libpcap-1.10.0-4.el9.x86_64.rpm 5.1 MB/s | 172 kB 00:00
(4/4): nmap-7.92-3.el9.x86_64.rpm 25 MB/s | 5.4 MB 00:00
-------------------------------------------------------------------------------------------------------------------------------------------
Total 4.6 MB/s | 6.2 MB 00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : libibverbs-51.0-1.el9.x86_64 1/4
Installing : libpcap-14:1.10.0-4.el9.x86_64 2/4
Installing : nmap-ncat-3:7.92-3.el9.x86_64 3/4
Running scriptlet: nmap-ncat-3:7.92-3.el9.x86_64 3/4
Installing : nmap-3:7.92-3.el9.x86_64 4/4
Running scriptlet: nmap-3:7.92-3.el9.x86_64 4/4
Verifying : nmap-3:7.92-3.el9.x86_64 1/4
Verifying : nmap-ncat-3:7.92-3.el9.x86_64 2/4
Verifying : libibverbs-51.0-1.el9.x86_64 3/4
Verifying : libpcap-14:1.10.0-4.el9.x86_64 4/4
Installed:
libibverbs-51.0-1.el9.x86_64 libpcap-14:1.10.0-4.el9.x86_64 nmap-3:7.92-3.el9.x86_64 nmap-ncat-3:7.92-3.el9.x86_64
Complete!
もう一度which
を実行したところ入ったようです。
[yoyo@dev1 ~]$ which nmap
/usr/bin/nmap
3.nmapを使ってみる
実際にnmapを利用してみましょう。基本的な構文は簡単で、
基本構文
nmap ホスト名/IP
を実行するだけです。実際に自分のサーバに、IPアドレスを指定してやってみたのが以下↓です。
[yoyo@dev01 ~]$ nmap 192.168.1.32
Starting Nmap 7.92 ( https://nmap.org ) at 2025-04-21 14:16 JST
Nmap scan report for 192.168.1.32
Host is up (0.00027s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
111/tcp open rpcbind
3128/tcp open squid-http
Nmap done: 1 IP address (1 host up) scanned in 1.19 seconds
例えば22番ポートがssh用に、80番がhttp用に開いている事が確認できます。
次に、ポートを指定して実行してみましょう。
ポートを指定する
-pを付ける事でポートを指定する事が可能です。
nmap -p 22 ホスト名/IP
この際、カンマ区切りで指定すると、複数同時に指定できます。
nmap -p 22,80,443 ホスト名/IP
数字の間にハイフン(-)を入れると数字の間の範囲を指定できます。
nmap -p 1-1024 ホスト名/IP
pの反対をハイフン(-)で挟む事で、すべてのポートを指定できます。
nmap -p- ホスト名/IP
-sTを付ける事で、TCPスキャンできます。
nmap -sT -p- ホスト名/IP
-sUを付ける事で、UDPスキャンできます。こちらの場合は少し時間がかかる事があります。
nmap -sU -p- ホスト名/IP
ポートスキャン時は通常、生存確認を行いますが、ポートは開いているが、その向こう側のホストが生存していな場合は反応せず、ポートが閉じて見える事があります。その場合は、-Pnを付ける事でホストの生存確認(Pingスキャン)をスキップできます。
nmap -Pn -p- ホスト名/IP
-sV
を付ける事で、待ち受けているアプリケーションのバージョンを表示させる事ができます。
nmap -sV ホスト名/IP
侵入者は例えばここで表示されたアプリケーションとそのバージョンの脆弱性を調査し、攻撃を検討する訳です。
必ずその通り表示されるわけではありません。アプリケーションによっては隠ぺいできるものもあります
ここまでできれば、nmapを最低限使えるようになっています。
今回はnmapの基本的な使い方を紹介しました。
初学者はまずこの辺を一通り使いこなせるようになると良いでしょう。
大抵の場合は今回のコマンドだけで十分だと思いますが、実務で使用する場合は別なオプションを利用する事もあります。nmapは更に細かい指定もできるため、man nmap
で他のオプションも試してみてください。
あと、何度も言いますが、ポートスキャンを実施する対象は厳に気を付けて下さい。