地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Linux】firewalldがnftablesを使えるようになったのはいつか

この記事はLinux Advent Calendar 2023の3日目の記事です。

firewalld.org

2018年7月12日にリリースされた0.6.0から利用が可能になっているのがリリースノートからわかった。ちなみにFirewallBackendを切り替えることでiptablesnftablesの切り替えはできる模様。nftables自体は2014年1月にリリースされたLinuxカーネル3.13で利用できるパケットフィルタリング機能で最近かと思いきや大分歴史がある機能。

# FirewallBackend
# Selects the firewall backend implementation.
# Choices are:
#   - nftables (default)
#   - iptables (iptables, ip6tables, ebtables and ipset)
# Note: The iptables backend is deprecated. It will be removed in a future
# release.
FirewallBackend=nftables

ちなみに

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=23.10
DISTRIB_CODENAME=mantic
DISTRIB_DESCRIPTION="Ubuntu 23.10"

の環境だとiptablesxtables-nft-multiというコマンドにリンクされていた。これはnftables カーネル API を使用した iptablesらしい。iptablesで起きていたパフォーマンス問題を解決したり高い拡張性を活かしたnftablesを使いたいが秘伝のスクリプトの実装は変えたくないみたいな場合に使うのだろうか。

$ readlink -f $(which iptables)
/usr/sbin/xtables-nft-multi

CentOS7で使えるのか

nftables自体は入るっぽいがIndex of /Linux/centos/7/updates/x86_64/Packagesで提供されているfirewalldだとどうやら対応しているものがないらしい。(manを見る感じ設定がそもそもない)。なのでサードパーティのパッケージを持ってくるかすれば使えるかもしれないがシュッと使うことはできなそうだった。残念。

nftables と iptables はどのように相互作用するか

公式で以下のように書いてありました。どちらかで拒否をしていればそのパケットは拒否されるようです。

nft  Empty   Accept  Accept  Block   Blank
iptables    Empty   Empty   Block   Accept  Accept
Results Pass    Pass    Unreachable Unreachable Pass

NetFilter

iptablesやnftablesは内部的にはNetFilterというネットワークスタック関連の機能をフックできるLinuxカーネルフレームワークを使ってパケットフィルタリングを行っています。ちなみにNetfilterのパケットフィルタリングプログラムは自分で書くこともできるようです。

madomadox.hatenablog.com

参考

knowledge.sakura.ad.jp

access.redhat.com