
私は次のiptablesコマンドを実行しようとしていますhttps://github.com/farukuzun/notsodeepUbuntu 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(マイクロソフト)?
答え1
次のコマンドの出力を確認します。
modinfo xt_NFQUEUE
lsmod | grep NFQUEUE
iptables -j NFQUEUE --help
すべての xtables ターゲットは 2 つの部分で構成されます。
- iptables ツールのユーザー空間ライブラリ - ユーザーからのコマンドライン引数を解析してデータ構造に変換し、その逆を行ってカーネルからのルールを出力します。
- パケットを処理するカーネル モジュール。
最初の 2 つのコマンドは、カーネル モジュールの存在とそのロードをチェックします。3 番目のルールは、ユーザー空間ライブラリの存在とサポートされているオプションのリストをチェックします。
最初のバージョンの WSL では、Linux カーネル自体を使用せず、システム コールを Windows NT カーネルに変換して使用するため、ネイティブ Linux ツールのサポートが非常に制限されています。
iptables の完全なサポートを得るには、WSL2 を使用する必要があります。これは、Windows NT カーネルのエミュレーションではなく、実際の Linux カーネルを使用します。
答え2
WSL2 に xt_NFQUEUE カーネル モジュールをインストールするには、独自の WSL カーネルをカスタマイズする必要があります。次の Web サイトを参照してください。 https://gist.github.com/cerebrate/d40c89d3fa89594e1b1538b2ce9d2720
カーネルに「NFQUEUE」を含めることについて追加する必要があります。下の図を参照してください。 https://i.stack.imgur.com/FhGfy.png