【ポートスキャン実例付き】Nmapとは?コマンドの使い方を徹底解説!

セキュリティ対策やネットワーク管理に欠かせない〝Nmap〟

この記事では、Nmapを使ったポートスキャンの基本から高度なnmapコマンドの使い方まで網羅的に解説しています。

今日から業務に使えるnmapコマンドなど、すぐに役立つ情報が満載です!

目次

Nmapとは

Nmap(Network Mapper)は、ネットワークセキュリティの評価や診断に広く利用されているオープンソースのネットワークスキャニングツールです。特にホスト検出やポートスキャンに優れており、ネットワーク内のアクティブなホストや実行中のサービス、使用されているOSの特定などに役立ちます。

例えば、新規デバイスがネットワークに接続された際、そのデバイスが予期しないポートを開いている場合があります。このようなケースでNmapを活用すると、問題を早期に発見し、適切なアクセス制限や設定変更を行うことができます。

Nmapで出来ること

ポートスキャン

Nmapの基本的な機能で、ネットワーク内のホストに対して開いているポートを確認することができます。

OSおよびバージョン検出

ホストが使用しているOSや、そのバージョン情報を特定することができます。この機能は、古いバージョンのデバイスの識別や、ネットワーク内のセキュリティポリシーの適用に役立ちます。

サービス検出

各ポートで稼働しているサービスの種類を識別します。例えば、HTTPやFTP、SMTPなどのプロトコルや、そのバージョン情報を取得することができます。

ネットワークトポロジーの確認

Nmapは、ネットワーク内でホスト間の関係やルーティングの詳細を把握するためにも使用されます。これにより、ネットワークの全体構造を視覚化し、セキュリティリスクを評価することが可能です。

スクリプトエンジン(NSE)

Nmap Scripting Engine(NSE)を活用することで、一般的なスキャン機能を超えた脆弱性スキャンや、侵入テストの一部として多様なスクリプトを実行することができます。

主な特徴

高い汎用性と多機能性

Nmapは、単なるポートスキャンにとどまらず、OSの特定、稼働しているサービスやバージョンの検出、ネットワークのトポロジー調査、脆弱性スキャンなど、多岐にわたるセキュリティ調査に対応しています。

幅広いスキャンオプション

多様なスキャン方法を提供しており、TCPスキャンやUDPスキャン、ステルススキャン(SYNスキャン)、Xmasスキャンなど、目的に応じた柔軟な調査が可能です。また、スキャン速度の調整や複数ホストの指定なども簡単に行えます。

詳細な情報収集機能

ホストに関する詳細な情報(サービスのバージョン、OSの種類とバージョン、ネットワーク機器の特定など)を収集でき、セキュリティ診断やリスク評価に役立ちます。加えて、NSE(Nmap Scripting Engine)スクリプトを用いることで、カスタマイズされた脆弱性スキャンも可能です。

クロスプラットフォーム対応

Linux、Windows、macOSなど、主要なプラットフォームに対応しています。また、出力形式も通常のテキスト形式だけでなく、XMLやGrep対応形式などを指定できるため、スキャン結果を別のツールや分析システムに取り込むことも容易です。

オープンソースで無料

Nmapはオープンソースで、商用利用が可能なライセンスのもと、無料で提供されています。そのため、世界中のセキュリティエンジニアやネットワークエンジニアにとって、欠かせないツールの一つとして支持されています。

インストール方法

Nmapは、Windows、Linux、macOSなど、主要なOSに対応しており、各OS向けのインストールファイルがNmap公式サイトで提供されています。お使いのOSに合わせてファイルをダウンロードし、インストールして下さい。

注意事項

第三者のネットワークやシステムに対して無許可でスキャンを行うことは、法律違反にあたる可能性があります。たとえセキュリティ評価の意図であっても、違法なシステム侵入やサイバー攻撃の試みと見なされ、刑事罰や民事責任を追及されるリスクが伴います。正しい知識と判断をもって、法に従った利用を心掛けましょう。

この記事では、物理マシンのローカル環境に構築した仮想ネットワーク内で、ポートスキャンの検証を実施しています。

Nmapの基本的な使い方

この記事では、VirtualBox上に構築したKali Linux、及びやられアプリを用いて、Nmapの検証を行っています。

検証環境のシステム構成

OSIPアドレス
Nmap実行マシンKali Linux 2025.1(*1)192.168.10.11
ターゲットマシンUbuntu 8.04(*2)192.168.21.101

*1:nmapコマンドは、Kali Linuxに同梱されているNmap(バージョン:7.95)を使用します。

*2:ターゲットマシンは、やられアプリの1つであるMetasploitable2を使用します。

Nmapのコマンド構文

$ nmap [ スキャンの種類 ...] [ オプション ] { ターゲット }

スキャンの種類

スキャンの種類は、-sから始まるスキャンタイプ指定オプションがあり、たとえば-sSを指定することでSYNスキャン、-sUを指定することでUDPスキャンなどを実行することが可能です。
※各スキャンの特徴は後述しています。

オプション

Nmapではスキャン結果の出力形式を指定するためのオプションも豊富に用意されており、実行結果を他のツールに利用したり、整形したりすることができます。

  • -oX:XML形式
  • -oG:grep形式
  • -oA:複数の形式に一括出力

また、-pオプションを用いることで、スキャン対象のポート範囲を限定することも可能です。

ターゲット

IPアドレスやドメイン名、特定のネットワーク範囲などがターゲットとして指定でき、スキャンの目的や範囲に応じて、単一のホストから複数のホストまで幅広く指定可能です。

nmapコマンドの基本的な使い方

単純なポートスキャン

$ nmap ターゲット

ヘルプの表示方法

$ nmap -h

バージョンの確認方法

$ nmap -V

例えば、Nmap実行マシンからターゲットマシンにNmapを実行すると、下記のような結果を得ることができます。

$ nmap 192.168.21.101
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-06 02:03 JST
Nmap scan report for 192.168.21.101
Host is up (0.018s latency).
Not shown: 977 filtered tcp ports (no-response)
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
23/tcp   open  telnet
25/tcp   open  smtp
53/tcp   open  domain
80/tcp   open  http
111/tcp  open  rpcbind
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
512/tcp  open  exec
513/tcp  open  login
514/tcp  open  shell
1099/tcp open  rmiregistry
1524/tcp open  ingreslock
2049/tcp open  nfs
2121/tcp open  ccproxy-ftp
3306/tcp open  mysql
5432/tcp open  postgresql
5900/tcp open  vnc
6000/tcp open  X11
6667/tcp open  irc
8009/tcp open  ajp13
8180/tcp open  unknown

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

この場合、デフォルトのスキャンオプションが適用され、ターゲットマシンの標準ポートの状態を検出します。このシンプルな形式でも十分に利用価値がありますが、より詳細な情報やカスタマイズが必要な場合は、適切なオプションを指定する必要があります。

ポートスキャンの結果、Telnetが検出された際は、以下の記事をご参照ください。
Telnetは暗号化に対応しておらず、データ漏洩の危険性があるため、注意が必要です。

nmapコマンドで実行できるポートスキャンの種類

  • TCPスキャン(-sT)
  • SYNスキャン(-sS)
  • UDPスキャン(-sU)
  • Nullスキャン(-sN)
  • FINスキャン(-sF)
  • Xmasスキャン(-sX)
  • ACKスキャン(-sA)

nmapコマンドを実行すると、下記の権限エラーが生じる場合があります。

You requested a scan type which requires root privileges.
QUITTING!

ルート権限を必要とするスキャンタイプを要求しました。
終了します。

一部スキャンモードでは、ネットワークインターフェースに対する低レベルのアクセスを行う必要があり、この操作にはroot権限が必要です。

このような権限エラーが生じる場合は、sudoコマンドを使って管理者権限でnmapを実行して下さい。

Windows環境では、コマンドプロンプトまたはPowerShellを「管理者として実行」した上で、nmapを実行してください。

TCPスキャン(-sT)

$ nmap -sT 192.168.21.101

TCPスキャンは、最も基本的なスキャン手法であり、ターゲットの各ポートに対してTCP接続を試みます。具体的には、3ウェイハンドシェイクを使用して、ポートが開いているかどうかを判断します。

SYNスキャン(-sS)

$ nmap -sS 192.168.21.101

SYNスキャンは、「ハーフオープンスキャン」とも呼ばれ、実際に接続を完了させずにポートの状態を確認する方法です。TCP接続を完全に確立しないため、検出されにくく、高速にスキャンを行うことが可能です。

ポートスキャンの種類を指定しない場合、SYNスキャンが適用されます。

UDPスキャン(-sU)

$ nmap -sU 192.168.21.101

UDPスキャンは、UDPベースのサービスが稼働しているかどうかを確認するためのスキャン手法です。TCPと異なり、UDPは接続確認の仕組みを持たないため、スキャン結果が不確定な場合が多くなります。

Nullスキャン(-sN)

$ nmap -sN 192.168.21.101

Nullスキャンは、TCPヘッダーのすべてのフラグをオフにした状態でパケットを送信し、ポートの状態を確認するスキャン手法です。

FINスキャン(-sF)

$ nmap -sF 192.168.21.101

FINスキャンは、TCPフラグのFINビットのみをオンにして、パケットを送信するスキャン手法です。

Xmasスキャン(-sX)

$ nmap -sX 192.168.21.101

Xmasスキャンは、TCPヘッダーのFIN、PSH、URGフラグをすべてオンにした異常パケットを送信するスキャン手法です。

ACKスキャン(-sA)

$ nmap -sA 192.168.21.101

ACKスキャンは、ポートの開閉ではなく、ファイアウォールやフィルタリングの有無を確認するための手法です。

nmapコマンドで確認できるポートの状態

Nmapによって示される各状態から、通信の許可状況やフィルタリングの有無、セキュリティ上のリスクを評価することができます。

  • open
  • closed
  • filtered
  • unfiltered
  • open|filtered
  • closed|filtered

open

open状態は、指定したポートが開放され、接続が可能であることを示しています。オープンなポートは、特定のサービスが稼働しているため、脆弱性が存在する場合、攻撃者によって悪用されるリスクが極めて高くなります。管理者は、必要なポートのみを開放し、不要なポートを閉じることで、セキュリティのリスクを軽減できます。

closed

closed状態のポートはアクセス可能ですが、そのポートで待ち受けているアプリケーションがない状態です。外部からの攻撃リスクは低いとされますが、応答があるため存在が確認されます。ネットワークの構成やデバイスの種類を推測されるリスクがあり、可能であればファイアウォール設定で接続を拒否することが推奨されます。

filtered

filtered状態は、指定したポートがファイアウォールやその他のセキュリティデバイスによりフィルタリングされ、Nmapが接続の可否を判断できない状態です。この状態は、アクセス制御リスト(ACL)やセキュリティルールが適用されているため、外部からのスキャンを防止し、攻撃者にとって情報収集が難しくなります。

unfiltered

unfilteredと表示されるポートは、Nmapがポートへアクセスできるものの、該当ポートの状態が判別できない状態です。この状態は通常、ACKスキャンで発生します。

open|filtered

open|filtered状態のポートは、Nmapがopenかfilteredかを判断できない場合に表示されます。この状態は主にUDPスキャンやFinスキャンで発生し、ターゲットからの応答が得られない状況を示しています。

closed|filtered

closed|filtered状態は、ポートがclosedかfilteredかをNmapが判断できない状態です。通常のスキャンでは使用せず、IPID Idleスキャンの時だけに使用される状態です。

nmapコマンドの出力形式を指定する

nmapコマンドは、スキャン結果の出力形式を柔軟に指定できるため、データ連携や解析手法に応じた形式での保存が可能です。

  • 通常の形式(-oN ファイル名)
  • XML形式(-oX ファイル名)
  • Grep可能な形式(-oG ファイル名)※廃止予定
  • すべての形式を一括出力(-oA ベースファイル名)

通常の形式(-oN ファイル名)

$ nmap -oN output.nmap 192.168.21.101

デフォルトの形式で、ホストのIPアドレス、スキャン対象のポート、ステータスが整理され、視覚的確認が可能です。

XML形式(-oX ファイル名)

$ nmap -oX output.xml 192.168.21.101

XMLフォーマットは、他のプログラムやスクリプトでのデータ処理に適しており、Nmapの出力を自動解析する際に役立ちます。

Grep可能な形式(-oG ファイル名)※廃止予定

$ nmap -oG output.gnmap 192.168.21.101

スクリプトやコマンドラインでフィルタリングする際に適しており、大規模なスキャン結果から必要な情報のみを抽出可能です。

すべての形式を一括出力(-oA ベースファイル名)

$ nmap -oA output 192.168.21.101

一括出力では、通常形式、XML形式、Grep可能な形式の全てを一度に保存でき、各用途に応じたフォーマットが利用可能です。

nmapコマンドの高度な使い方

ポートスキャンを効率的に利用するためには、ホストの発見やターゲットの指定を行うスキャンオプションが役立ちます。

  • ホストの探索
    • リストスキャン(-sL)
    • PINGスキャン(-sn)
    • ホスト検出(Ping)を行わない(-Pn)
    • DNSの名前解決を行わない(-n)
  • ポートの指定
    • ポートを明示的に指定
    • 高速スキャン(-F)
  • ターゲットを指定
    • 複数のホストを指定
    • ファイルで指定
  • 詳細情報を取得
    • 稼働しているサービスのバージョンを確認(-sV)
    • OS検出(-O)
    • ネットワーク経路を取得(--traceroute)
    • アグレッシブモード(-A)
    • スキャン結果を詳細に表示
    • スキャン結果の根拠を表示(--reason)
  • スキャンの速度を指定(-T0,-T1,-T2,-T3,-T4,-T5)
  • NSEスクリプトを実行(--script、-sC)

ホストの探索

リストスキャン(-sL)

$ nmap -sL 192.168.21.101,102,103 192.168.222.10-15

このスキャンは、ポートスキャンを行わずにホストのIPアドレスを一覧化する機能です。リストスキャンでは単に対象ホストのアドレスを一覧化するだけのため、ポートスキャンの準備段階で利用されます。
※単純にリストアップするだけで、ホストへのパケット送信は行いません。

PINGスキャン(-sn)

$ nmap -sn 192.168.21.0/24

PINGスキャンは、ホストがオンラインであるかを判断するための基本的なスキャンです。このスキャンではICMPエコー要求を送信し、その応答に基づいてホストの稼働状況を確認します。ホストの稼働状態を迅速に把握するのに便利ですが、ファイアウォールでICMPパケットが遮断していると、応答が得られない可能性があります。

旧バージョンのNmapでは、PINGスキャンは-sPオプションが使用されていましたが、現在のバージョンでは-snオプションになっています。

ホスト検出(Ping)を行わない(-Pn)

$ nmap -Pn 192.168.21.101

通常のスキャンではホストが稼働しているかを確認するためにPINGを送信しますが、-Pnオプションを指定すると、このプロセスをスキップし、ホストがオンラインであると仮定してスキャンを実行します。この方法は、ICMP応答が制限されているネットワークや、ファイアウォールによってPINGが遮断されている環境で有効です。

旧バージョンのNmapでは、-P0オプションまたは-PNオプションが利用されていましたが、現在のバージョンでは-Pnオプションになっています。

DNSの名前解決を行わない(-n)

$ nmap -n 192.168.21.101

通常、NmapはIPアドレスをホスト名に変換するためにDNS解決を行いますが、このオプションによりIPアドレスのみでスキャンを行います。これにより、スキャン時間の短縮やネットワーク帯域の節約に役立ち、大規模なスキャンを効率的に行いたい場合に適しています。

ポートの指定

ポートを明示的に指定

$ nmap -p 22 192.168.21.101
$ nmap -p 22,80,443 192.168.21.101

単一ポートのみをスキャンしたい場合は-p 22と入力し、複数ポートを対象にする場合は-p 22,80,443のようにカンマで区切って入力します。

$ nmap -p 1-1024 192.168.21.101

範囲指定も可能で-p 1-1024のように指定することで、特定の範囲内のポートだけを効率よくスキャンすることができます。

$ nmap -p- 192.168.21.101

-p-を設定することで、全てのポート(1番から65535番まで)をスキャンすることもできます。

高速スキャン(-F)

$ nmap -F 192.168.21.101

通常のスキャンでは1,000ポートを対象とするため、スキャンにかかる時間が長くなることがあります。高速スキャン(Fast Scan:-F)では、スキャン対象を主要な100ポートに限定することで、スキャン時間を大幅に短縮することができます。

ターゲットを指定

複数のホストを指定

ネットワークセグメントで指定

$ nmap 192.168.21.0/24

複数のホストを指定

$ nmap 192.168.21.101,232 192.168.22.1

範囲指定

$ nmap 192.168.21.101-120

ファイルで指定

$ cat target.txt
192.168.21.101
192.168.21.130
192.168.21.157

$ nmap -iL target.txt

Nmapで多数のホストをスキャンする場合、ファイルで一括指定すると便利です。-iLオプションを使うことで、あらかじめ作成したリストを読み込ませることができ、スクリプト化や自動化にも最適です。

詳細情報を取得

稼働しているサービスのバージョンを確認(-sV)

$ nmap -sV 192.168.21.101
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-06 05:11 JST
Nmap scan report for 192.168.21.101
Host is up (0.014s latency).
Not shown: 977 filtered tcp ports (no-response)
PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         vsftpd 2.3.4
22/tcp   open  ssh         OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
23/tcp   open  telnet      Linux telnetd
25/tcp   open  smtp        Postfix smtpd
53/tcp   open  domain      ISC BIND 9.4.2
80/tcp   open  http        Apache httpd 2.2.8 ((Ubuntu) DAV/2)
111/tcp  open  rpcbind     2 (RPC #100000)
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
512/tcp  open  exec?
513/tcp  open  login?
514/tcp  open  shell?
1099/tcp open  java-rmi    GNU Classpath grmiregistry
1524/tcp open  bindshell   Metasploitable root shell
2049/tcp open  nfs         2-4 (RPC #100003)
2121/tcp open  ftp         ProFTPD 1.3.1
3306/tcp open  mysql?
5432/tcp open  postgresql  PostgreSQL DB 8.3.0 - 8.3.7
5900/tcp open  vnc         VNC (protocol 3.3)
6000/tcp open  X11         (access denied)
6667/tcp open  irc         UnrealIRCd
8009/tcp open  ajp13       Apache Jserv (Protocol v1.3)
8180/tcp open  http        Apache Tomcat/Coyote JSP engine 1.1
Service Info: Hosts:  metasploitable.localdomain, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 179.39 seconds

-sVオプションを指定することで、各ポートで稼働するサービスの詳細なバージョン情報を取得できます。この情報により、古いバージョンやセキュリティホールが残されているサービスを特定しやすくなります。

OS検出(-O)

$ nmap -O 192.168.21.101

ターゲットマシンのOSを特定するために-Oオプションを使用します。

ネットワーク経路を取得(--traceroute)

$ nmap --traceroute 192.168.21.101

--tracerouteオプションを使用することで、ターゲットマシンまでのネットワーク経路情報を収集できます。ネットワーク経路の把握は、トラブルシューティングや攻撃ルートの可視化に役立ち、より効果的なネットワーク管理が可能となります。

アグレッシブモード(-A)

$ nmap -A 192.168.21.101

アグレッシブモードでは、OS検出(-O)、バージョンスキャン(-sV)、スクリプトスキャン(--script)、およびtraceroute(--traceroute)の情報収集を一度に行います。調査時間を短縮できる反面、トラフィックを増加させるため、ターゲットマシンへの負荷が高まる点に注意が必要です。

スキャン結果を詳細に表示

$ nmap -v 192.168.21.101
$ nmap -vv 192.168.21.101

スキャン結果を詳細に表示するためには、-vオプション-vvオプションを使います。

  • -v : 詳細に表示
  • -vv : より詳細に表示

スキャン結果の根拠を表示(--reason)

$ nmap --reason 192.168.21.101

--reasonオプションを使用することで、スキャン結果の判断理由を確認できます。このオプションにより、各ポートが特定の状態と判断された根拠を出力し、結果の信頼性を高めるための参考情報として利用できます。

スキャンの速度を指定(-T0,-T1,-T2,-T3,-T4,-T5)

$ nmap -T4 192.168.21.101

-Tオプションを使用して、スキャンの速度を6段階から選択できます。速度を上げるとターゲットマシンへの負荷が増えるため、注意が必要です。

  • -T0 : 非常に低速
  • -T1 : やや低速
  • -T2 : 低速
  • -T3 : デフォルト
  • -T4 : 公式サイト推奨
  • -T5 : 高速

NSEスクリプトを実行(--script、-sC)

NmapにはNSE(Nmap Scripting Engine)スクリプトが用意されており、--scriptオプションで実行できます。NSEスクリプトを使うと、サービスの脆弱性診断や詳細なネットワーク情報の収集が自動化され、効率的なセキュリティ分析が可能です。

デフォルトのスクリプトセットを使用してスクリプトスキャンを実行する

$ nmap --script=default 192.168.21.101

--scriptオプションにファイル名、スクリプトカテゴリ、およびディレクトリを指定して、特定のスクリプトスキャンを実行することも可能です。

デフォルトのスクリプトセットの場合、-sCオプションでもOK。

$ nmap -sC 192.168.21.101

Nmap攻撃からサーバーを守る方法

Nmapはネットワークの調査や脆弱性の発見に利用できるツールとして、セキュリティ診断やシステム監査に広く利用される一方、攻撃者がサーバーの脆弱性を探るために使用するケースも多々あります。Nmap攻撃からサーバーを守るためには、単一のセキュリティ対策に頼るのではなく、複数の防御手段を組み合わせることで、侵入リスクを最小限に抑えることができます。

多層防御(ディフェンスインデプス)の一例

まとめ:Nmapを活用して自分のサーバーを守る

Nmapは、サーバーのセキュリティ対策に欠かせないツールです。正しい使い方をマスターすることで、脆弱性の早期発見や攻撃の防止が可能になります。

しかし、第三者のサーバーやネットワークに対して無断で実行することは法的リスクを伴います。必ず自分が管理する環境で使用するようにしましょう。

デフォラボ

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
目次