私は次のようなiptableルールを持って/etc/iptables/rule.V6
います。/etc/iptables/rule.V4
-4 -A INPUT -p icmp -j ACCEPT
-6 -A INPUT -p ipv6-icmp -j ACCEPT
再起動しようとするとnetfilter-persistent
内部的にiptables-restore
とip6tables-restore
。
ip6tables-restore
次のルールがわからないので失敗します。
-4 -A INPUT -p icmp -j ACCEPT
以下はエラーです
root@rs-dal:/etc/iptables# ip6tables-restore rules.q
Error occurred at line: 15
Try `ip6tables-restore -h' or 'ip6tables-restore --help' for more information.
理想的には、で始まるルールは無視されますが、-4
Debian ip6tables-restore
Busterでは機能しないようです。
しかしiptables-restore
、うまくいきますが、それは問題ですip6tables-restore
。この問題をどのように解決しますか?
答え1
Debian Busterのデフォルト値なので、nftablesでiptablesを実行する必要があります。このような場合であることを確認するには、次の点を確認してください(nf_tables)
。
# ip6tables-restore --version
ip6tables-restore v1.8.2 (nf_tables)
今IP6テーブルマニュアル、いつも次のようなことがありました。
-4、--ipv4
このオプションはiptablesとiptables-restoreには影響しません。 -4 オプションを使用するルールが ip6tables-restore とともに挿入されると、自動的に無視されます。他の目的に使用するとエラーが発生します。このオプションを使用すると、単一のルールファイルのIPv4およびIPv6ルールをiptables-restoreおよびip6tables-restoreと共に使用できます。
問題は、あなたが今走っているということです。ip6tables-nft-restore
代わりに ip6tables-legacy-restore
。
-4
そこに言及されていない既存のiptableとの違い、これは違いがないはずですが、実際にはそうです。これはバグのように見えます。新しいバージョンでip6tables-nft-restore
これを処理するか、ドキュメントにそれを許容可能な追加の違いとして反映する必要があります。
しかし、他の方法(-6
with iptables-nft-restore
)は良くありません。無視する代わりに許可され、-A INPUT -p ipv6-icmp -j ACCEPT
IPv4以外のプロトコルが生成されます-A INPUT -p icmp -j ACCEPT
(カスタムテストを使用しない限り、これは決して発生せず、IPスタックはとにかくそれを無視します)。
考えられる解決策:
バグレポートを提出し、既存の規則や文書に違反する回帰を主張します。これは他の人にも役立ちます。
分割ルール
ファイルを2つのファイルに分割しますが、各ファイルに異なるフィルタを適用します。たとえば、次のようになります。
grep -v -- '^ *-4 ' < before > after.v6 grep -v -- '^ *-6 ' < before > after.v4
単一のルールを保存できるように、ほぼ同じタスクを
ip6tables-restore
実行する(また同じタスクを実行する)ラッパーを作成します。/usr/local/sbin/ip6tables-restore
iptables-restore
(一時的に)nftablesの代わりにiptablesを放棄し、レガシーiptablesに戻します。
# readlink -f $(which ip6tables-restore) /usr/sbin/xtables-nft-multi # update-alternatives --config ip6tables There are 2 choices for the alternative ip6tables (providing /usr/sbin/ip6tables). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/sbin/ip6tables-nft 20 auto mode 1 /usr/sbin/ip6tables-legacy 10 manual mode 2 /usr/sbin/ip6tables-nft 20 manual mode Press <enter> to keep the current choice[*], or type selection number: 1 update-alternatives: using /usr/sbin/ip6tables-legacy to provide /usr/sbin/ip6tables (ip6tables) in manual mode # readlink -f $(which ip6tables-restore) /usr/sbin/xtables-legacy-multi
関連コマンドへのリンクも変更されました。
についても同じことを行います
iptables
。nftables には現在のルールが適用され続けます。
iptables-nft-save
+にダンプしてip6tables-nft-save
+に復元できます。これによりルールが 2 回実行されます。一度はカーネルのiptablesバックエンドを使用し、一度はカーネルのnftablesバックエンドを使用し、NATはカーネル4.19で常に正しく動作しない可能性があります(通常は最初にロードされたモジュールが勝利します。注意してください。ルールを更新し、関連する(nat)nftablesモジュールを削除します。iptables-save
ip6tables-save
nft_nat)
新機能に対応し、直接使用
nft
。これは役に立つかもしれないいくつかのコマンドですが、上記と同じ問題があります。
iptables-translate
/ip6tables-translate
およびiptables-restore-translate
/ip6tables-restore-translate
、しかし、結果を再作業しなければならないことがよくあります(特に次のような奇妙な一致の場合)。u32
)。 Nftablesにはファミリータイプがあります。inet
実際には、IPv4およびIPv6ルール(最新のカーネルを必要とする可能性があるnatから)を混在させることができるため、操作が簡単になります。