为什么我在使用 nmap 时会收到“不允许操作”的信息 - 即使以 root 身份执行?
$ sudo nmap 192.168.1.2
Starting Nmap 7.12 ( https://nmap.org ) at 2017-01-13 02:12 CST
sendto in send_ip_packet_sd: sendto(5, packet, 44, 0, 192.168.1.2, 16) => Operation not permitted
Offending packet: TCP 192.168.1.1:53769 > 192.168.1.2:2099 S ttl=47 id=47294 iplen=44 seq=2821662280 win=1024 <mss 1460>
...
Omitting future Sendto error messages now that 10 have been shown. Use -d2 if you really want to see them.
这不是 iptables 问题 - 我的 OUTPUT 链是开放的:
$ sudo iptables -L OUTPUT
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
现在,我这里确实有一些不同的接口,带有 VLAN 和网桥。这适用于某些接口,但不适用于其他接口:
br0
:桥接eth0
(未标记)和vbox0
(使用 VirtualBox),有 IP192.168.1.1
-> 不工作(上图)。- 对于踢球来说,
vbox0
从桥上移除并不能解决任何问题。
- 对于踢球来说,
eth0.2
:VLAN 2,有IP192.168.2.1
。在此子网中的地址上执行 nmap 按预期工作 -> 工作。eth0
这似乎很重要,因为它与(上面)使用相同的物理网卡。
vbox1
: 有IP192.16.3.1
。在此子网中的地址上执行 nmap 按预期工作 -> 工作。
这是一个物理工作站 - 不在任何可能在此施加额外限制的虚拟化或容器下运行。
桥:
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.0015171970fc no eth0
vbox0
-sT
当然,我可以通过使用权限较低的 TCP 连接扫描 ( ) 而不是默认的 TCP SYN 扫描 ( )来解决此问题-sS
- 但这并不能解释为什么会发生这种情况。
以太网桥接是否有任何已知的限制,或者我应该考虑的其他问题?
编辑(2017-01-14):
- 尝试在干净的虚拟机(i7 物理系统上的 2 个 vCPU)中进行复制。即使设置了网桥后,也无法重现。
- 禁用所有以太网卸载选项(使用 ethtool)没有任何帮助。
- 运行最新的从源代码编译的 Nmap 7.40 没有任何帮助。
- 这似乎是一个内核问题? http://seclists.org/nmap-dev/2016/q4/131。不知道为什么我无法在虚拟机上重现,尽管版本相同。也可能是特定于硬件/驱动程序的...
- 这看起来是
iptable_nat
当前 4.8.x 内核中模块的问题:https://bugzilla.redhat.com/show_bug.cgi?id=1402695
- 这看起来是
- 扫描仍在运行。这似乎只会影响扫描的开始 - 我仍然担心,因为我可能会丢失结果。
- 它表示前 10 条之后的所有消息都已被省略。然而,即使按照
-d2
提示重复操作后,我仍然只看到 10 个。(不过,这本身可能是一个错误。) - 如果我重复扫描所列出的给定端口(例如
-p 2099
上面显示的示例),它会成功扫描该端口 - 因此某些端口并不被阻止。
- 它表示前 10 条之后的所有消息都已被省略。然而,即使按照
- 跑步可以
--max-parallelism=1
大大减少这种情况的发生。- 设置为 50 似乎没有帮助。
- 设置为 30 似乎对于单个主机来说大约有一半的时间有效 - 但最终仍然开始失败子网扫描。
- 逐渐降低值会延长子网扫描以观察任何故障所需的时间 - 但即使使用 1 最终也会失败。
- 这似乎不是 nmap 本身的并行性问题。使用
parallel
和运行多个并发 nmap 扫描--max-parallelism=1
会再次增加问题的发生率。
主机信息:Ubuntu 16.10,内核 4.8.0-34-generic #36-Ubuntu。英特尔(R) 酷睿(TM) i7-2600S,32 GB 内存。
答案1
这看起来是iptable_nat
当前 4.8.x Linux 内核 (< 4.8.16) 中模块的问题,根据https://bugzilla.redhat.com/show_bug.cgi?id=1402695。
4.9 内核包含一个“真正的”修复 - 但对于 Ubuntu,我猜我们必须等待 Ubuntu 17.04 (Zesty Zapus) 才能正式看到这一点。 (4.9 将包含在那里,根据发行说明)。
至于 Ubuntu 16.10 (Yakkety Yak),看起来固定的 4.8.16 内核正在等待发布https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1654584,其中包括以下修复:
恢复“netfilter:nat:将 nat bysrc 哈希转换为 rhashtable”
恢复“netfilter:将 nat hlist_head 移动到 nf_conn”
我使用更新到这个内核http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.8.16/以及说明https://wiki.ubuntu.com/Kernel/MainlineBuilds。 (我相信随着其他更新的到来,它将像往常一样进一步升级。)这不仅解决了我的问题,而且带来了扫描性能的巨大提高。