最近研究了下 iptables 的后继者 nftables。感觉这玩意还是挺有趣的,在用户态把网络规则编译成字节码,然后由内核的虚拟机执行。尽管和 iptables 一样都是基于 netfilter 的,但灵活性高多了。
之前使用 iptables 匹配大量数据时,还得需要 ipset 配合,而在 nftables 里内置查表查集合的功能,这点是非常方便的。
不过觉得 nftables 的槽点还是很多。
第一个就是语法太晦涩了。比如判断语句都不用加 if、查表都不用索引符号,等等。稍微长一点的语句要是不换行的话,就很难读懂了。
只能自己通过续行、缩进,来快速识别哪些是条件,哪些是动作。比如开头几行没缩进的是条件,有缩进的是动作,一行一个,这样就相对好理解一些:
当然 nftables 本质上仍是基于规则的,其实算不上语言,所以也不指望像编程那样控制网络了。
第二个是性能问题。在普通的场合下 nftables 还没有 iptables 性能高,比如这里有个测试 https://developers.redhat.com/blog/2017/04/11/benchmarking-nftables/
大致原因是 iptables 的规则是线性存储的,访问会更快一些。(当然添加删除时会慢得多)
这就是很大一个槽点了,既然都用字节码了,为什么不再加个 JIT 编译器,编译成机器指令呢。事实上 iptables 里对于复杂的匹配,还可以使用 BPF 匹配器(类似 tcpdump 规则),那个性能还是很的。
另外最近 Linux 4.18 还真出了一个 bpfilter,据说比 nftables/iptables 都先进的。不过暂时还没使用。。。
1
lihongjie0209 2018-09-21 11:15:57 +08:00
生产环境有什么用什么, 没得选
|
2
20150517 2018-09-21 11:18:04 +08:00 via Android
还是用 iptables,因为我懒得学
|
3
likuku 2018-09-21 11:20:21 +08:00
云端环境的话,都是优先使用 VPC 之类云平台自己的防火墙的,不推荐容易把自己锁死在家门外的 OS 内置防火墙,
且不说 OS 自带防火墙不便 API 化批量自动管理,维护成本更高 |
4
iRiven 2018-09-21 13:08:42 +08:00 via Android
iptables 比较顺手,nftables 比较先进 好像。
|
5
mytry OP @likuku 简单的规则一般都在云平台上配置,比如封 IP 封端口等等,复杂的策略貌似不容易实现,而且不同的云平台支持的策略都不一样吧。之前用阿里云,好像只支持最基本的一些拦截策略,而且规则还有 100 条上限。。。
|
6
jimzhong 2018-09-21 19:42:29 +08:00
目前还用 iptables。以后都会被 ebpf 取代把。
|