このチュートリアルでは、Nftables Linux ファイアウォールを使用する方法について説明します。このコンテンツは、Linux の経験者と新規ユーザーの両方に最適化されています。
nftables は、ファイアウォール機能を提供する Linux カーネルのコンポーネントです。 iptables の置き換えです。
このチュートリアルを読めば、Nftables のルールを理解し、ファイアウォールを作成できるようになります。 iptables に関する予備知識は必要ありません。
このチュートリアルのすべての例にはスクリーンショットが含まれており、知識レベルに関係なく、すべての Linux ユーザーが簡単に理解して実装できるようになっています。
Nftables の使用を開始する
開始する前に、nano や vi などのテキスト エディターを使用してファイルを作成して開き、次の例に基づいて最初の Nftables ルールの入力を開始します。コピーして貼り付けないでください。すべてを入力します。
ナノ ファイアウォール.nft
このチュートリアルの例は非常に単純で、ループバックと特定のポートを除いてすべての IPv4 トラフィックがドロップされる制限付きファイアウォールを示しています。
前のスクリーンショットでは、最初の行を使用してローカル ネットワーク (192.168.0.0/16) を LinuxHintNet として定義しています。
LinuxHintNet = 192.168.0.0 を定義します。 / 162 行目では、ポートのグループ (80、443、および 22) を定義します。私はこのグループを AllowPorts と呼んでいます。なぜなら、それらを通過するトラフィックを許可する予定だからです。 AllowPorts は任意の名前です。
AllowPorts を定義する = { 80 、 443 、 53 、 22 }次に、チェーンとルールのコンテナーまたはグループであるテーブルを追加します。両方について以下で説明します。テーブルは、ルールとチェーンを整理するのに役立ちます。この例では、テーブルに制限ポリシーが含まれているため、このテーブルを「Restrictive」と呼びましたが、その名前は任意です。
テーブル名の前の IP は、キュー テーブル ルールが IPv4 トラフィックにのみ適用されることを示します。 IP の代わりに inet を使用して、ルールを IPv4 および IPv6 プロトコルに適用できます。または、IPv6 のみで IP を ip6 に置き換えることができます。
覚えておいてください、Restrictive は私が任意に定義した名前です。テーブルには好きな名前を付けることができます。
私の場合、以下に示すように、ルールを IPv4 のみに適用します。
テーブルを追加 IP 制限的両方のプロトコルで、次を使用します。
add table inet 制限付き次に、最初のベース チェーンを追加します。これは、受信トラフィックに関連しているため、勝手に Incoming と名付けました。ただし、必要に応じて名前を付けることができます。
次のベース チェーンは、デフォルトですべての着信トラフィックをドロップします。
- add chain ip Restrictive Incoming: このセクションでは、IPv4 に適用される制限付きの着信チェーンを追加します。
- type filter: トラフィックをフィルタリングするため、チェーン タイプをフィルターとして定義します。他に考えられるチェーン タイプは、ルートまたは NAT です。
- フック入力: 着信パケットを参照します
- 優先度 0: ベース チェーンの優先順位は、ベース チェーンの順序を定義します。
- ポリシー ドロップ: デフォルトでは、ドロップ ポリシーはすべてのパケットを破棄します。
次のスクリーンショットでわかるように、前の例に似た別の 2 つのベース チェーン、Restrictive Redirect と Restrictive Outgoing を作成しました。違いは、それぞれに定義されたフックです (フック転送とフック出力)。それらを説明することは繰り返しです。
3 つの基本チェーンの後、Nftables ルールを続行して、ループバック トラフィックを許可できます。
ループバック インターフェイスの着信および発信トラフィック用に次の行を追加します。
ルールを追加 IP 制限付き着信 iifname lo counter acceptルールを追加 IP 制限付き着信 oifname lo counter accept
ここで、ファイルの先頭に定義されている変数 $AllowPorts に含まれるすべてのポートを介して、TCP および UDP の送受信トラフィックを受け入れる 4 つのルールを追加します。
ルールを追加 IP 制限付き着信 TCP スポーツ $AllowPorts カウンター受付ルールを追加 IP 制限付き発信 tcp dport $AllowPorts カウンター受付
ルールを追加 IP 制限付き着信 udp スポーツ $AllowPorts カウンター受付
ルールを追加 IP 制限付き発信 udp dport $AllowPorts カウンター受付
以下の完全なスクリプトを見ることができます。
テーブル、チェーン、およびルールの入力が完了したら、ドキュメントを閉じて変更を保存します。
# 最初の 2 行で、ローカル ネットワーク (LinuxHintNet) と一連のポート (80、#443,22) 以下のルールでそれらを通過するトラフィックを有効にします。
LinuxHintNet = 192.168.0.0 を定義します。 / 16
AllowPorts を定義する = { 80 、 443 、 53 、 22 }
#チェーンとルールを含む新しいテーブルを宣言します。私はこのテーブルを「制限的」と呼んでいます。
#「ip」は IPv4 のみにルールを適用します。 IPv6 の場合、「ip6」のみを使用し、両方のプロトコルに「inet」を使用します。
テーブルを追加 IP 制限的
# テーブルを作成したら、Incoming、Redirect、Outgoing の 3 つのチェーンを作成します。
# 名前は任意です。それらはすべて、デフォルトで着信、発信、および転送トラフィックをドロップします。
チェーンを追加 IP 着信制限 { タイプ フィルターフック入力優先度 0 ;ポリシーのドロップ; }
チェーンを追加 IP 制限付きリダイレクト { タイプ フィルターフックの前方優先度 0 ;ポリシーのドロップ; }
チェーンを追加 IP 限定的な発信 { タイプ フィルターフックの出力優先度 0 ;ポリシーのドロップ; }
# ループバック トラフィックを許可する 2 つのルールを実装します。
ルールを追加 IP 制限付き着信 iifname lo counter accept
ルールを追加 IP 制限付き着信 oifname lo counter accept
# AllowPorts 変数で定義されたポートを通過するトラフィックを許可するルールを実装します。
ルールを追加 IP 制限付き着信 tcp スポーツ $AllowPorts カウンター受付
ルールを追加 IP 制限付き発信 tcp dport $AllowPorts カウンター受付
ルールを追加 IP 制限付き着信 udp スポーツ $AllowPorts カウンター受付
ルールを追加 IP 制限付き発信 udp dport $AllowPorts カウンター受付
ファイアウォールを有効にするには、次のコマンドを実行します。
須藤 nft -f ファイアウォール.nft
次のコマンドを実行して、ルールを確認できます。
須藤 nft リスト ルールセット
これは基本的な制限付きファイアウォールです。
結論:
ご覧のとおり、Nftables は iptables よりもはるかに使いやすく、ユーザーは iptables よりも早く Nftables を学習できます。 Iptables が廃止されたため、Debian を含む多くのディストリビューションがデフォルトのファイアウォールとして Nftables を使用しています。 iptables の経験豊富なユーザーは、iptables を nftables に変換する iptables-nftables-compat ツールを参照することをお勧めします。これは、違いを理解するのに役立ちます。
システム管理者などのプロフェッショナル ユーザーは、iptables を使い続ける傾向があります。フィルタリングを改善しながら時間を節約するために、Nftables を無視しないようにします。この記事が、Nftables を試してみようと思わせるほど単純なものであったことを願っています。