使用 Nmap 探测 IPv6 端口与防火墙

Nmap (Network Mapper) 是一款强大的开源网络扫描和安全审计工具。本文将介绍如何使用 nmap 探测远程 IPv6 地址的 TCP 和 UDP 端口监听状况以及分析防火墙配置。

  • 安装 Nmap: 确保你的系统上已经安装了 Nmap。
  • IPv6 连接: 你的机器需要有 IPv6 连接才能扫描 IPv6 地址。
  • 权限: 某些扫描类型(如 SYN 扫描 -sS)需要管理员或 root 权限。

要同时扫描一个 IPv6 地址的 TCP 和 UDP 端口,你可以使用 -sS (TCP SYN 扫描) 和 -sU (UDP 扫描)。SYN 扫描速度快且隐蔽,但需要高权限。如果无高权限,可改用 -sT (TCP Connect 扫描)。

这是一个基本的扫描命令,用于扫描目标 IPv6 地址上 nmap 默认的常见端口:

sudo nmap -6 -sS -sU -v <target-ipv6-address>

命令解析:

  • sudo: 使用管理员权限运行,-sS 扫描需要。
  • -6: 显式启用 IPv6 扫描。
  • -sS: TCP SYN 扫描(“半开放"或"隐形"扫描)。
  • -sU: UDP 扫描。
  • -v: 增加详细度,nmap 会在扫描过程中显示更多信息。
  • <target-ipv6-address>: 替换为你要扫描的目标 IPv6 地址。

如果你想扫描特定的端口,可以使用 -p 参数:

# 扫描 TCP 端口 80, 443 和 UDP 端口 53
sudo nmap -6 -sS -sU -p T:80,443,U:53 <target-ipv6-address>

# 扫描 1 到 1000 的所有 TCP 和 UDP 端口
sudo nmap -6 -sS -sU -p 1-1000 <target-ipv6-address>

# 扫描所有 65535 个 TCP 端口 (非常耗时)
sudo nmap -6 -sS -p- <target-ipv6-address>

注意: 全端口 UDP 扫描 (-sU -p-) 会非常非常慢,因为 UDP 是无连接协议,nmap 需要等待响应超时来判断端口状态。

nmap 的扫描结果可以帮助我们推断防火墙的存在和规则。

nmap 会将端口状态报告为以下几种:

  • open: 端口是开放的,应用程序正在监听连接。
  • closed: 端口是关闭的。这表示 nmap 的探测包到达了目标主机,但没有应用程序在监听该端口。这通常意味着没有防火墙拦截。
  • filtered: nmap 无法确定端口是开放还是关闭,因为探测包被防火墙、路由器规则或其它网络设备丢弃了。nmap 没有收到任何响应。这是存在防火墙的最明显迹象。
  • unfiltered: 端口可访问,但 nmap 无法确定其是开放还是关闭。只有 ACK 扫描 (-sA) 会将端口标记为此状态。
  • open|filtered: nmap 无法确定端口是开放还是被过滤。常见于 UDP 扫描。

如果大量端口显示为 filtered,那么几乎可以肯定目标主机或其网络上存在防火墙。

ACK 扫描 (-sA) 是一种专门用于探测防火墙规则集的扫描类型。它不检查端口是否开放,而是检查防火墙是否允许 ACK 包通过。

sudo nmap -6 -sA -v <target-ipv6-address>
  • -sA: TCP ACK 扫描。

结果解读:

  • unfiltered: 表示 ACK 包通过了防火墙(或没有防火墙)。
  • filtered: 表示 ACK 包被防火墙拦截/丢弃。

通过 ACK 扫描,你可以了解防火墙是有状态的(Stateful)还是无状态的(Stateless),并确定哪些端口是防火墙允许通过的。

为了获得最全面的信息,你可以结合版本扫描 (-sV) 和默认脚本扫描 (-sC)。

sudo nmap -6 -sS -sU -sV -sC -v <target-ipv6-address>
  • -sV: 探测开放端口上运行的服务及其版本信息。
  • -sC: 使用默认的脚本集进行扫描,可以发现一些常见的漏洞和更多配置信息。

这个命令会提供非常详细的报告,包括开放的端口、运行的服务、版本号,有时甚至能直接识别出操作系统类型和防火墙产品。