第6章 nftables の使用


nftables フレームワークは、パケットの分類機能を提供し、iptables ツール、ip6tables ツール、arptables ツール、ebtables ツール、および ipset ツールの後継となります。利便性、機能、パフォーマンスにおいて、以前のパケットフィルターリングツールに多くの改良が追加されました。以下に例を示します。
  • 線形処理の代わりに組み込みルックアップテーブルを使用
  • IPv4 プロトコルと IPv6 プロトコルの両方に対する単一のフレームワーク
  • 完全ルールセットのフェッチ、更新、および保存を行わず、すべてアトミックに適用されるルール
  • ルールセットでのデバッグとトレースのサポート(nftrace)およびトレースイベントの監視( nft ツール)
  • より統一されたコンパクトな構文、プロトコル固有の拡張なし
  • サードパーティーのアプリケーション用 Netlink API
iptables と同様に、nftables はチェーンを保存するためにテーブルを使用します。このチェーンには、アクションを実行する個々のルールが含まれます。nft ツールは、以前のパケットフィルターリングフレームワークのツールをすべて置き換えます。libnftnl ライブラリーは、libmnl ライブラリーを介した Netlink API の nftables との低レベルの対話に使用できます。
ルールセットの変更効果を表示するには、nft list ruleset コマンドを使用します。これらのツールは、テーブル、チェーン、ルール、セット、およびその他のオブジェクトを nftables ルールセットに追加するため、nft flush ruleset コマンドなどの nftables ルールセット操作は、先に別のレガシーコマンドを使用してインストールしたルールセットに影響を及ぼす可能性があることに注意してください。

firewalld または nftables を使用するタイミング

  • firewalld: 簡単な ファイアウォール のユースケースには、firewalld ユーティリティーを使用します。このユーティリティーは、使いやすく、このようなシナリオの一般的な使用例に対応しています。
  • nftables: nftables ユーティリティーを使用して、ネットワーク全体など、複雑なパフォーマンスに関する重要なファイアウォールを設定します。
重要
異なるファイアウォールサービスが相互に影響することを回避するには、RHEL ホストでそのうちの 1 つだけを実行し、他のサービスを無効にします。

6.1. nftables スクリプトの作成および実行

nftables フレームワークは、シェルスクリプトを使用して ファイアウォール ルールを維持するための主な利点を提供するネイティブのスクリプト環境を提供します。スクリプトの実行はアトミックです。つまり、システムがスクリプト全体を適用するか、エラーが発生した場合には実行を阻止することを意味します。これにより、ファイアウォールは常に一貫した状態になります。
さらに、管理者は nftables スクリプト環境を使用すると、以下が可能になります。
  • コメントの追加
  • 変数の定義
  • 他のルールセットファイルの組み込み
本セクションでは、この機能を使用する方法と、nftables スクリプトの作成および実行方法を説明します。
nftables パッケージをインストールすると、Red Hat Enterprise Linux は、/etc/nftables/ ディレクトリーに *.nft スクリプトを自動的に作成します。このスクリプトには、さまざまな目的でテーブルと空のチェーンを作成するコマンドが含まれます。

6.1.1. 対応している nftables スクリプトの形式

nftables スクリプト環境は、以下の形式でスクリプトに対応します。
  • nft list ruleset コマンドがルールセットを表示するのと同じ形式でスクリプトを作成できます。
    #!/usr/sbin/nft -f
    
    # Flush the rule set
    flush ruleset
    
    table inet example_table {
      chain example_chain {
        # Chain for incoming packets that drops all packets that
        # are not explicitly allowed by any rule in this chain
        type filter hook input priority 0; policy drop;
    
        # Accept connections to port 22 (ssh)
        tcp dport ssh accept
      }
    }
    
  • nft コマンドと同じ構文を使用できます。
    #!/usr/sbin/nft -f
    
    # Flush the rule set
    flush ruleset
    
    # Create a table
    add table inet example_table
    
    # Create a chain for incoming packets that drops all packets
    # that are not explicitly allowed by any rule in this chain
    add chain inet example_table example_chain { type filter hook input priority 0 ; policy drop ; }
    
    # Add a rule that accepts connections to port 22 (ssh)
    add rule inet example_table example_chain tcp dport ssh accept
    

6.1.2. nftables スクリプトの実行

nftables スクリプトは、nft ユーティリティーに渡すか、スクリプトを直接実行できます。

前提条件

  • 本セクションの手順では、nftables スクリプトを /etc/nftables/example_firewall.nft ファイルに保存していることを前提としています。

手順6.1 nft ユーティリティーを使用した nftables スクリプトの実行

  • nftables スクリプトを nft ユーティリティーに渡して実行するには、次のコマンドを実行します。
    # nft -f /etc/nftables/example_firewall.nft

手順6.2 nftables スクリプトを直接実行します。

  1. 以下の手順は、一度だけ必要です。
    1. スクリプトが以下のシバンシーケンスで始まることを確認します。
      #!/usr/sbin/nft -f
      重要
      -f パラメーターを省略すると、nft ユーティリティーはスクリプトを読み取らず、Error: syntax error, unexpected newline, expecting string を表示します。
    2. 必要に応じて、スクリプトの所有者を root に設定します。
      # chown root /etc/nftables/example_firewall.nft
    3. 所有者のスクリプトを実行ファイルに変更します。
      # chmod u+x /etc/nftables/example_firewall.nft
  2. スクリプトを実行します。
    # /etc/nftables/example_firewall.nft
    出力が表示されない場合は、システムがスクリプトを正常に実行します。
重要
nft がスクリプトを正常に実行したり、ルールを誤って配置したり、パラメーターが欠落したり、スクリプト内のその他の問題したりすると、ファイアウォールが期待どおりに動作しない可能性があります。

関連情報

  • ファイルの所有者の設定に関する詳細は、chown (1) の man ページを参照してください。
  • ファイルのパーミッション設定の詳細は、chmod (1) の man ページを参照してください。
  • システム起動時に nftables ルールを読み込む方法は、を参照してください。 「システムの起動時に nftables ルールの自動読み込み」

6.1.3. nftables スクリプトでコメントの使用

nftables スクリプト環境は、# 文字の右側にあるすべてをコメントとして解釈します。

例6.1 nftables スクリプトのコメント

コメントは、コマンドの横だけでなく、行の先頭からも開始できます。
...
# Flush the rule set
flush ruleset

add table inet example_table  # Create a table
...

6.1.4. nftables スクリプトで変数の使用

nftables スクリプトで変数を定義するには、define キーワードを使用します。シングル値および匿名セットを変数に保存できます。より複雑なシナリオの場合は、名前付きセットまたは決定マップを使用します。

値を 1 つ持つ変数

以下の例は、値が enp1s0INET_DEV という名前の変数を定義します。
define INET_DEV = enp1s0
スクリプトで変数を使用するには、$ 記号とそれに続く変数名を指定します。
...
add rule inet example_table example_chain iifname $INET_DEV tcp dport ssh accept
...

匿名セットを含む変数

以下の例では、匿名セットを含む変数を定義します。
define DNS_SERVERS = { 192.0.2.1, 192.0.2.2 }
スクリプトで変数を使用するには、$ 記号とそれに続く変数名を指定します。
add rule inet example_table example_chain ip daddr $DNS_SERVERS accept
注記
中括弧は、変数がセットを表していることを示すため、ルールで使用する場合は、特別なセマンティクスを持つことに注意してください。

関連情報

6.1.5. nftables スクリプトへのファイルの追加

nftables スクリプト環境を使用すると、管理者は include ステートメントを使用して他のスクリプトを 含める ことができます。
絶対パスまたは相対パスなしでファイル名のみを指定すると、nftables には、Red Hat Enterprise Linux では /etc に設定されているデフォルトの検索パスからのファイルが含まれます。

例6.2 デフォルト検索ディレクトリーからのファイルを含む

デフォルトの検索ディレクトリーからファイルを指定するには、次のコマンドを実行します。
include "example.nft"

例6.3 ディレクトリーからの *.nft ファイルをすべて含む

/etc/nftables/rulesets/ ディレクトリーに保存されている *.nft で終わるすべてのファイルを含めるには、次のコマンドを実行します。
include "/etc/nftables/rulesets/*.nft"
include ステートメントは、ドットで始まるファイルと一致しないことに注意してください。

関連情報

  • 詳細は、nft (8) man ページの Include files セクションを参照してください。

6.1.6. システムの起動時に nftables ルールの自動読み込み

nftables systemd サービスは、/etc/sysconfig/nftables.conf ファイルに含まれるファイアウォールスクリプトを読み込みます。本セクションでは、システムの起動時にファイアウォールルールを読み込む方法を説明します。

前提条件

  • nftables スクリプトは、/etc/nftables/ ディレクトリーに保存されます。

手順6.3 システムの起動時に nftables ルールの自動読み込み

  1. /etc/sysconfig/nftables.conf ファイルを編集します。
    • nftables パッケージをインストールしたときに /etc/nftables/ で作成された *.nft スクリプトを強化する場合は、これらのスクリプトの include ステートメントのコメントを解除します。
    • スクリプトを新規に作成する場合は、そのスクリプトを含む include ステートメントを追加します。たとえば、nftables サービスの起動時に /etc/nftables/example.nft スクリプトを読み込むには、以下を追加します。
      include "/etc/nftables/example.nft"
  2. 必要に応じて、nftables サービスを起動し、システムを再起動せずにファイアウォールルールを読み込みます。
    # systemctl start nftables
  3. nftables サービスを有効にします。
    # systemctl enable nftables

関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.