9.2. パケットのフィルタリング

9.2.1. nftables が、iptables を、デフォルトのネットワークパケットフィルタリングのフレークワークとして置き換え

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

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

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

iptables ツール、ip6tables ツール、ebtables ツール、および arptables ツールは、nftables ベースの同じ名前のドロップインツールに置き換えられました。外部の挙動は従来のものと同じですが、内部的には必要に応じて互換インターフェースを通して、従来の netfilter カーネルモジュールを使用した nftables を使用します。

nftables ルールセットに対するモジュールの効果は、nft list ruleset コマンドを使用して確認できます。これらのツールは、テーブル、チェーン、およびルールを nftables ルールセットに追加するため、nft flush ruleset コマンドなどの nftables ルールセット操作は、先に別の従来のコマンドを使用してインストールしたルールセットに影響を及ぼす可能性があることに注意してください。

どの種類のツールが存在するかをすばやく特定するために、バージョン情報にバックエンド名が追加されるようになりました。RHEL 8 では、nftables ベースの iptables ツールで、次のバージョン文字列が出力されます。

$ iptables --version
iptables v1.8.0 (nf_tables)

一方、従来の iptables ツールが存在する場合は、次のバージョン情報が出力されます。

$ iptables --version
iptables v1.8.0 (legacy)

9.2.2. RHEL 8 で、フィルターテーブルから Arptables FORWARD が削除される

arptables の FORWARD チェーン機能は、Red Hat Enterprise Linux (RHEL) 8 から削除されました。ebtables ツールの FORWARD チェーンを使用して、ルールを追加できるようになりました。

9.2.3. iptables-ebtables の出力の一部が、ebtables と互換性がない

RHEL 8 では、ebtables コマンドは、iptables-ebtables パッケージが提供します。ここには、このツールが nftables ベースで再実装されています。このツールには別のコードベースがあり、その出力は、側面が異なる場合があるため、無視できるか、設計上の選択を慎重に検討する必要があります。

したがって、ebtables 出力を解析するスクリプトを移行する際に、以下を反映するスクリプトを調整します。

  • MAC アドレスの書式が、長さが固定されるように変更されました。octet 値では、2 文字の書式を維持するために、必要に応じて、個々のバイト値の前にゼロが含まれます。
  • IPv6 接頭辞の形式が、RFC 4291 に準拠するように変更になりました。スラッシュ文字の後ろの終了部分には、IPv6 アドレスフォーマットのネットマスクが含まなくなりましたが、プレフィックス長は含まれます。この変更は、有効な (左連続の) マスクにしか適用されませんが、それ以外の場合は、古い形式で印刷されます。

9.2.4. iptablesnftables に変換する新しいツール

今回の更新で、既存の iptables ルールまたは ip6tables ルールを、nftables で同等のルールに変換する iptables-translate ツールおよび ip6tables-translate ツールが追加されました。拡張機能によっては変換機能がない場合もあります。変換機能がない拡張機能が存在する場合は、ツールにより、その前に # 記号が付いた未変換ルールが出力されます。以下に例を示します。

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

また、ユーザーは、iptables-restore-translate ツールおよび ip6tables-restore-translate ツールを使用して、ルールのダンプを変換できます。その前に、iptables-save コマンドまたは ip6tables-save コマンドを使用して、現在のルールのダンプを出力できます。以下に例を示します。

| % sudo iptables-save >/tmp/iptables.dump
| % iptables-restore-translate -f /tmp/iptables.dump
| # Translated by iptables-restore-translate v1.8.0 on Wed Oct 17 17:00:13 2018
| add table ip nat
| ...