PR

【RHEL9系】nftables における受信したパケットの処理

Linux

こんにちは、ぐっちゃんです。
前回は、firewall-cmdコマンドで設定したら、その内容が nftables のルールに反映されました。

iptables の場合、パケットを受信する際は nat テーブルの PREROUTING チェーン → filterテーブルの INPUT チェーンの順番でしたが、RHEL8以降のnftables だとどうなのだろう?

そこで今回は nftables のパケット処理順について調べてみました!

環境

OS:MIRACLE LINUX 9.0
カーネル:5.14.0-70.13.1.el9_0.x86_64
nftablesのバージョン:nftables-0.9.8-12.el9.x86_64

まとめ

  • PREROUTING では、mangle → nat → filter の順で処理される
  • INPUT では、ゾーンに設定するルールよりもダイレクトルールが先に処理される

検証方法

以下のようにポート80番にアクセスがあったらログを出すように設定し、他ホストからcurlコマンドを叩いて出力されたメッセージから処理の流れを特定していきます。

PREROUTINGの場合

受信したパケットのルーティング決定前に適用される PREROUTING の流れを見ていきます。

mangle や nat、filter にログ出力ルールをセットし、以下のようにクライアントから curlで接続してみます。

出力されたログの中で SYN というフラッグの付いたログに着目すると、mangle → nat → filter のPREROUTINGで処理されてから INPUT へパケットが流れることがわかりました。

INPUTの場合

PREROUTING の時と同様に、INPUT に関係しそうなチェーンに、ログを出力させるルールを追加してみます。

では、INPUT のチェーンの処理順を見てみましょう。

ログからは、最初は”direct chain”に入り、その後 firewalld テーブル内の “filter_INPUT”チェーンに行き、”filter_INPUT_ZONES”、”filter_IN_public”…と順に処理されることがわかります。

ということは、ゾーンに設定するルールよりもダイレクトルールが先に処理されるということがわかりました。


この記事の著者
guchan22

私の興味や経験から、見た方々に新しい価値を見つけたり、充実した生活を送れるようお届けします!
Linuxの話から他の勉強まで、様々な情報を提供していきます!
ぜひ、趣味のご参考にしてみてはいかがでしょうか??

guchan22をフォローする
Linux
スポンサーリンク
guchan22をフォローする

コメント

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