PR

【RHEL9系】nftables の仕様について調べてみる

Linux

こんにちは、ぐっちゃんです。

RHEL7では firewalld の下で iptables が動作していましたRHEL8以降ではデフォルトで nftables へ変更になりました。しかし、書店やサーバ構築手順書を読んでも nftables について説明をしている記事や本が見当たらない…

そこで、今回は nftables の仕様とルールの見え方について調査してみました。

まとめ

  • nftables は Firewalldのバックエンド(RHEL7以前は iptables)
  • ゾーンに対して設定するルールでは、inet firewalldテーブル内のチェーンに記述される
  • ダイレクトルールの設定は、ip filterテーブルに記述される
  • 設定のないゾーンについては、nftablesのルールに出力されない。

nftables とは

nftables は Firewalldのバックエンド(Firewalldの下)で動いているものです。これは /etc/firewalld/firewalld.confに設定されています。

なお、FirewallBackendパラメータを iptables に変更してリロードすれば、従来通りの iptables でのパケット処理となります。

nftables のルールの見え方

デフォルトの nftables のルールを nft.org というファイルに書き出し、ルール追加する毎に diffコマンドで差分を確認します。

ポート開放(例:80番を開ける時)

このルールの追加箇所は、inet firewalldテーブルの filter_IN_public_allowチェーンでした。なお、ポート追加でなく、サービス名(http)の追加でも同じ結果が得られます。

direct rule 設定(例:25番を優先度0で開ける時)

ダイレクトルールに設定されたルールの場所を確認すると、ip filterテーブルに記述されます。inet firewalldテーブルに記述されないことから、ダイレクトルールはゾーンに対して設定しないことがわかります。

独自ゾーン追加(例:testzoneを追加する)

ゾーンを追加しただけでは何も差分が得られません。思えば、internal や external 等他のゾーンもありませんね。インタフェースを割り当ててみると testzone に関するチェーンが作成されます。

rich rule によるログ出力(例:80番ポートに通信が来た際、”80test”と出力する)

このルールの追加箇所を見てみると inet firewalld テーブルの filter_IN_public_log チェーンでした。ログ出力の設定は、ポートやサービスの許可と違い、自動的にチェーンに割り当てられるようです。

コメント

タイトルとURLをコピーしました