V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mytry
V2EX  ›  程序员

有多少人觉得 nftables 比 iptables 更好?

  •  
  •   mytry · 2018-09-21 11:13:25 +08:00 · 10469 次点击
    这是一个创建于 2265 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近研究了下 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 都先进的。不过暂时还没使用。。。

    6 条回复    2018-09-21 19:42:29 +08:00
    lihongjie0209
        1
    lihongjie0209  
       2018-09-21 11:15:57 +08:00
    生产环境有什么用什么, 没得选
    20150517
        2
    20150517  
       2018-09-21 11:18:04 +08:00 via Android
    还是用 iptables,因为我懒得学
    likuku
        3
    likuku  
       2018-09-21 11:20:21 +08:00
    云端环境的话,都是优先使用 VPC 之类云平台自己的防火墙的,不推荐容易把自己锁死在家门外的 OS 内置防火墙,
    且不说 OS 自带防火墙不便 API 化批量自动管理,维护成本更高
    iRiven
        4
    iRiven  
       2018-09-21 13:08:42 +08:00 via Android
    iptables 比较顺手,nftables 比较先进 好像。
    mytry
        5
    mytry  
    OP
       2018-09-21 13:49:47 +08:00
    @likuku 简单的规则一般都在云平台上配置,比如封 IP 封端口等等,复杂的策略貌似不容易实现,而且不同的云平台支持的策略都不一样吧。之前用阿里云,好像只支持最基本的一些拦截策略,而且规则还有 100 条上限。。。
    jimzhong
        6
    jimzhong  
       2018-09-21 19:42:29 +08:00
    目前还用 iptables。以后都会被 ebpf 取代把。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1132 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:58 · PVG 06:58 · LAX 14:58 · JFK 17:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.