nftables初探
月初的时候,Debian开发组的 aborrero (Arturo Borrero Gonzalez) 发了一篇文章介绍了Debian Stretch (Debian 9) 引入的新模块 – NFtable. 这个旨在替代Iptables的Linux防火墙管理模块,从2014年开始进入Linux 3.13内核到现在伴随着Debian 9 stable的发布,再次得到关注。
在Nftables
的wiki上,有如下的优势总结:
- 针对不同协议,避免规则重复与统一管理 (使用了
set
与map
数据结构) - 同时支持IPv6网络,对于IPv6网络管理无需额外管理。
- 更好的规则更新支持 (原子更新级别)
- 提供了
Netlink-API
供其他应用调用。 - 匹配语法更加灵活与紧凑 (参考了
tcpdump
等)
wiki的内容还在不断完善中,相关的问题可以参考用户邮件列表. Gitbook 上也有一篇翻译中的 ‘Nftables HOWTO 中文翻译’ 接近直译, 没有某博文说的那么传神地道。 论可读性,还不如源wiki的10分钟入门清晰明了 – Quick reference-nftables in 10 minutes
目前对于stable版本,Debian只在stretch版本(jessie-backports
也有)提供nftables
源, 版本v0.7-1, 要求内核版本必须大于等于 3.13
, 建议大于等于 4.10
。 对于想体验,但是不想升级Debian Stretch源来说,可以用下面的方法进行编译。
编译安装
echo "deb http://ftp.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list
apt-get update
aptitude install -yyy -o Aptitude::ProblemResolver::SolutionCost='100*canceled-actions,200*removals' \
linux-image-4.9.0-0.bpo.2-amd64
aptitude install git git-core -y
aptitude install pkg-config autoconf automake libtool libmnl-dev bison flex libgmp-dev libreadline-dev -y
git clone git://git.netfilter.org/libnftn
cd libnftnl/
sh autogen.sh
./configure
make && make install
cd ../
git clone git://git.netfilter.org/nftables
cd nftables/
sh autogen.sh
./configure
make && make install
nft --version
入门小笔记
- nftables 结构上分为 table(表), chain(链), rule(规则), 与Iptables不一致的地方在于,table 与 chain 允许不止一个,名字也可以自由设置。
- table 只是存放chain的容器,不同table之间没有直接关系。
- 不同的chain通过priority进行选择。相同类型的链,priority数值最小、或者相同priority但是最先添加的chain作为当前有效类型的链表。
- chain中可以设置map, set数据结构,通过vmap、@名字进行调用。