我正在尝试在 ubuntu 20.04.1 上从https://github.com/farukuzun/notsodeep运行以下 iptables 命令。
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 ) 的吗?
检查这些命令的输出:
modinfo xt_NFQUEUE
lsmod | grep NFQUEUE
iptables -j NFQUEUE --help
每个 xtables 目标由两部分组成:
前两个命令检查内核模块的存在和加载。第三条规则检查用户空间库的存在和支持的选项列表。
第一个版本 WSL 对原生 linux 工具的支持非常有限,因为它不使用 Linux 内核本身,而是使用系统调用到 Windows NT 内核的转换。
要获得对 iptables 的完整支持,您应该使用 WSL2。它使用真正的 Linux 内核,而不是模拟 Windows NT 内核。
关于在 WSL2 中安装 xt_NFQUEUE 内核模块,您需要自定义自己的 WSL 内核。您可以参考以下网站: https ://gist.github.com/cerebrate/d40c89d3fa89594e1b1538b2ce9d2720
我必须添加一些关于在内核中包含“NFQUEUE”的内容,请参阅下图 https://isstatic.askoverflow.dev/FhGfy.png