Nftables

nftablesは、パケット/データグラム/フレームのパケットフィルタリングと分類機能を提供するLinuxカーネルのサブシステムである。2014年1月19日に公開されたLinux 3.13以降で利用可能である。 nftablesはNetfilter（英語版）の特定の部分のみを置き換え、それ以外の部分は維持および再利用することになっている。Netfilterに対するnftablesの利点は、フィルタリングルールを纏めることができる (重複コードを減らすことができる) ことと、スループットが高いことである。nftablesの設定はユーザー空間ユーティリティーのnftを介して行うが、Netfilterではiptables、ip6tables、arptables（英語版）およびebtablesフレームワークを介して設定を行う。 nftablesは、ネットワークスタックへの既存のフック、接続追跡システム、ユーザー空間のキューイングコンポーネント、ログサブシステムなどのNetfilterインフラストラクチャーの構成要素を利用している。 宛先のIPアドレスが1.2.3.4のパケットを破棄するnftのコマンドは、次のように書ける。 nft add rule ip filter output ip daddr 1.2.3.4 drop iptablesのコマンドの構文はnftとは異なり、次のようになる。 iptables -A OUTPUT -d 1.2.3.4 -j DROP また、互換レイヤーが提供されており、バックエンドとしてnftablesを使用している場合でも、従来のiptablesのフィルタリングルールの構文でパケットフィルタリングを行うことができる。 このプロジェクトは、NetfilterのコアチームのPatrick McHardyによってNetfilter Workshop 2008で公開された。カーネルおよびユーザー空間の実装の最初のプレビュー版は2009年3月に公開された。nftablesは「2001年にiptablesが導入されて以降、Linuxのファイアウォールでの最大の変更点」と呼ばれているが、ほとんど報道されていない。著名なハッカーであるFyodor Vaskovich（英語版）（Gordon Lyon）は「メインストリームのLinuxカーネルで公開されることを楽しみにしている。」と述べている。 2012年10月、Pablo Neira Ayusoがiptablesの互換レイヤーを提案し、プロジェクトをメインストリームのLinuxカーネルに含める可能性を発表した。 2013年10月26日、Pablo Neira Ayusoは、nftablesの中核部分をメインストリームのLinuxカーネルにマージするためのプルリクエストを提出した。このプルリクエストは2014年1月19日にマージされ、Linux 3.13として公開された。 nftablesカーネルエンジンはLinuxカーネルに単純な仮想機械を追加する。この仮想機械はバイトコードを実行して、パケットを検査することで、パケットの処理方法を決定することができる。この仮想機械によって行われる操作の実装は意図的に基本的なものになっている。この仮想機械はパケットからデータを取得し、関連するメタデータ (インバウンドインタフェースなど) を確認し、接続追跡データを管理することができる。算術演算子、ビット単位演算子および比較演算子を使用して、そのデータに基づいて決定を下すことができる。また、仮想機械はデータセット (通常はIPアドレス) を操作できるので、複数の比較操作を単一のフィルタリングルールに置き換えることができる。 上記の内容は、iptablesのフィルタリングルールに反している。iptablesのフィルタリングルールではプロトコルを識別する機能が仕組みの奥深くに組み込まれているので、フィルタリングルールを4回（IPv4、IPv6、ARPおよびイーサネットブリッジ）呼び出す必要がある。これは、エンジンがプロトコル毎に固有であり、汎用的には使用できないからである。 iptablesに対するnftablesの主な利点は、LinuxカーネルABIの簡素化、重複コードの削減、エラーメッセージの改善およびフィルタリングルールのより効率的な実行、保存および増分変更である。従来使用されていたiptables(8)、ip6tables(8)、arptables(8)およびebtables(8)（それぞれIPv4、IPv6、ARPおよびイーサネットブリッジ用）は、単一の実装としてnft(8)に置き換えられる予定であり、カーネル内仮想機械上にファイアウォール設定を提供する。 nftablesは単一のNetlink（英語版）トランザクション内で、1つ以上のファイアウォールルールのアトミックな置き換えができるように改良されたユーザー空間APIも提供する。これによって、大きなフィルタリングルールを持つファイアウォール設定の変更が高速化される。また、ルールの変更中に競合が発生することを避けるためにも役立つ。nftablesには以前のファイアウォールからの移行を容易にする互換性機能、iptablesのフィルタリングルールを変換するユーティリティー、バックエンドとしてnftablesを使用している場合のiptablesのフィルタリングルールの互換構文が含まれている。 ^ “nftables Release of the netfilter/nftables project”. The Netfilter project. 2020年5月22日閲覧。 ^ a b 末岡洋子 (2014年1月21日). “Linuxカーネル3.13リリース、nftablesやブロックデバイスレイヤーの改良などが特徴”. OSDN Magazine. 2019年10月8日閲覧。 ^ “User day program - NFWS2008”. The Netfilter project. 2017年6月30日時点のオリジナルよりアーカイブ。2019年10月8日閲覧。 ^ McHardy, Patrick (18 March 2009). "First release of nftables". linux-netdev (Mailing list). 2019年10月8日閲覧。 ^ a b Patrick Gray (2009年3月26日). “NEWS: Linux Gets New Firewall”. Risky Business. 2019年10月8日閲覧。 ^ Pablo Neira Ayuso (25 October 2012). "back on nf_tables (plus compatibility layer)". netfilter-devel (Mailing list). 2019年10月8日閲覧。 ^ Pablo Neira Ayuso (14 October 2013). "netfilter updates: nf_tables pull request". netfilter-devel (Mailing list). 2019年10月8日閲覧。 ^ a b Jonathan Corbet (2013年8月20日). “The return of nftables”. LWN.net. 2019年10月8日閲覧。 ^ Pablo Neira Ayuso (2016年7月13日). “src: add xt compat support”. 2019年10月8日閲覧。 ^ Arturo Borrero Gonzalez (2018年6月16日). “Netfilter Workshop 2018 Berlin summary”. 2019年10月8日閲覧。 ポータル FLOSS firewalld - バージョン0.6.0以降でnftablesをデフォルトのバックエンドとして使用している 公式ウェブサイト nftablesのGitリポジトリ nftables wiki - nftablesのドキュメント