一、什么是nftables?
nftables 是新的數(shù)據(jù)包分類框架,新的linux防火墻管理程序,旨在替代現(xiàn)存的 {ip,ip6,arp,eb}_tables。簡而言之:
它在 Linux 內(nèi)核版本高于 3.13 時可用。
它有一個新的命令行工具 ntf,它的語法與 iptables 不同。
它也包含了一個兼容層,讓你在新的 nftables 內(nèi)核框架之上運行 iptables 命令。
它提供了通用的集合基礎允許你建立映射和關(guān)聯(lián)。你可以使用這個新特性把你的規(guī)則集分類到多維樹中,這大大地減少了找到包最終的行為之前需要檢查的規(guī)則的數(shù)量。
二、nftables 特點
擁有一些高級的類似編程語言的能力,例如定義變量和包含外部文件,即擁有使用額外腳本的能力。nftables也可以用于多種地址簇的過濾和處理。
不同于iptables, nftables并不包含任何的內(nèi)置表。由管理員決定需要哪些表并添加這些表的處理規(guī)則。
表包含規(guī)則鏈,規(guī)則鏈包含規(guī)則。
三、相比于iptables優(yōu)點
更新速度更快。在iptables中添加一條規(guī)則,會隨著規(guī)則數(shù)量增多而變得非常慢,這也就解釋了為什么調(diào)用iptables的腳本需要花很久才完成。這種狀況對nftables而言就不存在了。nftables使用原子的快速操作來更新規(guī)則集合。
內(nèi)核更新更少。使用iptables,每一個匹配或投遞都需要內(nèi)核模塊的支持。因此,如果你忘記一些東西或者要添加新的功能時都需要重新編譯內(nèi)核。nftables就不存在這種狀況了。在nftables中,大部分工作是在用戶態(tài)完成的,內(nèi)核只知道一些基本指令(過濾是用偽狀態(tài)機實現(xiàn)的)。例如,icmpv6 支持是通過nft工具的一個簡單的補丁實現(xiàn)的。在iptables中這種類型的更改需要內(nèi)核和iptables都升級才可以。
四、基礎操作
1、增
增加表:nft add table fillter
增加鏈:nft add chain filter input { type filter hook input priority 0 \; } # 要和hook(鉤子)相關(guān)連
增加規(guī)則:nft add rule filter input tcp dport 22 accept
2、刪
只需要把上面的 add 改為 delete 即可
3、改
更改鏈名用rename
更改規(guī)則用replace
4、查
nft list ruleset # 列出所有規(guī)則
nft list tables # 列出所有表
nft list table filter # 列出filter表
nft list chain filter input # 列出filter表input鏈
以上命令后面也可以加 -nn 用于不解析ip地址和端口
加 -a 用于顯示 handles
操作手冊可參考 nftables-wiki 和 nftables-manpage
注意各表和鏈的優(yōu)先級(重要)。 參考鏈接: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; }}