ユースケース:今日はiptablesを使用するホームルーターがあります。多くのルールをより管理しやすいように、nftablesに変換することを検討しています。
今日iptablesで設定したものの1つは「国家ブロック」ipsetです。これには、ほとんどのランダムポート検索/ハッキング試行をカバーする国のCIDRブロックが含まれています。残念ながら、nftablesは私の既存のIPsetでは直接機能しませんが、それをnftables IPsetに変換するのは非常に簡単です。
質問:巨大なnftablesファイルを避けるために、「国」セットを別々のファイルに分割することにしました。 nftablesは他のファイルを簡単に含めることができるため、これはnftablesで予想される動作と正確に一致するようです。私は国を次のように定義します。
table ip country-block {
set country-block {
type ipv4_addr;
flags interval;
elements = { /* CIDR blocks here */ }
}
}
これはうまくロードされます。今、あなたはファイアウォールフィルタに使用したいと思います。デフォルト設定ファイル「table inet filter」にテーブルが定義されています。ここにルールを追加したいです。
ip saddr @country-block drop
答えを検索した後、これがIPセットを参照する唯一の方法です。残念ながらエラーが発生します。
Error: Could not process rule: Set 'country-block' does not exist
私が作成した国のブロックの名前空間として解釈されることを願って、「country-block@country-block」を参照しようとしましたが、うまくいきませんでした。
Error: syntax error, unexpected drop
ip saddr country-block@country-block drop
^^^^
他のテーブルのコレクションを参照する方法を知っている人はいますか?私はすべてのコレクションを1つの「フィルタ」テーブルに縮小し、すべて1つのファイルに保存したくありません。本当に醜い混乱になります。
PS:この "nftables"にタグを付けようとしましたが、明らかにこれは新しいタグであり、新しいタグを生成するために必要な委任はありません。必要な担当者を持っているどんなフレンドリーな魂がこれを適切に示すことができますか?
答え1
nftablesデベロッパーメーリングリストに連絡して回答しました。簡単に答えると、他のテーブルのセットを参照することは不可能です。
しかし、少なくとも私のコレクションを別のファイルに保存して@includeを介してインポートすることはできました。これにより、IPset を 1 つの巨大な構成ファイルにすべて入れなくても管理が容易になります。構文は次のとおりです。
# nftables.conf
include "/etc/nftables.country-block"
table inet filter {
set country-block {
type ipv4_addr; flags interval;
elements = $country_block_list
}
}
# nftables.country-block
define country_block_list = {
# comma-separated CIDR blocks here
}
しかし、この記事を書く時点(2016年12月21日)には、最新のnftablesソースコードで構築されたnftコマンドラインユーティリティが必要であることに注目する価値があります。現在利用可能な最新バージョン(nftables v0.6)では、上記の設定は次のものを使用しているためです。エラー。 nftablesにかなり良いWikiソースからビルドしてインストールする方法を簡単に説明します。新しいバージョンがリリースされ、他のすべてのディストリビューションに適用されると、数ヶ月以内にこれは必要ないと予想されます。