Nmap によるポートスキャンの実習

NmapBeginner
オンラインで実践に進む

はじめに

この実験では、強力なネットワークスキャンツールである Nmap を使用して、さまざまなポートスキャンを実行する方法を学習します。TCP コネクトスキャン、SYN スキャン、特定のポート、ポート範囲、一般的な「トップポート」のスキャン方法など、さまざまなスキャンタイプを探ります。この実験の終わりまでに、ターゲットシステム上のオープンポートとサービスを発見するために Nmap を使用する実践的な理解を得られるでしょう。これは、ネットワークの偵察とセキュリティ監査における基本的なスキルです。

各スキャンタイプには、固有の特性と使用事例があります。たとえば、TCP コネクトスキャンは完全な TCP 3 ウェイハンドシェイクを実行するため、信頼性がありますが、検出されやすいです。対照的に、SYN スキャンはハンドシェイクを完了しないため、よりステルス性があります。Xfce ターミナルで Nmap コマンドを実行し、出力からさまざまなポートの状態を理解します。

nmap -sT 127.0.0.1 による TCP コネクトスキャンを実行する

このステップでは、Nmap を使用して TCP コネクトスキャンを実行します。これは、ターゲットポートとの接続確立のために、完全な TCP 3 ウェイハンドシェイクを行う基本的な信頼性の高い TCP スキャン方法です。信頼性が高い一方で、この方法は他のスキャンタイプよりもステルス性が低く、接続を完全に確立してから切断するため、ターゲットシステムによって簡単にログ記録される可能性があります。

TCP 3 ウェイハンドシェイクを簡単に確認しましょう。

  1. SYN (同期): スキャナーは、ターゲットポートに SYN パケットを送信します。
  2. SYN/ACK (同期/確認): ポートが開いている場合、ターゲットは SYN/ACK パケットで応答します。
  3. ACK (確認): スキャナーは、ACK パケットをターゲットに送信して接続を完了します。

Nmap の -sT オプションは、この完全な TCP コネクトスキャンを明示的に実行します。TCP 接続を完了するため、ルート権限は必要ありませんが、後続のステップと整合性を保つために sudo を使用します。

それでは、127.0.0.1 (localhost) に TCP コネクトスキャンを実行してみましょう。この IP アドレスは常に自分のマシンを指すため、練習用の安全なターゲットです。

  1. Xfce ターミナルを開きます。ホームディレクトリ ~/project にいる必要があります。

  2. 次のコマンドを実行して TCP コネクトスキャンを実行します。

    sudo nmap -sT 127.0.0.1

    このコマンドは、IP アドレス 127.0.0.1 に TCP コネクトスキャン (-sT) を実行するように Nmap に指示します。labex ユーザーはパスワードなしで sudo 権限を持っているので、プロンプトが表示されたら Enter キーを押すだけです。

  3. ターミナルの出力を確認します。ローカルマシン上の一般的なポートとその状態のリストが表示されます。出力は次のようになります。

    Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000052s latency).
    Not shown: 995 closed ports
    PORT     STATE SERVICE
    22/tcp   open  ssh
    2121/tcp open  ccproxy-ftp
    2222/tcp open  EtherNetIP-1
    3001/tcp open  nessus
    8080/tcp open  http-proxy
    
    Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

    出力は、PORT 番号、その STATE、および Nmap がそのポートに関連付ける SERVICE を示しています。

    • open は、Nmap がそのポートに TCP 接続を確立したことを意味します。
    • closed は、Nmap が SYN パケットに応答して TCP RST (リセット) パケットを受信したことを意味し、ポートがリスニングしていないことを示します。
    • ポート 22212122223001、および 8080open であることに注意してください。カスタムサービス (2121、2222、8080) は、ポート 22 の SSH とポート 3001 の別のサービスと共に、実験環境によって設定されました。

nmap -sS 127.0.0.1 による SYN スキャンを実行する

このステップでは、「ハーフオープン」スキャンとも呼ばれる SYN スキャンを実行する方法を学びます。この手法は、TCP 3 ウェイハンドシェイクを完了しないため、TCP コネクトスキャンよりも一般的にステルス性が高く、ターゲットシステムのアプリケーションによってログ記録される可能性が低くなります。

SYN スキャンは、以下の手順で動作します。

  1. SYN (同期): スキャナーは、ターゲットポートに SYN パケットを送信します。
  2. SYN/ACK (同期/確認): ポートが開いている場合、ターゲットは SYN/ACK パケットで応答します。
  3. RST (リセット): 接続を完了するために ACK を送信する代わりに、スキャナーはすぐに RST パケットを送信して接続を強制的に終了します。

完全な TCP 接続が確立されないため、SYN スキャンはより非侵襲的で、完了した接続のみを監視する単純なファイアウォールルールを回避することがよくあります。ただし、SYN スキャンは通常、生のパケットを作成するためにルート権限が必要であり、そのため sudo を使用します。

それでは、127.0.0.1 に SYN スキャンを実行してみましょう。

  1. Xfce ターミナルにいることを確認します。

  2. 次のコマンドを実行します。

    sudo nmap -sS 127.0.0.1

    このコマンドは、IP アドレス 127.0.0.1 に SYN スキャン (-sS) を実行するように Nmap に指示します。パスワードを求められたら、Enter キーを押します。

  3. 出力を確認します。出力は TCP コネクトスキャンと似ていますが、基礎となるメカニズムは異なります。

    Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.0000040s latency).
    Not shown: 995 closed ports
    PORT     STATE SERVICE
    22/tcp   open  ssh
    2121/tcp open  ccproxy-ftp
    2222/tcp open  EtherNetIP-1
    3001/tcp open  nessus
    8080/tcp open  http-proxy
    
    Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

    STATE 列は、各ポートの状態を示します。

    • open は、Nmap が SYN パケットに応答して SYN/ACK パケットを受信したことを意味します。
    • closed は、Nmap が RST パケットを受信したことを意味します。
    • filtered (他のシナリオで表示される可能性があります) は、Nmap がポートが開いているか閉じているかを判断できなかったことを意味し、ネットワークフィルタリング (ファイアウォールなど) が Nmap がポートに到達するのを防いでいることを示します。

特定ポートをスキャンする(nmap -p 2222,8080,2121 127.0.0.1

このステップでは、Nmap を使用してターゲットシステム上の特定のポートをスキャンする方法を学びます。これは、すべての一般的なポートをスキャンするのではなく、特定のサービスやアプリケーションに焦点を当てたい場合に特に役立ちます。

Nmap の -p オプションを使用すると、スキャンする正確なポートを指定できます。個々のポートをコンマで区切って指定したり、ポートの範囲を指定したり、その両方組み合わせたりできます。この例では、127.0.0.1 のポート 22228080、および 2121 をスキャンします。これらのポートは、実験環境の初期化スクリプトによって設定されたカスタム TCP サービスです。

  • ポート 2222 は SSH サービスを実行するように設定されています。
  • ポート 8080 は Nginx Web サーバーを実行するように設定されています。
  • ポート 2121 は FTP サービスを実行するように設定されています。
  1. Xfce ターミナルにいることを確認します。

  2. 次のコマンドを実行します。

    sudo nmap -p 2222,8080,2121 127.0.0.1

    このコマンドは、Nmap に IP アドレス 127.0.0.1 のポート 22228080、および 2121 だけをスキャン (-p 2222,8080,2121) するよう指示します。sudo が使用されているため、Nmap はデフォルトの SYN スキャン方法を使用します。パスワードを求められたら、Enter キーを押します。

  3. 出力を確認します。指定された 3 つのポートすべてが open として報告されているはずです。

    Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000028s latency).
    
    PORT     STATE SERVICE
    2121/tcp open  ccproxy-ftp
    2222/tcp open  EtherNetIP-1
    8080/tcp open  http-proxy
    
    Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

    出力は、指定されたポートの状態を確認します。open は、Nmap が SYN/ACK パケットを受信し、ポートが接続を積極的に待機していることを示します。

ポート範囲をスキャンする(nmap -p 1-9000 127.0.0.1

このステップでは、Nmap を使用してターゲットシステム上のポート範囲をスキャンする方法を学びます。これは、特定の数字の範囲内のすべてのオープンポートを特定する場合に役立ち、非標準ポートで動作しているサービスを発見するのに役立ちます。

前のステップで学んだように、Nmap の -p オプションはポートを指定するために使用できます。ポート範囲をスキャンするには、開始-終了 の構文を使用します。ここで、開始 は開始ポート番号、終了 は終了ポート番号です。この例では、127.0.0.1 のポート 1 から 9000 までをスキャンします。この範囲は、実験環境で設定されたカスタムサービス (2121、2222、8080) を含めるために選択されています。

  1. Xfce ターミナルにいることを確認します。

  2. 次のコマンドを実行します。

    sudo nmap -p 1-9000 127.0.0.1

    このコマンドは、Nmap に IP アドレス 127.0.0.1 のポート 1 から 9000 までをスキャン (-p 1-9000) するよう指示します。Nmap はデフォルトの SYN スキャン方法を使用します。パスワードを求められたら、Enter キーを押します。

  3. 出力を確認します。指定された範囲内のすべてのオープンポートのリストが表示されます。これは、チェックするポート数が多いため、特定のポートをスキャンするよりも時間がかかる場合があります。

    Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.0000020s latency).
    Not shown: 8992 closed ports
    PORT     STATE SERVICE
    22/tcp   open  ssh
    953/tcp  open  rndc
    2121/tcp open  ccproxy-ftp
    2222/tcp open  EtherNetIP-1
    3001/tcp open  nessus
    3002/tcp open  exlm-agent
    5353/tcp open  mdns
    8080/tcp open  http-proxy
    
    Nmap done: 1 IP address (1 host up) scanned in 0.16 seconds

    出力は、ローカルマシン上の 1-9000 範囲内のポートの状態を示します。カスタムポート (2121、2222、8080) が open として表示されるだけでなく、SSH (22)、DNS 関連のサービス (953、5353)、その他のサービス (3001、3002) も表示されます。Not shown: 8992 closed ports は、大規模な範囲のスキャンでは、Nmap がデフォルトで open または filtered ポートのみを表示することを示しています。

上位ポートをスキャンする(nmap --top-ports 10 127.0.0.1

このステップでは、Nmap の --top-ports オプションを使用して、ターゲットシステム上で最も一般的なポートをスキャンする方法を学びます。これは、65535 個のすべての可能なポートをスキャンすることなく、ホスト上で動作している可能性の高いサービスを迅速に特定するのに役立ちます。Nmap は、統計データからコンパイルされた、最も頻繁に使用されるポートの内部リストを保持しています。

--top-ports オプションは、Nmap にこれらの最も一般的なポートの指定された数をスキャンするように指示します。たとえば、--top-ports 10 は、最も一般的な 10 個の TCP ポートをスキャンします。

この例では、127.0.0.1 の上位 10 個の最も一般的なポートをスキャンします。

  1. Xfce ターミナルにいることを確認します。

  2. 次のコマンドを実行します。

    sudo nmap --top-ports 10 127.0.0.1

    このコマンドは、Nmap に IP アドレス 127.0.0.1 の上位 10 個の最も一般的なポート (--top-ports 10) をスキャンするように指示します。Nmap はデフォルトの SYN スキャン方法を使用します。パスワードを求められたら、Enter キーを押します。

  3. 出力を確認します。ローカルマシンの上位 10 個のポートの状態が表示されます。

    Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000010s latency).
    
    PORT     STATE  SERVICE
    21/tcp   closed ftp
    22/tcp   open   ssh
    23/tcp   closed telnet
    25/tcp   closed smtp
    80/tcp   closed http
    110/tcp  closed pop3
    139/tcp  closed netbios-ssn
    443/tcp  closed https
    445/tcp  closed microsoft-ds
    3389/tcp closed ms-wbt-server
    
    Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds

    出力は、上位 10 個の最も一般的なポートの状態を示します。8080、2121、2222 などのカスタムポートが、このリストにないことに気付くかもしれません。これは、これらのポートがグローバルな上位 10 個の最も一般的なポートの中でなく、実験環境固有であるためです。--top-ports は効率的ですが、それほど一般的ではないにもかかわらず重要なサービスを見落とす可能性があることを示しています。

まとめ

この実験では、Nmap を使用したさまざまなポートスキャンを実行する方法を学びました。127.0.0.1 に対して -sT オプションを使用した TCP コネクトスキャンを実行し、関連する完全な TCP 3 ウェイハンドシェイクを理解しました。また、-sS オプションを使用した 127.0.0.1 への SYN スキャンを実行し、よりステルス性の高い半開スキャンを行いました。-p 2222,8080,2121 を使用して特定のポートをスキャンし、-p 1-9000 を使用して 127.0.0.1 に対するより広いポート範囲をスキャンしました。最後に、--top-ports 10 を使用して 127.0.0.1 に対する最も一般的なポートを効率的にスキャンする方法を学びました。これらの実践的な演習を通して、Nmap の出力の解釈と、ネットワーク偵察のためのさまざまなスキャンタイプの理解に関する実用的な経験を積みました。