linux nftables簡介和基礎操作

一、什麼是nftables?  

nftables 是新的數據包分類框架,新的linux防火牆管理程序,旨在替代現存的 {ip,ip6,arp,eb}_tables。簡而言之:

  • 它在 Linux 內核版本高於 3.13 時可用。

  • 它有一個新的命令行工具 ntf,它的語法與 iptables 不同。

  • 它也包含了一個兼容層,讓你在新的 nftables 內核框架之上運行 iptables 命令。

  • 它提供了通用的集合基礎允許你建立映射和關聯。你可以使用這個新特性把你的規則集分類到多維樹中,這大大地減少了找到包最終的行爲之前需要檢查的規則的數量。

二、nftables 特點

  • 擁有一些高級的類似編程語言的能力,例如定義變量和包含外部文件,即擁有使用額外腳本的能力。nftables也可以用於多種地址簇的過濾和處理。

  • 不同於iptables, nftables並不包含任何的內置表。由管理員決定需要哪些表並添加這些表的處理規則。

  • 表包含規則鏈,規則鏈包含規則。

三、相比於iptables優點

  • 更新速度更快。在iptables中添加一條規則,會隨着規則數量增多而變得非常慢,這也就解釋了爲什麼調用iptables的腳本需要花很久才完成。這種狀況對nftables而言就不存在了。nftables使用原子的快速操作來更新規則集合。

  • 內核更新更少。使用iptables,每一個匹配或投遞都需要內核模塊的支持。因此,如果你忘記一些東西或者要添加新的功能時都需要重新編譯內核。nftables就不存在這種狀況了。在nftables中,大部分工作是在用戶態完成的,內核只知道一些基本指令(過濾是用僞狀態機實現的)。例如,icmpv6 支持是通過nft工具的一個簡單的補丁實現的。在iptables中這種類型的更改需要內核和iptables都升級纔可以。

四、基礎操作

1、增

增加表: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

2、刪

只需要把上面的 add 改爲 delete 即可

3、改

更改鏈名用rename

更改規則用replace

4、查

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; }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章