「今この瞬間、自社のサーバーに何のポートが外部に向けて開いているか、すぐに答えられますか?」
ネットワーク担当者なら誰もが一度はこの問いに直面します。攻撃者が標的に侵入する前に必ず行うのがネットワークスキャンであり、その定番ツールがNmap(Network Mapper)です。Nmapを使えば、攻撃者と同じ視点で自社環境の「見え方」を確認し、意図せず開放されているポートや古いバージョンのサービスを発見できます。
この記事では、Nmapのインストールから主要なスキャンオプション、NSEスクリプトを使った設定確認、そして情シス担当者が安全に活用するための実践手順まで解説します。

Nmapとは?防御者も使うネットワーク調査ツール
Nmap(Network Mapper)は、ネットワーク上のホストを探索し、開いているポートやそこで動作しているサービスのバージョンを調査するオープンソースツールです。1997年の開発開始以来、現在も活発にメンテナンスされており、世界中のシステム管理者やセキュリティエンジニアに使われています。
Nmapが選ばれる理由は3点です。
・オープンソース・無料: Linux・Windows・macOSに対応し、追加費用なしで導入できます。
・機能の幅広さ: 単純なポートスキャンから、OS検出・バージョン検出・NSEスクリプトによる設定確認まで一つのツールでカバーします。
・業界標準: ドキュメントや活用事例が豊富で、結果の読み方が体系化されています。
【重要】使用前に必ず確認すること
Nmapは強力なツールである反面、誤った使い方は法的・倫理的問題を引き起こします。
自分が管理権限を持つネットワーク・ホストに対してのみ使用してください。
許可なく第三者のシステムをスキャンする行為は、不正アクセス禁止法(不正アクセス行為の禁止等に関する法律)に抵触する可能性があります。自社環境でのセルフチェック、または書面による許可を得たシステムのみを対象としてください。法的な詳細については法律の専門家にご確認ください。
社内でNmapを使う場合も、セキュリティポリシーに沿って上長の承認を取得し、スキャンの日時・対象・目的を記録に残しておくことを推奨します。
Nmapのインストールと動作確認
# Ubuntu / Debian系 sudo apt update && sudo apt install nmap -y # RHEL / Rocky Linux / AlmaLinux系 sudo dnf install nmap -y # バージョン確認 nmap --version # 出力例: Nmap 7.94 ( https://nmap.org )
nmap --version でバージョンが表示されれば準備完了です。
基本的なスキャンコマンド
1. 単一ホストのポートスキャン
最も基本的なスキャンです。引数なしの場合、上位1000ポートがスキャン対象になります。
# 基本スキャン(自分が管理するサーバーのIPアドレスを指定) nmap 192.168.1.100 # 結果例: # PORT STATE SERVICE # 22/tcp open ssh # 80/tcp open http # 443/tcp open https # 3306/tcp open mysql ← 外部公開されていたら要確認 # 3389/tcp open ms-wbt-server ← RDPが外部から見えていたら危険信号
見るべきポイント: 意図せず外部公開されているポート(データベースの3306/MySQL、27017/MongoDB、5432/PostgreSQLや、リモートデスクトップの3389など)が映っていたら、ファイアウォールで制限することを検討してください。
2. ネットワーク全体のホスト発見(Ping Scan)
社内ネットワーク上に接続されているデバイスを一覧化するときに使います。管理台帳にない「不明な機器」を発見するのに役立ちます。
# -sn: ポートスキャンなしのホスト発見(Ping Scan) nmap -sn 192.168.1.0/24 # 出力例: # Nmap scan report for 192.168.1.1 # Host is up (0.0010s latency). # Nmap scan report for 192.168.1.50 ← 管理台帳にないIPなら要確認 # Host is up (0.0023s latency).
3. サービスのバージョン検出(-sV)
開放ポートで動いているソフトウェアのバージョンを調べられます。脆弱性のある古いバージョンを発見するのに直接役立ちます。
# -sV: バージョン検出 nmap -sV 192.168.1.100 # 出力例(想定例): # PORT STATE SERVICE VERSION # 22/tcp open ssh OpenSSH 7.4 (protocol 2.0) # 80/tcp open http Apache httpd 2.4.6 # ↑ どちらも古いバージョン。脆弱性の有無を確認してアップデートを検討する
バージョン情報が判明したら、そのバージョンに既知の脆弱性がないか、各ベンダーのセキュリティアドバイザリやJVN(Japan Vulnerability Notes)で確認しましょう。
4. OS検出(-O)
対象ホストのOSを推測します。資産台帳のOS情報と突き合わせる用途に使えます。実行にはsudoまたはroot権限が必要です。
# -O: OS検出(sudo権限が必要) sudo nmap -O 192.168.1.100 # OS検出はパケットの挙動から推測するため、精度は100%ではない点に注意
5. 総合スキャン(-A)
-Aオプションは、OS検出・バージョン検出・NSEスクリプト・tracerouteをまとめて実行します。調査の出発点として最初に試す「万能スキャン」として活用できます。
# -A: アグレッシブスキャン(OS + バージョン + スクリプト + traceroute) sudo nmap -A 192.168.1.100 # 注意: スキャンに時間がかかりネットワーク負荷もやや大きくなる # 本番環境では業務への影響が少ない時間帯に実施することを推奨
NSEスクリプトで設定ミスや脆弱な設定を確認する
Nmapには「NSE(Nmap Scripting Engine)」と呼ばれるスクリプト機能が内蔵されています。特定のプロトコルやサービスの設定状態を詳しく調べるスクリプトが多数用意されており、単純なポートスキャン以上の情報を得られます。
よく使うNSEスクリプトの例
# SMB(445番ポート)のセキュリティ設定を確認 # 危険なSMBv1が有効かどうかなどを調べられる nmap --script smb-security-mode -p 445 192.168.1.100 # SSHサーバーがサポートしている認証方式を確認 # パスワード認証が有効になっていないかを調べるのに使える nmap --script ssh-auth-methods -p 22 192.168.1.100 # Webサーバーにセキュリティヘッダーが設定されているか確認 nmap --script http-security-headers -p 80,443 192.168.1.100 # 利用可能なNSEスクリプトをキーワードで検索する方法 ls /usr/share/nmap/scripts/ | grep -i ssl ls /usr/share/nmap/scripts/ | grep -i smb
NSEスクリプトは /usr/share/nmap/scripts/ 以下に格納されています。grep -i でキーワード検索すると目的のスクリプトを見つけやすくなります。
情シス担当者が今日から実践できること
1. 定期スキャンで「ベースライン」を作る
現状の把握が第一歩です。月1回、自社のサーバー群に対してNmapを実行し、結果をファイルに保存しておくと「先月と今月で開放ポートが変わっていないか」を比較できます。
# XML形式で結果を保存(後で差分比較しやすい) nmap -sV -oX /var/log/nmap/scan_$(date +%Y%m%d).xml 192.168.1.0/24 # -oA を使うとxml・nmap・gnmapの3形式を一度に出力できる nmap -sV -oA /var/log/nmap/scan_$(date +%Y%m%d) 192.168.1.0/24 # 保存先ディレクトリを事前に作成しておく mkdir -p /var/log/nmap
2. 不審なポートが見つかったときの対応フロー
・想定外のポートが開いている場合: どのプロセスが使っているかを ss -tlnp または lsof -i :<ポート番号> で確認する
・不要なサービスがある場合: systemctl stop <サービス名> で停止し、systemctl disable で再起動後も起動しないよう無効化する
・外部から遮断できていない場合: firewalldやiptablesで外部からのアクセスを制限する
・変化を記録する: いつ誰がどのサービスを追加したか確認し、インシデントログに残す
Linuxのファイアウォール設定については、姉妹サイトLinuxMaster.JPでfirewalldやiptablesの設定方法を詳しく解説しています。
3. 外部から見た姿を確認する(DMZ・公開サーバー)
社内ネットワークから自社の公開サーバーをスキャンする場合、ファイアウォールの内側からスキャンしているため「外部から実際にどう見えるか」と異なることがあります。外部からの見え方を確認するには、インターネット側のネットワーク(クラウドVMや自宅のPCなど)からスキャンするか、外部脆弱性診断サービスを利用することを検討してください。
中小企業でも今日から始められること
「ペネトレーションテストは費用が高く難しい」という印象を持つ中小企業の情シス担当者でも、Nmapを使えばコストゼロでネットワークのポート開放状況を定期チェックできます。
・費用ゼロで導入: Nmapは完全無料のオープンソースツールです。
・手軽なインストール: aptやdnfで1コマンドインストールでき、すぐに使い始められます。
・定期スキャンの自動化: cronと組み合わせれば週次・月次で自動実行し、結果をファイルに蓄積できます。
・脆弱性管理との連携: スキャン結果で判明したバージョン情報を脆弱性管理台帳に紐付けることで、パッチ適用の優先度判断に役立てられます。
Nmapで把握したポートやサービス情報をもとに、より深い脆弱性診断を行うにはOpenVAS(Greenbone)のような脆弱性スキャナと組み合わせるのが効果的です。また、スキャン結果への対応を体系的に行うには、脆弱性管理の4ステップとして整理したサイクルを回すことを推奨します。
よくある誤解と注意点
誤解1: 「Nmapを使うだけで攻撃とみなされる」
自社が管理権限を持つシステムに対して正当な目的でスキャンすることは問題ありません。ただし、組織内のセキュリティポリシーに沿って実施し、スキャンの記録を残しておくことが重要です。
誤解2: 「ポートが閉じていれば安全」
Nmapで「closed(閉鎖)」や「filtered(フィルタ済み)」と表示されていても、それだけでセキュリティが万全だとは言えません。開放ポートで動くサービスの設定ミスや古いバージョンの問題は、別途確認が必要です。ファイアウォールポリシーの定期見直しも合わせて行いましょう。
誤解3: 「Nmapは攻撃者だけのツール」
Nmapはもともとネットワーク管理者のための調査ツールとして設計されています。「攻撃者が使うから危険」ではなく、「攻撃者と同じ視点で自社の露出を把握し、先手を打つ」ために使うのが正しい活用方法です。

本記事のまとめ
| コマンド/オプション | 用途 | 特徴 |
|---|---|---|
| nmap <IP> | 基本ポートスキャン | 上位1000ポートを確認 |
| nmap -sn <CIDR> | ホスト発見 | 生きているIPを一覧化 |
| nmap -sV <IP> | バージョン検出 | 古いソフトウェアを発見 |
| sudo nmap -O <IP> | OS検出 | 資産台帳との突き合わせに |
| sudo nmap -A <IP> | 総合スキャン | OS+バージョン+スクリプト |
| nmap –script <名前> <IP> | NSEスクリプト | SMB・SSH・HTTP設定の確認 |
| nmap -oA <ファイル> <IP> | 結果の保存 | 差分比較・記録管理に |
Nmapは「攻撃者視点で自社を見る」ためのファーストステップとなるツールです。月1回の定期スキャンを習慣化し、開放ポートの変化に気づく仕組みを整えることが、堅実なネットワークセキュリティ管理の土台になります。まずは自分のPCから自社サーバーをスキャンして、想定外のポートが開いていないかを確認することから始めてみてください。
攻撃対象領域(アタックサーフェス)管理と組み合わせることで、Nmapのスキャン結果をより体系的なリスク管理に結びつけられます。
PR
実践 パケット解析 第3版(Chris Sanders/オライリー・ジャパン)
Wiresharkを使ったパケット解析の実践書。Nmapのスキャン結果と組み合わせることでネットワーク上の通信を深く理解でき、不審なトラフィックの早期発見に役立ちます。
