この記事はLinux Advent Calendar 2023の3日目の記事です。
2018年7月12日にリリースされた0.6.0から利用が可能になっているのがリリースノートからわかった。ちなみにFirewallBackend
を切り替えることでiptablesとnftablesの切り替えはできる模様。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"
の環境だとiptablesはxtables-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のパケットフィルタリングプログラムは自分で書くこともできるようです。