我正在尝试从以下 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