CentOS 7を使い始めた頃、firewalldではdirectルールに設定を書いていた。
zoneの考え方に慣れず、以前のように iptables ライクに設定を書くことができるため、作法が良くないのかもしれないが、そんな使い方をしていた。
DNATやOUTPUTに関する設定も必要だった時もあり、directルールに書く事は少なくなかった。
CenOS 8がリリースされ、同じようにdirectルールを設定をしても、うまく動作しない。
おかしい、、、iptables コマンドでは確かにINPUTでWebサーバのポートが許可されているのに。
directルールに記載したものは、zoneより先に判定されると思っていた。
困ったので、気休めにRHEL 8のリリースノートを見ていると、
iptables に代わり、nftables フレームワークが、デフォルトのネットワークパケットフィルタリング機能を提供します。
firewalld デーモンで、デフォルトのバックエンドとして nftables が使用されるようになりました。
これか!?
バックエンドは、nftables から従来の iptables へ変更もできる模様。
$ cat /etc/firewalld/firewalld.conf
・
・略
FirewallBackend=nftables ←ここを iptables にするとCentOS 7の頃と同じ
上記を変更して、firewalld サービスを再起動すると、CentOS 7 の時と同じ動作になりました。
デフォルトの nftables をバックエンドに利用する場合については、勉強しないとダメかー(´・ω・`)
iptablesのルールをnftables のへ変換できるって記事も見たことあるなぁ(´・ω・`)
40.3. iptables のルールを nftables ルールに変換 Red Hat Enterprise Linux 8 | Red Hat Customer Portal
nft list ~ というコマンドで確認すると思われるけど、従来のdirectルールがどこに書き込まれるとか、分からない事が色々ある。
と打っても、「chain INPUT」に追加されるようで、動作的にzoneの後に判定されているように思えた。
なので、nftables をバックエンドにしていると、従来のようにdirectルールを書いても、zoneの方でも許可しないと動かなかった。
この辺、優先順が良く分からず。
ドキュメントもなかなか見つからず(´・ω・`)
とりあえずバックエンドを従来の iptables にして凌いでる。
(でも非推奨なんでしょうね、、、)
【2020/10/10 追記】
以下の公式ドキュメントに手掛かりがありそう。
firewalld.org
環境は以下の通り。これより前のCentOS 8.0-8.1では未確認。
$ cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
$ rpm -qa | grep firewalld
firewalld-filesystem-0.8.0-4.el8.noarch
firewalld-0.8.0-4.el8.noarch