nftables與iptables的主要區別如下:
語法不同:iptables的命令行工具使用getopt_long()解析命令,其中,命令是由兩個橫杠(–)或一個橫杠(-)構成,例如-p tcp–dport。在這方面,nftables將使用更好、更直觀、更緊湊的語法。
表和鏈完全可配置:在nftables中,表是沒有特定語義的鏈容器。請注意,iptables附帶了具有預定義數量的基鏈的表,用戶只能選擇是與否。因此,即使只需要其中一個鏈,也會注冊所有鏈;即使根本沒有添加任何規則,未使用的基鏈也會損害性能。使用nftables這種新方法,用戶可以根據自己的設置注冊所需的鏈。此外,用戶還可以按照需要的方式使用鏈優先級對管道建模,并為表和鏈選擇任何名稱。
不再區分匹配和目標:在nftables中,表達式是規則的基本構建塊,因此規則基本上是從左到右線性計算表達式的組合:如果第一個表達式匹配,則評估下一個表達式,以此類推,直到達到作為規則一部分的最后一個表達式。表達式可以匹配某些特定的有效負載字段,例如數據包、流元數據和任何操作。
簡化的雙棧IPv4/IPv6管理:通過新的inet系列,允許用戶注冊時可以看到IPv4和IPv6流量的基鏈。因此,用戶不再需要依賴腳本來復制規則集。
通用集和地圖基礎設施:這種新的基礎架構緊密集成到nftables核心中,它允許高級配置,如字典、映射和間隔來實現面向性能的數據包分類。最重要的是,用戶可以使用任何受支持的過濾器對流量進行分類。
支持連接:從Linux內核4.1開始,用戶可以連接幾個鍵并將它們與字典和映射組合在一起。
沒有內核升級的新支持協議:內核升級是一項耗時且煩瑣的任務,特別是如果用戶必須在網絡中維護多個單一防火墻,出于穩定性原因,使用者通常使用較舊的Linux內核版本。使用虛擬機運行nftable的方式,用戶可以不用這樣升級來支持新協議,相對簡單的nft用戶空間軟件更新足以支持新協議。
目標數量不同:在nftables中,可以在一個規則中指定多個目標;但是在iptables中,用戶只能指定一個目標,這是用戶通過跳轉到自定義鏈來解決的長期限制,其代價是使規則集結構稍微復雜一些。
有無計數器:在iptables中,每個鏈和規則沒有內置計數器;但在nftables中,這些鏈和規則是可選的,因此可以按需啟用計數器,更好地支持動態規則集更新。