2026年9月5日

2026年9月5日

nmap のスキャン結果の読み方と注意点|open・closed・filtered の意味、結果の保存と差分、WordPress サーバーで閉じるべきポートの手順

nmap の結果を読むときの要点は、各ポートの STATE 欄が「open(応答している)」「closed(届いたが誰も待ち受けていない)」「filtered(ファイアウォールで捨てられて判定できない)」のどれかを見分けることです。自分の WordPress サーバーで望ましいのは、22・80・443 が open、それ以外が filtered(ファイアウォールで遮断)という状態です。closed が多い場合は、ファイアウォールが入っていない可能性があります。

結論を先にまとめます。

  • open は実際にサービスが待ち受けています。不要なものは閉じます。
  • closed はパケットが届いてサーバーが「このポートは使っていない」と答えた状態で、ファイアウォールで守られていないことを意味します。
  • filtered はファイアウォールなどが応答を返さなかった状態で、外からは判定できません。守られているポートはこう見えます。
  • 結果は -oN(人が読む形式)か -oX(XML)で保存し、ndiff で前回との差分だけを見ると、サーバーの変化に気づけます。
  • コマンドの基本と、サービス検出や PHP の露出の確認はnmap の使い方とポートスキャンの基本にまとめています。この記事はその続きです。
nmap の 3 つの状態の比較。open は待ち受けあり、filtered はファイアウォールで判定不能、closed は届いたが待ち受けなし

結果の見方: STATE の意味

nmap が報告するポートの状態は 6 種類あります。自分のサーバーの確認でよく見るのは最初の 3 つです。

状態 意味 自分のサーバーでの受け取り方
open アプリケーションが TCP 接続や UDP データグラムを受け付けている 必要なサービスだけなら正常。不要なら閉じる
closed ポートには届くが、待ち受けているアプリケーションがない ファイアウォールで遮断されていない。外からサーバーの存在と OS の推定材料が見える
filtered パケットフィルター(ファイアウォールやルーターの規則)が妨げていて、open か判定できない 遮断されている。望ましい状態
unfiltered 届くが open か closed か判定できない。ACK スキャン(-sA)でだけ出る 通常の確認では出ない
`open filtered` open か filtered か判定できない。UDP スキャンなど、open でも応答がない方式で出る UDP の確認で多く出る。必要なら -sV で追い確認
`closed filtered` closed か filtered か判定できない。IP ID idle スキャンでだけ出る 通常の確認では出ない

filtered と closed の違いが重要な理由

ファイアウォールの設定には「拒否して応答を返す(REJECT)」と「捨てて何も返さない(DROP)」の 2 通りがあります。REJECT だと nmap には closed に近い見え方になり、DROP だと filtered になります。外からの見え方としては DROP(filtered)の方が、サーバーの情報を与えません。ufw の既定(deny)や firewalld の既定ゾーンは DROP 相当なので、通常は不要なポートが filtered と出ます。

逆に、全ポートが closed で 22・80・443 だけ open という結果なら、サービスは最小限でもファイアウォールが動いていません。クラウドのセキュリティグループや OS のファイアウォールを確認してください。

「Host seems down」と出るとき

Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn

nmap はポートを調べる前に、対象が起動しているかを ping 相当の問い合わせで確かめます。ICMP をファイアウォールで止めているサーバーでは、この段階で「停止中」と判断されてスキャンが行われません。自分のサーバーが動いていることが分かっているなら、-Pn で確認を飛ばします。

nmap -Pn -sV -p- example.com

逆に、ポートを調べずに「どのホストが応答するか」だけを知りたいときは -sn です。

結果を保存する

スキャン結果は画面に出すだけでなく、ファイルに保存します。後で比べるためと、サーバーの引き継ぎ資料にするためです。

オプション 形式 用途
-oN ファイル 画面と同じ「通常」形式 人が読む、記録に残す
-oX ファイル XML ndiff での比較、他のツールでの処理
-oG ファイル grep しやすい 1 行形式 シェルスクリプトでの処理
-oA ベース名 上の 3 つをまとめて出力 迷ったらこれ
nmap -sV -p- -oA scan-$(date +%Y%m%d) example.com

scan-20261109.nmap・.xml・.gnmap の 3 つができます。

前回との差分を見る: ndiff

nmap に同梱される ndiff は、2 つの XML 出力を比べて、ホストやポートの変化だけを表示します。毎月 1 回スキャンして保存し、前回と比べる運用にすると、「気づかないうちに 3306 が開いていた」「証明書の発行者が変わった」といった変化を追えます。

ndiff scan-20261009.xml scan-20261109.xml

出力では、前回にあって今回にない行が -、今回だけにある行が + で示されます。-v を付けると変化のない行も含めて表示されます。XML で欲しいときは --xml です。

cron で月初に自動実行し、差分があるときだけメールで送る例です(スキャンはサーバーの外のマシンで動かします)。

#!/bin/bash
# /usr/local/bin/monthly-scan.sh : 外部の管理用マシンで実行
TARGET=example.com
DIR=/var/log/portscan
TODAY=$DIR/scan-$(date +%Y%m%d).xml
LAST=$(ls -1t $DIR/scan-*.xml 2>/dev/null | head -n 1)
nmap -Pn -sV -p- -oX "$TODAY" "$TARGET" >/dev/null
if [ -n "$LAST" ]; then
  ndiff "$LAST" "$TODAY" | grep -E '^[+-]' | mail -s "portscan diff $TARGET" admin@example.com
fi

不要なポートを閉じる手順

結果に不要な open があったときは、「サービス側の待ち受けを絞る → ファイアウォールで閉じる → 再スキャンで確認」の順に進めます。ファイアウォールだけで閉じると、設定ミスや再起動時の順序で一時的に露出することがあるため、サービス側も直します。

1. サービスの待ち受けを 127.0.0.1 に限定する

WordPress で使うミドルウェアは、同じサーバー内からの接続だけで足ります。

サービス 設定の例
MySQL / MariaDB bind-address = 127.0.0.1(/etc/mysql/mariadb.conf.d/50-server.cnf など)
PHP-FPM listen = /run/php/php8.3-fpm.sock(Unix ソケット)か listen = 127.0.0.1:9000
Redis bind 127.0.0.1 -::1 と protected-mode yes
Memcached 起動オプション -l 127.0.0.1

変更後にサービスを再起動し、サーバー内で ss -tlnp を実行して、0.0.0.0:3306 のような全アドレスでの待ち受けが残っていないことを確認します。

sudo ss -tlnp

2. ファイアウォールで閉じる

ufw(Ubuntu / Debian)では、既定で着信を拒否し、必要なポートだけ許可します。

sudo ufw default deny incoming
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp   # 管理者の IP だけ SSH を許可
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

firewalld(RHEL 系)では、public ゾーンから不要なサービスを外し、必要なものだけ残します。

sudo firewall-cmd --permanent --remove-service=cockpit
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

SSH を自分の IP だけに絞るときは、先に自分の IP が固定であること(または VPN 経由であること)を確かめてください。誤ると自分も入れなくなります。クラウドではセキュリティグループ(AWS)やネットワークセキュリティグループ(Azure)でも同じポートだけを許可します。

3. 外から再スキャンして確認する

nmap -Pn -p 22,80,443,3306,9000,6379,11211 example.com

3306 以降が filtered になっていれば完了です。closed のままなら、ファイアウォールが REJECT で応答しているか、規則が反映されていません。

実行時の注意

  • 本番サーバーの負荷: -p- と -sV を組み合わせたスキャンは数千の接続を作ります。アクセスの少ない時間帯に実行し、-T5 のような速い設定は使わないでください。
  • 侵入検知との兼ね合い: fail2ban や WAF を入れているサーバーでは、スキャン元の IP が遮断されることがあります。管理用マシンの IP を除外(fail2ban の ignoreip)するか、遮断を想定して実行してください。
  • クラウドの規約: AWS・Azure・Google Cloud などは、自分のリソースへの脆弱性テストに関する方針を公開しています。ポートスキャン程度は多くの場合許されていますが、最新の方針を確認してください。
  • 許可のないサーバーには使わない: 対象が自分の管理下にない場合は、管理者の書面による許可が必要です。

WordPress の運用での位置づけ

nmap は「外から届く入口」を確認する道具で、WordPress 本体の脆弱性やプラグインの問題は分かりません。入口を 22・80・443 に絞ったうえで、WordPress 側ではログイン試行の制限や更新の適用、ファイルの改ざん検知(Tripwireなど)を組み合わせます。不正アクセスの兆候をログから見つける方法はサーバーへの不正アクセスを検知する方法にまとめています。

よくある質問

すべてのポートが filtered で、80 と 443 も見えません

Web サーバーが止まっているか、スキャン元の IP がファイアウォールや WAF で遮断されています。ブラウザーでサイトが開けるなら後者です。管理用マシンの IP が fail2ban などで禁止されていないかを確認してください。

closed と filtered はどちらが安全ですか

外からの見え方としては filtered(応答を返さない)の方が、サーバーの情報を与えません。closed は「ファイアウォールが無い、または REJECT で応答している」状態です。ufw や firewalld の既定の拒否動作にしておけば filtered になります。

UDP のスキャンで open|filtered ばかり出ます

UDP は、サービスが応答しない設計のものが多く、open と filtered を区別できません。必要なポートだけに絞って -sV を付けると、応答を引き出して open と判定できる場合があります。

スキャン結果をどのくらいの頻度で取るべきですか

サーバーの構成を変えた直後と、月に 1 回程度の定期実行が目安です。保存した XML を ndiff で前回と比べ、変化があったときだけ確認する運用にすると負担が少なくて済みます。

自分の IP が fail2ban で遮断されました

スキャンによる多数の接続が攻撃と判定されたためです。サーバー側で sudo fail2ban-client set <jail名> unbanip <IP> で解除し、管理用マシンの IP を jail.local の ignoreip に加えてください。

まとめ

  • nmap の STATE は open(待ち受けあり)、closed(届いたが待ち受けなし。ファイアウォールが無い)、filtered(遮断されて判定不能。守られている)で読み分けます。
  • 結果は -oA で保存し、ndiff で前回との差分だけを見る運用にすると、サーバーの変化に気づけます。
  • 不要な open は、サービスの待ち受けを 127.0.0.1 に限定し、ufw / firewalld とクラウドのセキュリティグループで閉じ、外から再スキャンして確認します。

関連記事

参考: Nmap Reference Guide – Port Scanning Basics(6 つの状態の定義)、Options Summary、Ndiff Reference Guide、Legal Issues

更新履歴: 2026-11-09 全面改訂(定型文の本文を、結果の状態の読み方、保存と差分、不要なポートを閉じて再確認する手順に置き換え)。この記事はワードプレス博士(ライトセンド株式会社)が運営しています。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲