Debianbuster/sid で ip6table-restore が失敗します。

Debianbuster/sid で ip6table-restore が失敗します。

私は次のような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-restoreip6tables-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.

理想的には、で始まるルールは無視されますが、-4Debian ip6tables-restoreBusterでは機能しないようです。

しかし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これを処理するか、ドキュメントにそれを許容可能な追加の違いとして反映する必要があります。

しかし、他の方法(-6with iptables-nft-restore)は良くありません。無視する代わりに許可され、-A INPUT -p ipv6-icmp -j ACCEPTIPv4以外のプロトコルが生成されます-A INPUT -p icmp -j ACCEPT(カスタムテストを使用しない限り、これは決して発生せず、IPスタックはとにかくそれを無視します)。

考えられる解決策:

  1. バグレポートを提出し、既存の規則や文書に違反する回帰を主張します。これは他の人にも役立ちます。

  2. 分割ルール

    ファイルを2つのファイルに分割しますが、各ファイルに異なるフィルタを適用します。たとえば、次のようになります。

    grep -v -- '^ *-4 ' < before > after.v6
    grep -v -- '^ *-6 ' < before > after.v4
    
  3. 単一のルールを保存できるように、ほぼ同じタスクをip6tables-restore実行する(また同じタスクを実行する)ラッパーを作成します。/usr/local/sbin/ip6tables-restoreiptables-restore

  4. (一時的に)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-saveip6tables-savenft_nat)

  5. 新機能に対応し、直接使用nft

    これは役に立つかもしれないいくつかのコマンドですが、上記と同じ問題があります。iptables-translate/ip6tables-translateおよびiptables-restore-translate/ ip6tables-restore-translate、しかし、結果を再作業しなければならないことがよくあります(特に次のような奇妙な一致の場合)。u32)。 Nftablesにはファミリータイプがあります。inet実際には、IPv4およびIPv6ルール(最新のカーネルを必要とする可能性があるnatから)を混在させることができるため、操作が簡単になります。

関連情報