首頁  >  文章  >  運維  >  什麼是 nftables ? 它與 iptables 的差別是什麼?

什麼是 nftables ? 它與 iptables 的差別是什麼?

WBOY
WBOY轉載
2023-06-09 21:34:372442瀏覽

什么是 nftables ? 它与 iptables 的区别是什么?

什麼是 nftables ? 它與 iptables 的差異是什麼?

幾乎每個 Linux 管理員都使用過 iptables,它是一個 Linux 系統的防火牆。但你可能還不太熟悉 nftables,這是一個新的防火牆,可為我們提供一些必的升級,還有可能會取代 iptables。

為什麼要使用 nftables 呢?

Nftables由Netfilter組織開發,該組織目前負責維護iptables。 Nftables的設計目的在於解決iptables存在的效能和可擴充性問題。

除了一些升級和更改的語法以外,nftables 的功能與 iptables 幾乎相同。之所以推出 nftables 的另一個原因,是因為 iptables 的框架變的有點複雜,iptables, ip6tables, arptables 以及 ebtables 都有不同但相似的功能。

例如,在 iptables 中建立 IPv4 規則和在 ip6tables 中建立 IPv6 規則並保持兩者同步是非常低效的。 Nftables 旨在取代所有這些,成為一個集中的解決方案。

儘管自 2014 年以來,nftables 就被包含在 Linux 核心中,但隨著採用範圍的擴大,它最近越來越受歡迎。 Linux 世界的變化很慢,過時的實用程式通常需要幾年或更長的時間才能逐步淘汰,取而代之的是升級後的實用程式。

今天我們就簡單介紹一下 nftables 和 iptables 之間的差異,並展示在新的 nftables 語法中配置防火牆規則的範例。

nftables 中的鏈(chains)和規則

在iptables 中,有三個預設的鏈:輸入、輸出和轉發。這三個“鏈”(以及其他鏈)包含“規則”,iptables 透過將網路流量與 鏈中的規則清單進行配對進行工作。當正在檢查的流量與所有規則都不符合時,鏈的預設策略(例如ACCEPT或DROP)將適用於此流量。

Nftables的工作原理與此類似,也有「鏈」和「規則」。然而,它一開始沒有任何基礎鏈,這使得配置更加靈活。

iptables 效率低下的一個面向是,即使流量與任何規則都不匹配,所有網路資料也必須遍歷上述鏈中的一個或多個。即使你沒有設定鏈路,iptables仍然會檢查你的網路資料並進行處理。

在Linux 中安裝nftables

#nftables 在所有主要的Linux 發行版中都可用,可以使用發行版的套件管理器安裝。

在Ubuntu 或基於Debian 的系統中可使用下列指令:

sudo apt install nftables

設定nftables在系統重新啟動的時候自動啟動,可執行如下操作:

sudo systemctl enable nftables.service

iptables 和nftables 之間的語法差異

與iptables 相比,nftables 的語法更簡單,不過對於iptables 中的語法,在nftables 中也能用。

大家可使用 iptables-translate 工具,該工具接受 iptables 指令並將其轉為等效的 nftables 指令,這是了解兩種語法差異的簡單方法。

使用以下指令在Ubuntu 和基於Debian 的發行版上安裝iptables-translate:

sudo apt install iptables-nftables-compat

安裝後,你可以將iptables 語法傳遞給iptables-translate 指令,它將傳回nftables 等效指令。

下面我們來看一些具體的語法範例。

阻止傳入連線

#下述指令將阻止來自IP位址192.168.2.1的傳入連線:

$ iptables-translate -A INPUT -s 192.168.2.1 -j DROPnft add rule ip filter INPUT ip saddr 192.168.2.1 counter drop

允許傳入SSH連線

#放開ssh 連線權限:##

$ iptables-translate -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPTnft add rule ip filter INPUT tcp dport 22 ct state new,established counter accept

允許來自特定IP 範圍的傳入SSH連線

#如果只想允許來自192.168.1.0/24的傳入SSH連線:

$ iptables-translate -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPTnft add rule ip filter INPUT ip saddr 192.168.1.0/24 tcp dport 22 ct state new,established counter accept

允许MySQL连接到eth0网络接口

$ iptables-translate -A INPUT -i eth0 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPTnft add rule ip filter INPUT iifname eth0 tcp dport 3306ct state new,established counter accept

允许传入HTTP和HTTPS流量

为了允许特定类型的流量,以下是这两个命令的语法:

$ iptables-translate -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPTnft add rule ip filter INPUT ip protocol tcp tcp dport { 80,443} ct state new,established counter accept

从这些例子中可以看出,nftables 语法与 iptables 非常相似,但命令更直观一些。

nftables 日志

上述nft命令示例中的“counter”选项告诉nftables统计规则被触碰的次数,就像默认情况下使用的iptables一样。

在nftables中,需要指定:

nft add rule ip filter INPUT ip saddr 192.168.2.1 counter accept

nftables内置了用于导出配置的选项。它目前支持XML和JSON。

nft export xml

以上是什麼是 nftables ? 它與 iptables 的差別是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除