nmap 原始数据包权限不起作用(“不允许操作”,即使是 root)

nmap 原始数据包权限不起作用(“不允许操作”,即使是 root)

为什么我在使用 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),有 IP 192.168.1.1-> 不工作(上图)。
    • 对于踢球来说,vbox0从桥上移除并不能解决任何问题。
  • eth0.2:VLAN 2,有IP 192.168.2.1。在此子网中的地址上执行 nmap 按预期工作 -> 工作。
    • eth0这似乎很重要,因为它与(上面)使用相同的物理网卡。
  • vbox1: 有IP 192.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。不知道为什么我无法在虚拟机上重现,尽管版本相同。也可能是特定于硬件/驱动程序的...
  • 扫描仍在运行。这似乎只会影响扫描的开始 - 我仍然担心,因为我可能会丢失结果。
    • 它表示前 10 条之后的所有消息都已被省略。然而,即使按照-d2提示重复操作后,我仍然只看到 10 个。(不过,这本身可能是一个错误。)
    • 如果我重复扫描所列出的给定端口(例如-p 2099上面显示的示例),它会成功扫描该端口 - 因此某些端口并不被阻止。
  • 跑步可以--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。 (我相信随着其他更新的到来,它将像往常一样进一步升级。)这不仅解决了我的问题,而且带来了扫描性能的巨大提高。

相关内容