Red Hat Training

A Red Hat training course is available for RHEL 8

第46章 nftables の使用

nftables フレームワークはパケットを分類し、iptablesip6tablesarptablesebtables、および ipset ユーティリティーの後継です。利便性、機能、パフォーマンスにおいて、以前のパケットフィルタリングツールに多くの改良が追加されました。以下に例を示します。

  • 線形処理の代わりに組み込みルックアップテーブルを使用
  • IPv4 プロトコルおよび IPv6 プロトコルに対する 1 つのフレームワーク
  • 完全ルールセットのフェッチ、更新、および保存を行わず、すべてアトミックに適用されるルール
  • ルールセットにおけるデバッグおよびトレースへの対応 (nftrace) およびトレースイベントの監視 (nft ツール)
  • より統一されたコンパクトな構文、プロトコル固有の拡張なし
  • サードパーティーのアプリケーション用 Netlink API

nftables フレームワークは、テーブルを使用してチェーンを保存します。このチェーンには、アクションを実行する個々のルールが含まれます。nft ユーティリティーは、以前のパケットフィルタリングフレームワークのツールをすべて置き換えます。libmnl ライブラリーを介して、nftables Netlink API との低レベルの対話に libnftnl ライブラリーを使用できます。

ルールセット変更が適用されていることを表示するには、nft list ruleset コマンドを使用します。これらのユーティリティーはテーブル、チェーン、ルール、セット、およびその他のオブジェクトを nftables ルールセットに追加するため、nft flush ruleset コマンドなどの nftables ルールセット操作は、iptables コマンドを使用してインストールされたルールセットに影響を与える可能性があることに注意してください。

46.1. iptables から nftables への移行

ファイアウォール設定が依然として iptables ルールを使用している場合は、iptables ルールを nftables に移行できます。

46.1.1. firewalld、nftables、または iptables を使用する場合

以下は、次のユーティリティーのいずれかを使用する必要があるシナリオの概要です。

  • firewalld: 簡単な firewall のユースケースには、firewalld ユーティリティーを使用します。このユーティリティーは、使いやすく、このようなシナリオの一般的な使用例に対応しています。
  • nftables: nftables ユーティリティーを使用して、ネットワーク全体など、複雑なパフォーマンスに関する重要なファイアウォールを設定します。
  • iptables: Red Hat Enterprise Linux の iptables ユーティリティーは、legacy バックエンドの代わりに nf_tables カーネル API を使用します。nf_tables API は、iptables コマンドを使用するスクリプトが、Red Hat Enterprise Linux で引き続き動作するように、後方互換性を提供します。新しいファイアウォールスクリプトの場合には、Red Hat は nftables を使用することを推奨します。
重要

さまざまなファイアウォール関連サービス (firewalldnftables、または iptables) が相互に影響を与えないようにするには、RHEL ホストでそのうち 1 つだけを実行し、他のサービスを無効にします。

46.1.2. iptables および ip6tables ルールセットの nftables への変換

iptables-restore-translate ユーティリティーおよび ip6tables-restore-translate ユーティリティーを使用して、iptables および ip6tables ルールセットを nftables に変換します。

前提条件

  • nftables パッケージおよび iptables パッケージがインストールされている。
  • システムに iptables ルールおよび ip6tables ルールが設定されている。

手順

  1. iptables ルールおよび ip6tables ルールをファイルに書き込みます。

    # iptables-save >/root/iptables.dump
    # ip6tables-save >/root/ip6tables.dump
  2. ダンプファイルを nftables 命令に変換します。

    # iptables-restore-translate -f /root/iptables.dump > /etc/nftables/ruleset-migrated-from-iptables.nft
    # ip6tables-restore-translate -f /root/ip6tables.dump > /etc/nftables/ruleset-migrated-from-ip6tables.nft
  3. 必要に応じて、生成された nftables ルールを手動で更新して、確認します。
  4. nftables サービスが生成されたファイルをロードできるようにするには、以下を /etc/sysconfig/nftables.conf ファイルに追加します。

    include "/etc/nftables/ruleset-migrated-from-iptables.nft"
    include "/etc/nftables/ruleset-migrated-from-ip6tables.nft"
  5. iptables サービスを停止し、無効にします。

    # systemctl disable --now iptables

    カスタムスクリプトを使用して iptables ルールを読み込んだ場合は、スクリプトが自動的に開始されなくなったことを確認し、再起動してすべてのテーブルをフラッシュします。

  6. nftables サービスを有効にして起動します。

    # systemctl enable --now nftables

検証

  • nftables ルールセットを表示します。

    # nft list ruleset

46.1.3. 単一の iptables および ip6tables ルールセットの nftables への変換

Red Hat Enterprise Linux は、iptables ルールまたは ip6tables ルールを、nftables で同等のルールに変換する iptables-translate ユーティリティーおよび ip6tables-translate ユーティリティーを提供します。

前提条件

  • nftables パッケージがインストールされている。

手順

  • 以下のように、iptables または ip6tables の代わりに iptables-translate ユーティリティーまたは ip6tables-translate ユーティリティーを使用して、対応する nftables ルールを表示します。

    # iptables-translate -A INPUT -s 192.0.2.0/24 -j ACCEPT
    nft add rule ip filter INPUT ip saddr 192.0.2.0/24 counter accept

    拡張機能によっては変換機能がない場合もあります。このような場合には、ユーティリティーは、以下のように、前に # 記号が付いた未変換ルールを出力します。

    # iptables-translate -A INPUT -j CHECKSUM --checksum-fill
    nft # -A INPUT -j CHECKSUM --checksum-fill

関連情報

  • iptables-translate --help

46.1.4. 一般的な iptables コマンドと nftables コマンドの比較

以下は、一般的な iptables コマンドと nftables コマンドの比較です。

  • すべてのルールをリスト表示します。

    iptablesnftables

    iptables-save

    nft list ruleset

  • 特定のテーブルおよびチェーンをリスト表示します。

    iptablesnftables

    iptables -L

    nft list table ip filter

    iptables -L INPUT

    nft list chain ip filter INPUT

    iptables -t nat -L PREROUTING

    nft list chain ip nat PREROUTING

    nft コマンドは、テーブルおよびチェーンを事前に作成しません。これらは、ユーザーが手動で作成した場合にのみ存在します。

    firewalld によって生成されたルールの一覧表示:

    # nft list table inet firewalld
    # nft list table ip firewalld
    # nft list table ip6 firewalld