nftables
| 原作者 | The Netfilter Project |
|---|---|
| 開發者 | The Netfilter Project |
| 目前版本 |
|
| 原始碼庫 | |
| 程式語言 | C |
| 作業系統 | Linux |
| 平台 | Netfilter |
| 許可協定 | GPLv2 |
| 網站 | |
nftables是Linux核心的一個子系統,提供網路封包、報文、乙太網路訊框的過濾和分類。該系統從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)、減少代碼重複、改進錯誤報告機制,以及實現更高效的過濾規則執行、儲存與增量變更。傳統使用的、、和(分別用於IPv4、IPv6、ARP和乙太網路橋接)將被nft取代,作為統一實現方案,在核心虛擬機器之上提供防火牆組態功能。
nftables還提供了一個改進的使用者空間API,允許在單次Netlink事務中原子性地替換一條或多條防火牆規則。這能加速大型規則集環境中的防火牆組態變更,同時有助於避免規則變更執行過程中的競爭條件。nftables還包含相容性功能以簡化從舊版防火牆的遷移,提供可轉換iptables格式規則的命令列工具, [15]以及使用nftables後端的語法相容iptables命令版本。[16]
參考文獻
[編輯]- ^ [ANNOUNCE] nftables 1.1.6 release. 2025年12月5日 [2025年12月8日].
- ^ 2.0 2.1 nftables, the successor of iptables. Linux 3.13. kernelnewbies.org. 2014-01-19 [2016-03-04]. (原始內容存檔於2024-05-18).
- ^ How We Used eBPF to Build Programmable Packet Filtering in Magic Firewall.
- ^ Moving from iptables to nftables - nftables wiki. wiki.nftables.org. [2025-08-28].
- ^ List of available translations via iptables-translate tool - nftables wiki. wiki.nftables.org. [2025-08-28].
- ^ nftables - Debian Wiki. wiki.debian.org. [2025-08-28].
- ^ User day program – NFWS2008. workshop.netfilter.org. 2008-10-03 [2014-02-22].
- ^ initial release announcement.
- ^ 9.0 9.1 Gray, Patrick. NEWS: Linux Gets New Firewall. Risky.biz. March 26, 2009.
- ^ Linux Netfilter Devel – Re: Current state of nftables. Spinics.net. [2014-01-20].
- ^ Linux Netfilter Devel – Re: Current state of nftables. Spinics.net. [2014-01-20].
- ^ Linux Netfilter Devel – [RFC] back on nf_tables (plus compatibility layer). Spinics.net. [2014-01-20].
- ^ [PATCH 00/17] netfilter updates: nf_tables pull request. Marc.info. [2014-01-20].
- ^ 14.0 14.1 Jonathan Corbet. The return of nftables. LWN.net. 2013-08-20 [2013-10-22].
- ^ Neira Ayuso, Pablo. nftables – nft command line tool. git.netfilter.org. [24 January 2019].
- ^ Arturo, Ral. Netfilter Workshop 2018 Berlin summary. ral-arturo.org. [24 January 2019].
外部連結
[編輯]- First release of nftables (2009-03-18)
- Pablo Neira Ayuso: [RFC] back on nf_tables (plus compatibility layer)
- nftables quick HOWTO
- nftables sections in ArchWiki and Gentoo Wiki
- Corbet, Jonathan. nftables: a new packet filtering engine. LWN.net. 2009-03-24.
- McHardy, Patrick. nftables – a successor to iptables, ip6tables, ebtables and arptables. Netfilter Workshop 2008. 2008-09-30. (原始內容 (ODP)存檔於2009-03-22).
- nft_compat extended to support ebtables extensions (merged in Linux kernel 4.0)
- Extended and enhanced manual for the nft command line tool