使用 Nmap 探测 IPv6 端口与防火墙
Nmap (Network Mapper) 是一款强大的开源网络扫描和安全审计工具。本文将介绍如何使用 nmap
探测远程 IPv6 地址的 TCP 和 UDP 端口监听状况以及分析防火墙配置。
1 基本要求
- 安装 Nmap: 确保你的系统上已经安装了 Nmap。
- IPv6 连接: 你的机器需要有 IPv6 连接才能扫描 IPv6 地址。
- 权限: 某些扫描类型(如 SYN 扫描
-sS
)需要管理员或 root 权限。
2 扫描 IPv6 地址的 TCP 和 UDP 端口
要同时扫描一个 IPv6 地址的 TCP 和 UDP 端口,你可以使用 -sS
(TCP SYN 扫描) 和 -sU
(UDP 扫描)。SYN 扫描速度快且隐蔽,但需要高权限。如果无高权限,可改用 -sT
(TCP Connect 扫描)。
2.1 基本扫描命令
这是一个基本的扫描命令,用于扫描目标 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 地址。
2.2 扫描特定端口或所有端口
如果你想扫描特定的端口,可以使用 -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
需要等待响应超时来判断端口状态。
3 识别防火墙配置
nmap
的扫描结果可以帮助我们推断防火墙的存在和规则。
3.1 解读扫描结果
nmap
会将端口状态报告为以下几种:
open
: 端口是开放的,应用程序正在监听连接。closed
: 端口是关闭的。这表示nmap
的探测包到达了目标主机,但没有应用程序在监听该端口。这通常意味着没有防火墙拦截。filtered
:nmap
无法确定端口是开放还是关闭,因为探测包被防火墙、路由器规则或其它网络设备丢弃了。nmap
没有收到任何响应。这是存在防火墙的最明显迹象。unfiltered
: 端口可访问,但nmap
无法确定其是开放还是关闭。只有 ACK 扫描 (-sA
) 会将端口标记为此状态。open|filtered
:nmap
无法确定端口是开放还是被过滤。常见于 UDP 扫描。
如果大量端口显示为 filtered
,那么几乎可以肯定目标主机或其网络上存在防火墙。
3.2 使用 ACK 扫描探测防火墙
ACK 扫描 (-sA
) 是一种专门用于探测防火墙规则集的扫描类型。它不检查端口是否开放,而是检查防火墙是否允许 ACK 包通过。
sudo nmap -6 -sA -v <target-ipv6-address>
-sA
: TCP ACK 扫描。
结果解读:
unfiltered
: 表示 ACK 包通过了防火墙(或没有防火墙)。filtered
: 表示 ACK 包被防火墙拦截/丢弃。
通过 ACK 扫描,你可以了解防火墙是有状态的(Stateful)还是无状态的(Stateless),并确定哪些端口是防火墙允许通过的。
4 综合扫描
为了获得最全面的信息,你可以结合版本扫描 (-sV
) 和默认脚本扫描 (-sC
)。
sudo nmap -6 -sS -sU -sV -sC -v <target-ipv6-address>
-sV
: 探测开放端口上运行的服务及其版本信息。-sC
: 使用默认的脚本集进行扫描,可以发现一些常见的漏洞和更多配置信息。
这个命令会提供非常详细的报告,包括开放的端口、运行的服务、版本号,有时甚至能直接识别出操作系统类型和防火墙产品。