Ubuntu

iptables-legacy 無法載入 NFQUEUE 目標並且 –queue-num 和 –queue-bypass 選項是未知選項

  • November 23, 2021

我正在嘗試在 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 核心。

引用自:https://serverfault.com/questions/1047718