Ubuntu
iptables-legacy 無法載入 NFQUEUE 目標並且 –queue-num 和 –queue-bypass 選項是未知選項
我正在嘗試在 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 目標由兩部分組成:
- iptables 工具的使用者空間庫——它解析來自使用者的命令行參數並將其轉換為資料結構,反之亦然以列印來自核心的規則
- 核心模組,處理數據包。
前兩個命令檢查核心模組的存在和載入。第三條規則檢查使用者空間庫的存在和支持的選項列表。
第一個版本 WSL 對原生 linux 工具的支持非常有限,因為它不使用 Linux 核心本身,而是使用系統呼叫到 Windows NT 核心的轉換。
要獲得對 iptables 的完整支持,您應該使用 WSL2。它使用真正的 Linux 核心,而不是模擬 Windows NT 核心。