1、什麼是nftables? php
nftables 是新的數據包分類框架,新的linux防火牆管理程序,旨在替代現存的 {ip,ip6,arp,eb}_tables。簡而言之:html
它在 Linux 內核版本高於 3.13 時可用。linux
它有一個新的命令行工具 ntf,它的語法與 iptables 不一樣。編程
它也包含了一個兼容層,讓你在新的 nftables 內核框架之上運行 iptables 命令。bash
它提供了通用的集合基礎容許你創建映射和關聯。你可使用這個新特性把你的規則集分類到多維樹中,這大大地減小了找到包最終的行爲以前須要檢查的規則的數量。框架
2、nftables 特色tcp
擁有一些高級的相似編程語言的能力,例如定義變量和包含外部文件,即擁有使用額外腳本的能力。nftables也能夠用於多種地址簇的過濾和處理。編程語言
不一樣於iptables, nftables並不包含任何的內置表。由管理員決定須要哪些表並添加這些表的處理規則。ide
表包含規則鏈,規則鏈包含規則。工具
3、相比於iptables優勢
更新速度更快。在iptables中添加一條規則,會隨着規則數量增多而變得很是慢,這也就解釋了爲何調用iptables的腳本須要花好久才完成。這種情況對nftables而言就不存在了。nftables使用原子的快速操做來更新規則集合。
內核更新更少。使用iptables,每個匹配或投遞都須要內核模塊的支持。所以,若是你忘記一些東西或者要添加新的功能時都須要從新編譯內核。nftables就不存在這種情況了。在nftables中,大部分工做是在用戶態完成的,內核只知道一些基本指令(過濾是用僞狀態機實現的)。例如,icmpv6 支持是經過nft工具的一個簡單的補丁實現的。在iptables中這種類型的更改須要內核和iptables都升級才能夠。
4、基礎操做
一、增
增長表:nft add table fillter
增長鏈:nft add chain filter input { type filter hook input priority 0 \; } # 要和hook(鉤子)相關連
增長規則:nft add rule filter input tcp dport 22 accept
二、刪
只須要把上面的 add 改成 delete 便可
三、改
更改鏈名用rename
更改規則用replace
四、查
nft list ruleset # 列出全部規則
nft list tables # 列出全部表
nft list table filter # 列出filter表
nft list chain filter input # 列出filter表input鏈
以上命令後面也能夠加 -nn 用於不解析ip地址和端口
加 -a 用於顯示 handles
操做手冊可參考 nftables-wiki 和 nftables-manpage
注意各表和鏈的優先級(重要)。 參考連接:Base chain priority
[root@test01 nft]# cat setup-tables table ip filter { chain input { type filter hook input priority 0; } chain forward { type filter hook forward priority 0; } chain output { type filter hook output priority 0; } } table ip nat { chain prerouting { type nat hook prerouting priority -100; } chain postrouting { type nat hook postrouting priority 100; } chain output { type nat hook output priority -100; } } table ip mangle { chain output { type route hook output priority -150; } } table ip raw { chain prerouting { type filter hook prerouting priority -300; } chain postrouting { type filter hook postrouting priority -300; } }