Linux 首次引入 nftables,你可能會喜歡 nftables 的理由

Codefor發表於2014-02-18

Linux 3.13 帶來了很多特性。nftables也是第一次正式釋出。nftables是一個致力於替換現有的{ip,ip6,arp,eb}tables框架(也就是大家熟知的iptables)的專案。然而,Linux3.13中的nftables版本還是不完整的,還缺少一些重要的特性。這些特性會在後續的Linux版本中釋出。大多數場景下nftables已經可以使用,但是完整的支援(即,nftables優先順序高於iptables)應該在Linux 3.15。

nftables引入了一個新的命令列工具nft。nft是iptables及其衍生指令(ip6tables,arptables)的超集。同時,nft擁有完全不同的語法。是的,如果你習慣於iptables,這是個不好的訊息。但是有一個相容層允許你使用iptables,而過濾是由核心中的nftables完成的。

到目前為止,只有非常少的文件資料。你可以找到我的nftables快速開始,其他的一些初步文件很快就會公開。

一些命令列例子

一行多個目標

加入你想用iptables記錄並丟棄一個包,你必須寫兩條規則,一條記錄,一條丟棄:

使用nft,你可以把兩個目標合併到一起:

方便建立集合

假如你想針對不同的埠允許包並且允許不同的icmpv6型別。使用iptables,你需要使用類似如下的規則:

使用nft,集合可以用在規則中任一元素:

這樣更容易編寫,而且對於過濾方更加高效,因為對每一種協議只需要新增一個規則。

你也可以給集合命名,以便在其他地方使用:

之後,當檢測到一個新的破壞者時:

 

對映

nftables的一個高階特性就是對映。可以使用不同型別的資料並對映它們。例如,我們可以對映網路埠到專用的規則集合(之前建立的儲存在一個鏈中)。在這個例子中,鏈的名稱為low_sec和high_sec:

現在,比如說你有一個新的動態埠ppp1,對它做過濾非常簡單,僅僅把它加到jump_map對映中就可以了。

運維和核心方面

更新速度更快

在iptables中新增一條規則,會隨著規則數量增多而變得非常慢,這也就解釋了為什麼呼叫iptables的指令碼需要花很久才完成。這種狀況對nftables而言就不存在了。nftables使用原子的快速操作來更新規則集合。

核心更新更少

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

相關文章