iptables-legacy 无法加载 NFQUEUE 目标,并且 --queue-num 和 --queue-bypass 选项是未知选项

iptables-legacy 无法加载 NFQUEUE 目标,并且 --queue-num 和 --queue-bypass 选项是未知选项

我正在尝试从以下 iptables 命令运行https://github.com/farukuzun/notsodeep在 ubuntu 20.04.1 上。

iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK --sport 443 -j NFQUEUE --queue-num 200 --queue-bypass

但执行结果如下:

# iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK --sport 443 -j NFQUEUE --queue-num 200 --queue-bypass
iptables v1.8.4 (legacy): unknown option "--queue-num"
Try `iptables -h' or 'iptables --help' for more information.

下面的执行结果看起来好像 NFQUEUE 目标根本不存在于我的机器上:

# iptables -A INPUT -j NFQUEUE
iptables v1.8.4 (legacy): Couldn't load target `NFQUEUE':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.

我感到很尴尬,因为这是我从未见过的情况。正如我所料,所有命令都应该正常工作。

这都是因为我使用的 Ubuntu 系统是基于 WSL 的吗?https://docs.microsoft.com/windows/wsl/install-win10)?

答案1

检查这些命令的输出:

  • modinfo xt_NFQUEUE
  • lsmod | grep NFQUEUE
  • iptables -j NFQUEUE --help

每个 xtables 目标由两部分组成:

  • iptables 工具的用户空间库 - 它解析来自用户的命令行参数并将其转换为数据结构,反之亦然,以从内核打印规则
  • 内核模块,处理数据包。

前两个命令检查内核模块是否存在以及是否加载。第三个规则检查用户空间库是否存在以及支持的选项列表。

第一个版本 WSL 对原生 Linux 工具的支持非常有限,因为它不使用 Linux 内核本身,而是使用系统调用到 Windows NT 内核的转换。

要获得对 iptables 的完整支持,您应该使用 WSL2。它使用真正的 Linux 内核,而不是通过 Windows NT 内核进行模拟。

答案2

关于在 WSL2 中安装 xt_NFQUEUE 内核模块,你需要自定义自己的 WSL 内核,可以参考以下网站: https://gist.github.com/cerebrate/d40c89d3fa89594e1b1538b2ce9d2720

我必须补充一些关于在内核中包含“NFQUEUE”的内容,请参阅下图 https://i.stack.imgur.com/FhGfy.png

相关内容