跳至內容

nftables

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

nftables
原作者The Netfilter Project
開發者The Netfilter Project
目前版本
  • 1.1.6(2025年12月5日;穩定版本)[1]
編輯維基數據連結
原始碼庫 編輯維基數據連結
程式語言C
作業系統Linux
平台Netfilter
許可協定GPLv2
網站

nftablesLinux內核的一個子系統,提供網絡封包、報文、乙太網路幀的過濾和分類。該系統從2014年1月19日Linux內核版本3.13發布之後可用。 [2]

nftables取代了Netfilter的舊版用戶空間工具iptables。nftables相對於iptables的優點是代碼重複度少並且更容易擴充到新協定。nftables通過用戶空間實用程式nft進行組態,代替之前的傳統工具即iptables、 ip6tables、arptables和ebtables。[3]

nftables 利用Netfilter基礎設施的構建塊,例如網絡堆疊中的現有掛鈎、連接跟蹤系統、用戶空間排隊組件和紀錄檔記錄子系統。

nft

[編輯]

命令列語法

[編輯]

用於丟棄所有目標IP位址為1.2.3.4的封包的一條命令:

nft add rule ip filter output ip daddr 1.2.3.4 drop

請注意,新語法與iptables的語法存在顯著差異,在iptables中相同規則的寫法如下:

iptables -A OUTPUT -d 1.2.3.4 -j DROP

新語法看似更冗長,但靈活性卻大幅提升。nftables整合了字典、對映表和連接表等進階數據結構,這些在iptables中並不存在。利用這些特性,可顯著減少實現特定封包過濾設計所需的鏈結串列和規則數量。

iptables-translate工具可用於將許多現有的iptables規則轉換為等效的nftables規則。[4][5]Debian 10(Buster)等Linux發行版採用nftables作為預設封包過濾後端,並配合iptables-translate使用。[6]

歷史

[編輯]

該專案首次由Netfilter核心團隊的Patrick McHardy在2008年Netfilter研討會上公開展示。[7] 內核和用戶空間實現的首個預覽版於2009年3月發布。[8] 儘管該工具被譽為「自2001年iptables問世以來Linux防火牆領域最重大的變革」,卻很少有媒體獲得關注。[9] 知名黑客戈登·里昂表示,他「正期待該功能在主流Linux內核中的正式發布」。[9]

該專案始終處於alpha階段,其官方網站於2009年被撤下。2010年3月,專案郵寄清單中作者的郵件顯示該專案仍在持續開發中,即將迎來beta版本的發布;[10][11] 但後者從未正式發布。2012年10月,Pablo Neira Ayuso為iptables提出了一層相容性介面,[12]並宣布該專案可能被納入主流內核。

2013年10月16日,Pablo Neira Ayuso向Linux內核主線提交了nftables核心功能的pull請求。[13] 該功能於2014年1月19日隨Linux內核3.13版本的發布合併至內核主線。[2]

概覽

[編輯]

nftables內核引擎為Linux內核添加了一個簡單的虛擬機器,能夠執行位元組碼來檢查網絡封包並決定如何處理該封包。該虛擬機器實現的操作被刻意設計得基礎化,它能夠從封包本身取得數據,檢視關聯的元數據(例如入站介面),並管理連接跟蹤數據。基於這些數據,可使用算術運算子、位元運算符和比較運算子進行決策。該虛擬機器還支援運算元據集合(通常為IP位址),從而能用單次集合查詢替代多次比較操作。[14]

上述組織方式與iptables防火牆代碼相悖,後者將協定辨識功能深度嵌入邏輯層,導致代碼不得不為IPv4、IPv6、ARP及乙太網路橋接四種場景分別複寫——因防火牆引擎過於依賴特定協定,無法實現通用化應用。[14]

nftables相較於iptables的主要優勢在於:簡化Linux內核應用程式二進制介面(ABI)、減少代碼重複、改進錯誤報告機制,以及實現更高效的過濾規則執行、儲存與增量變更。傳統使用的iptablesip6tablesarptablesebtables(分別用於IPv4、IPv6、ARP和乙太網路橋接)將被nft取代,作為統一實現方案,在內核虛擬機器之上提供防火牆組態功能。

nftables還提供了一個改進的用戶空間API,允許在單次Netlink事務中原子性地替換一條或多條防火牆規則。這能加速大型規則集環境中的防火牆組態變更,同時有助於避免規則變更執行過程中的競爭條件。nftables還包含相容性功能以簡化從舊版防火牆的遷移,提供可轉換iptables格式規則的命令列工具, [15]以及使用nftables後端的語法相容iptables命令版本。[16]

參考文獻

[編輯]
  1. ^ [ANNOUNCE] nftables 1.1.6 release. 2025年12月5日 [2025年12月8日]. 
  2. ^ 2.0 2.1 nftables, the successor of iptables. Linux 3.13. kernelnewbies.org. 2014-01-19 [2016-03-04]. (原始內容存檔於2024-05-18). 
  3. ^ How We Used eBPF to Build Programmable Packet Filtering in Magic Firewall. 
  4. ^ Moving from iptables to nftables - nftables wiki. wiki.nftables.org. [2025-08-28]. 
  5. ^ List of available translations via iptables-translate tool - nftables wiki. wiki.nftables.org. [2025-08-28]. 
  6. ^ nftables - Debian Wiki. wiki.debian.org. [2025-08-28]. 
  7. ^ User day program – NFWS2008. workshop.netfilter.org. 2008-10-03 [2014-02-22]. 
  8. ^ initial release announcement.
  9. ^ 9.0 9.1 Gray, Patrick. NEWS: Linux Gets New Firewall. Risky.biz. March 26, 2009. 
  10. ^ Linux Netfilter Devel – Re: Current state of nftables. Spinics.net. [2014-01-20]. 
  11. ^ Linux Netfilter Devel – Re: Current state of nftables. Spinics.net. [2014-01-20]. 
  12. ^ Linux Netfilter Devel – [RFC] back on nf_tables (plus compatibility layer). Spinics.net. [2014-01-20]. 
  13. ^ [PATCH 00/17] netfilter updates: nf_tables pull request. Marc.info. [2014-01-20]. 
  14. ^ 14.0 14.1 Jonathan Corbet. The return of nftables. LWN.net. 2013-08-20 [2013-10-22]. 
  15. ^ Neira Ayuso, Pablo. nftables – nft command line tool. git.netfilter.org. [24 January 2019]. 
  16. ^ Arturo, Ral. Netfilter Workshop 2018 Berlin summary. ral-arturo.org. [24 January 2019]. 

外部連結

[編輯]