「ファイアウォール越しに、どのサービスが外から見えているのか知りたい」
Linuxサーバーの運用やセキュリティ監査でこうした場面に遭遇したら、真っ先に使うべきコマンドが
nmap(エヌマップ/Network Mapper)です。この記事では、
nmap コマンドの基本的な使い方から、-sS(SYNスキャン)・-sV(バージョン検出)・-A(総合スキャン)といった現場で頻出するオプション、ファイアウォールの動作確認やセキュリティ監査での実践的な使い分けまで、RHEL 9系・Ubuntu 24.04 LTSで動作確認した内容をベースに解説します。この記事のポイント
・nmap -p 1-1000 192.168.1.100 で外部から開放ポートを確認できる
・-sV でサービス名とバージョン、-A でOS推定まで取得できる
・ss(内部)と nmap(外部)の両面で確認するのが鉄則
・自分の管理下にないホストへのスキャンは違法になりうるので要注意
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
nmapコマンドとは?(ネットワークマッパーの基本)
nmap は「Network Mapper」の略で、ネットワーク上のホスト探索・ポートスキャン・サービスバージョン検出・OS推定などを1本で行える、セキュリティ診断の定番ツールです。サーバー管理者から見ると「外部のネットワークから、自分のサーバーはどう見えているのか」を客観的に確認するための唯一無二のツールと言ってよいです。
サーバー内部で動いているサービスを確認する
ss や lsof と役割が補完関係にあり、内外両方の視点で確認できてはじめて、ポート管理は完了します。内部から見たポートの状態については、Linux ポート確認の全コマンドで詳しく解説しています。nmapのインストールと動作確認
1. RHEL 9系(AlmaLinux / Rocky Linux)でのインストール
RHEL系のディストリビューションでは、dnf でインストールします。# nmapパッケージのインストール(RHEL9系) # dnf install -y nmap # バージョン確認 # nmap --version Nmap version 7.92 ( https://nmap.org ) Platform: x86_64-redhat-linux-gnu Compiled with: liblua-5.4.4 openssl-3.0.7 libssh2-1.10.0 libz-1.2.11 libpcre-8.44 nmap-libpcap-1.10.4 libdnet-1.12 ipv6
2. Ubuntu 24.04 LTS でのインストール
Ubuntu系ではapt を使います。# nmapパッケージのインストール(Ubuntu 24.04) # apt update # apt install -y nmap # バージョン確認 # nmap --version Nmap version 7.94 ( https://nmap.org )
nmap はスキャン内容によってはroot権限を要求します。一般ユーザーで実行するとSYNスキャン(-sS)などの機能が使えないため、管理者用途では sudo か root ユーザーで実行してください。基本的なポートスキャン
3. 単一ホストのスキャン(最も基本の使い方)
ホスト名またはIPアドレスを指定するだけで、そのホストの主要なポート(よく使われる上位1000ポート)をスキャンできます。# 192.168.1.100 の主要ポートをスキャン # nmap 192.168.1.100 Starting Nmap 7.92 ( https://nmap.org ) at 2026-04-18 09:32 JST Nmap scan report for web01.example.local (192.168.1.100) Host is up (0.00042s latency). Not shown: 997 closed tcp ports (reset) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp open https MAC Address: 52:54:00:XX:XX:XX (QEMU virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 0.28 seconds
open のポートは「外部から接続できる」ことを意味します。サーバー運用では「開いていてよいポート」だけがopenになっている状態が正しい姿です。4. ポート範囲を指定してスキャンする(-p)
標準の上位1000ポートだけでは不足する場合、-p オプションでポート範囲を明示的に指定します。# 1番〜65535番までの全ポートをスキャン(時間がかかるので注意) # nmap -p 1-65535 192.168.1.100 # 特定のポートだけを指定してスキャン # nmap -p 22,80,443,3306 192.168.1.100 # 指定ポートのみ、サービス名付きで確認 # nmap -p 80,443 web01.example.local PORT STATE SERVICE 80/tcp open http 443/tcp open https
-p 1-65535)は数分〜数十分かかることがあるため、本番環境では事前に対象ホストの管理者に通知してから実施するのが鉄則です。5. 複数ホスト・サブネット全体をスキャンする
CIDR記法やレンジ指定で、複数ホストを一度にスキャンできます。# /24サブネット全体をスキャン(254ホスト分) # nmap 192.168.1.0/24 # IPアドレスのレンジ指定 # nmap 192.168.1.100-120 # 稼働中ホストだけを一覧する(-sn:ポートスキャンなし) # nmap -sn 192.168.1.0/24 Nmap scan report for 192.168.1.1 Host is up (0.0011s latency). Nmap scan report for 192.168.1.100 Host is up (0.0004s latency). Nmap scan report for 192.168.1.101 Host is up (0.0009s latency).
-sn は「稼働しているホストを見つけたいだけ」という場面で便利で、ネットワーク内の生存ホスト棚卸しに使えます。スキャン方式の使い分け(-sS / -sT / -sU)
6. SYNスキャン(-sS)— root必須・最速の定番
-sS(SYNスキャン/ステルススキャン)は、TCPの3ウェイハンドシェイクの最後のACKを送らずに判定する方式で、高速かつ検知されにくいのが特徴です。root権限が必要で、nmapが何も指定しない場合のデフォルトもこれです。# SYNスキャン(root権限が必要) # sudo nmap -sS -p 1-1000 192.168.1.100
7. TCP Connectスキャン(-sT)— 一般ユーザー可
root権限がない環境では、-sT(TCP Connectスキャン)で代用できます。ただし3ウェイハンドシェイクを完了させるため、サーバー側のログに確実に残ります。# 一般ユーザーでも実行可能なTCP Connectスキャン # nmap -sT -p 1-1000 192.168.1.100
8. UDPスキャン(-sU)— ポート番号のサービス調査に
DNS(53)、SNMP(161)、NTP(123)などのUDPサービスは、通常のTCPスキャンでは検出できません。-sU を使います。# UDPスキャン(root権限が必要、時間がかかる) # sudo nmap -sU -p 53,123,161 192.168.1.100 PORT STATE SERVICE 53/udp open domain 123/udp open ntp 161/udp open|filtered snmp
サービス・OSの詳細情報を取得する
9. サービスバージョン検出(-sV)
開いているポートで「何が」「どのバージョンで」動いているかまで調べたい場合は、-sV を付けます。# サービス名とバージョンを検出 # sudo nmap -sV -p 22,80,443 192.168.1.100 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.7 (protocol 2.0) 80/tcp open http Apache httpd 2.4.53 ((AlmaLinux)) 443/tcp open ssl/http Apache httpd 2.4.53 ((AlmaLinux))
10. OS推定(-O)・総合スキャン(-A)
-O で稼働しているOSを推定できます。-A(aggressive)は、-sV・-O・トレースルート・デフォルトスクリプトを一括で実行するフルパッケージです。# OS推定のみ # sudo nmap -O 192.168.1.100 # 総合スキャン(最も情報量が多い) # sudo nmap -A 192.168.1.100 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.7 (protocol 2.0) | ssh-hostkey: | 3072 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx (RSA) |_ 256 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx (ED25519) 80/tcp open http Apache httpd 2.4.53 |_http-title: Welcome to AlmaLinux Running: Linux 5.X OS CPE: cpe:/o:linux:linux_kernel:5 OS details: Linux 5.0 - 5.14
-A は情報量が多い反面、対象サーバーへの負荷とログ痕跡が大きいため、自社サーバーの健全性チェックや、明示的な許可のある診断業務以外では使用を避けてください。実務でのnmap活用例
11. ファイアウォール設定の動作確認
firewall-cmd や iptables で設定を変えた後、本当に意図通りに開放・閉鎖されているかは、外部から nmap で確認するのが一番確実です。# サーバー側で80・443のみ許可、他を閉じる設定をした後 # 別のクライアントPCから確認 # nmap -p 22,80,443,3306 web01.example.local PORT STATE SERVICE 22/tcp filtered ssh 80/tcp open http 443/tcp open https 3306/tcp filtered mysql
filtered は「ファイアウォールでブロックされている(応答なし)」状態、closed は「ポートは閉じているがホストは応答している」状態を意味します。意図通りにフィルタリングされているか、状態名で確認してください。12. 不要ポートの棚卸し(セキュリティ監査)
サーバー移設や年次のセキュリティチェックで「開いているポートの棚卸し」を行う場面はよくあります。# 全ポートスキャン結果をファイルに保存 # sudo nmap -p 1-65535 -sV 192.168.1.100 -oN scan_result.txt # grep で open だけを抽出 # grep open scan_result.txt 22/tcp open ssh OpenSSH 8.7 80/tcp open http Apache httpd 2.4.53 443/tcp open ssl/http Apache httpd 2.4.53
-oN は通常フォーマット、-oX はXML、-oG はgrepしやすい形式で出力します。監査レポートに貼り付ける場合は -oN が見やすく便利です。13. NSE(Nmap Scripting Engine)で脆弱性チェック
nmap には--script オプションで追加チェックを実行できるNSEが付属しています。たとえばSSL/TLS証明書の情報や、既知の脆弱性を簡易チェックできます。# SSL証明書情報を取得 # nmap --script ssl-cert -p 443 www.example.com # HTTPヘッダ・タイトル・メソッドを総合取得 # nmap --script http-headers,http-title,http-methods -p 80,443 web01.example.local # 脆弱性カテゴリのスクリプトを一括実行(本番では要注意) # sudo nmap --script vuln -p 80,443 web01.example.local
--script vuln は疑似攻撃を含むスクリプトも実行するため、本番環境や第三者のサーバーには絶対に使わないでください。「Permission denied」や「requires root privileges」が出た時の対処法
nmapで特定のスキャンを実行すると、権限不足で失敗することがあります。# 一般ユーザーでSYNスキャンを試みた時 # nmap -sS 192.168.1.100 You requested a scan type which requires root privileges. QUITTING!
-sS(SYNスキャン)・-sU(UDPスキャン)・-O(OS推定)はrawソケットを使うため、root権限が必要・対処:
sudo nmap ... で実行するか、root権限がない環境では -sT(TCP Connectスキャン)で代用する・注意:
sudo を使ってもSELinux・AppArmorのポリシーでブロックされる環境では、別途例外設定が必要になる場合あり【重要】nmap使用時の法的・運用上の注意
nmapは強力なツールですが、使用には以下の点を必ず守ってください。自社管理下のサーバー以外に対するスキャンは、場合によっては不正アクセス禁止法や海外の類似法規に抵触する恐れがあります。・スキャン対象は自分の管理下のサーバーのみ:クラウド事業者のサーバーでも、自分の契約範囲外のIPへのスキャンは利用規約違反になる
・本番環境では事前告知:監視システムがスキャンを攻撃と検知してアラートを発することがある
・社内ネットワークでも許可を取る:セキュリティ部門やネットワーク管理者に事前連絡してから実施する
・クラウド(AWS・GCP・Azure等)の場合:各社のポリシーで「自分のリソースであっても事前申請が必要」なケースあり
この前提を守らずに安易にスキャンすると、契約解除やアカウント停止、最悪のケースで法的責任を問われる可能性もあります。便利なツールほど慎重に使うのが鉄則です。
本記事のまとめ(nmapコマンド早見表)
| やりたいこと | コマンド |
|---|---|
| ホストの主要ポートをスキャン | nmap 192.168.1.100 |
| 全ポート(1〜65535)をスキャン | nmap -p 1-65535 192.168.1.100 |
| 特定ポートだけスキャン | nmap -p 22,80,443 192.168.1.100 |
| サブネット全体をスキャン | nmap 192.168.1.0/24 |
| 稼働中ホストだけ一覧 | nmap -sn 192.168.1.0/24 |
| SYNスキャン(高速・root必須) | sudo nmap -sS -p 1-1000 192.168.1.100 |
| TCP Connectスキャン(一般ユーザー可) | nmap -sT -p 1-1000 192.168.1.100 |
| UDPスキャン | sudo nmap -sU -p 53,123,161 192.168.1.100 |
| サービス名とバージョンを検出 | sudo nmap -sV -p 22,80,443 192.168.1.100 |
| 総合スキャン(OS推定・スクリプト含む) | sudo nmap -A 192.168.1.100 |
| スキャン結果をファイルに保存 | sudo nmap -p 1-65535 -sV 192.168.1.100 -oN scan_result.txt |
| SSL証明書情報を取得 | nmap --script ssl-cert -p 443 www.example.com |
ss・lsof、外部から見たポートは nmap、という使い分けを現場の習慣にしてください。Linuxの基本コマンド全般の復習をしておきたい方は、Linux 基本コマンドの解説も参考になります。
nmapの結果を「なんとなく」眺めていませんか?
開いているポートが1つでも想定外なら、それはサービス停止や情報漏洩の入口になります。外部スキャンの結果を正しく読み解き、ファイアウォールと組み合わせて守るには、ネットワークとサーバー両方の基礎が欠かせません。
ネット上の断片情報だけで判断するのではなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます