2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【セキュリティ】Nmap 基本ポートスキャン

Last updated at Posted at 2025-10-21

はじめに

Nmap の基本的なポートスキャン(TCP connect / TCP SYN / UDP)をわかりやすく整理しました。コマンド例、フラグの意味、ポート指定・タイミング調整、実務での注意点まで。練習用の安全なコマンド例も載せているので、まずは自分のラボで試してみてください。

ポートの概念(ざっくり)

  • ポート:IPアドレス上の「サービス識別子」。例:HTTP は通常 TCP 80、HTTPS は TCP 443。
  • 状態の概念(Nmap)
    • open:サービスがリッスンしている
    • closed:到達可能だがサービスなし
    • filtered:パケットがフィルタ(FW等)で届かない(判定不能)
    • unfiltered / open|filtered / closed|filtered:スキャン方式に依存する曖昧な状態

TCP と UDP の違い(スキャン観点)

  • TCP:コネクション型(3-way handshake)。応答パターンから open/closed が判定しやすい。
  • UDP:コネクションレス。閉じているポートは ICMP Port Unreachable を返すことが多いが、開いているポートは応答しないことがあるため判定が難しい(open|filtered が多くなる)。

スキャンの種類と仕組み(実務ポイント付き)

1. TCP Connect Scan (-sT)

  • 何をするか:通常の TCP 3-way handshake を完了させて開いているかを確認。非特権ユーザーでも実行可能。
  • 利点:いつでも実行でき、確実。
  • 欠点:フル接続がログに残る(ターゲット側に記録されやすい)。
  • コマンド例
nmap -sT TARGET_IP

2. TCP SYN Scan (-sS) — デフォルト(権限必要)

  • 何をするか:SYN を送り、SYN/ACK を受け取ったら RST を送り接続を完了させずに判定する(half-open)。
  • 利点:接続完了しないためログに残りにくい(ただし IDS によって検知されることはある)。
  • 欠点:privileged(root/sudo)でないと実行できない。
  • コマンド例
sudo nmap -sS TARGET_IP

3. UDP Scan (-sU)

  • 何をするか:UDP パケットを送り、ICMP Destination Unreachable (Type 3, Code 3) が返ってきたら closed、応答が無ければ open または filtered と判断。
  • 利点:UDP サービス(DNS, SNMP, NTP, RPC など)を検出できる。
  • 欠点:遅い(多くのホストが ICMP を制限)、パケットロスやフィルタで不確定が増える。
  • コマンド例
sudo nmap -sU TARGET_IP

ポート指定・スキャン範囲

  • 個別ポート:-p22,80,443
  • 範囲:-p1-1023(1〜1023)
  • 全ポート:-p-(1〜65535)
  • 上位のよく使う:-F(100の最も一般的なポート)
  • --top-ports N:よく使われる N ポートだけスキャン

タイミングとスループット(速度調整)

  • -T<0-5>:テンプレート(0:paranoid → 5:insane)。通常は -T3(normal)、実務でのステルスは -T0/1、CTFやラボは -T4 がよく使われます。
  • パケットレート:--min-rate / --max-rate
    • 例:--max-rate 50(秒間 50 パケット以下)
  • 並列性:--min-parallelism / --max-parallelism
    • 例:--min-parallelism 100

実務ヒント:IDS 回避を狙うなら -T0--max-rate を低くする。ただし非常に遅くなる。


実用的なコマンド例(使い分け)

  • 1000 ポートの基本スキャン(非特権)
nmap -sT TARGET_IP
  • 管理者権限で SYN スキャン(高速)
sudo nmap -sS TARGET_IP
  • SYN + UDP を同時に走らせる
sudo nmap -sS -sU TARGET_IP
  • すべてのポートをスキャン(時間がかかる)
sudo nmap -p- TARGET_IP
  • 上位 20 ポートを速く確認
sudo nmap --top-ports 20 TARGET_IP
  • ステルス寄り(極遅)
sudo nmap -sS -T0 --max-rate 1 TARGET_IP
  • -F(100ポート)+詳細出力
nmap -F -v TARGET_IP

出力の読み方(例)

PORT    STATE         SERVICE
22/tcp  open          ssh
68/udp  open|filtered dhcpc
111/udp open          rpcbind
  • open は確実にサービスあり。
  • open|filtered は応答無しで「開いているか、フィルタでブロックされているか不明」。
  • filtered は到達不能(多くは FW)。

Wireshark での観察(学習用途)

  • -sT:SYN → SYN/ACK → ACK(コネクション完了) → RST(切断) のフローが見える。
  • -sS:SYN → SYN/ACK → RST(半端) のみ(3-way 完了しない)。
  • UDP:ICMP Port Unreachable が返るかどうかで判定。

チェックリスト・良い習慣

  • 常にスキャン対象の許可を確認する(許可がないと違法になる)。
  • 不要に大きなスキャン(-p- で全ポート、高速設定)を公開ネットワークで実行しない。
  • スキャン前に --top-ports-F でスモールスタート → 必要に応じて拡張。
  • SYN スキャンは root 必須。権限のない環境で -sS を誤って実行しようとしない。
  • ログを見やすくするために -oN(ノーマル出力)や -oX(XML)で保存する。
    • 例:sudo nmap -sS -oN scan.txt TARGET_IP

よくある組み合わせ(実用テンプレ)

  • 詳細な TCP+サービス検出 + スクリプト
sudo nmap -sS -sV -O --script=default TARGET_IP
  • -sV:サービスバージョン検出
  • -O:OS 検出
  • --script=default:Nmap スクリプトエンジンを使った基本チェック
  • ステルスに寄せる(権限あり)
sudo nmap -sS -T1 --max-rate 5 --top-ports 100 TARGET_IP

まとめ

  • 非特権ユーザー:-sT(TCP Connect)で始める。確実だがログに残る。
  • 権限あり(root/sudo):-sS(SYN)を使うとログに残りにくい(ただし IDS に検知される場合あり)。
  • UDP スキャンは遅く不確定要素が多いが、UDP サービスを見つけるには必須。
  • ポート範囲・タイミング・レートをうまく調整して、目的(速さ・網羅性・ステルス)に合わせる。

参考(自分用メモ・コマンド)

  • 基本:nmap -sS TARGET(sudo) / nmap -sT TARGET(非特権)
  • UDP:sudo nmap -sU TARGET
  • 全ポート:-p-
  • 速さ調整:-T0-T5 / --max-rate / --min-parallelism
  • 保存:-oN out.txt / -oX out.xml

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?