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

发布时间 2023-10-20 10:28:30作者: 技术颜良

与 iptables 相比,nftables 的语法更加简单,不过对于 iptables 中的语法,在 nftables 中也能用。

大家可使用 iptables-translate 工具,该工具接受 iptables 命令并将其转为等效的 nftables 命令,这是了解两种语法差异的一种简单方法。

使用以下命令在 Ubuntu 和基于 Debian 的发行版上安装 iptables-translate:

sudo apt install iptables-nftables-compat
  • 1.
 

安装后,你可以将 iptables 语法传递给 iptables-translate 命令,它将返回 nftables 等效命令。

下面我们看一些具体的语法示例。

阻止传入连接

下述命令将阻止来自IP地址192.168.2.1的传入连接:

$ iptables-translate -A INPUT -s 192.168.2.1 -j DROP
nft add rule ip filter INPUT ip saddr 192.168.2.1 counter drop
  • 1.
  • 2.
 

允许传入SSH连接

放开 ssh 连接权限:

$ iptables-translate -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
nft add rule ip filter INPUT tcp dport 22 ct state new,established counter accept
  • 1.
  • 2.
 

允许来自特定 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 ACCEPT
nft add rule ip filter INPUT ip saddr 192.168.1.0/24 tcp dport 22 ct state new,established counter accept
  • 1.
  • 2.
 

允许MySQL连接到eth0网络接口

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

允许传入HTTP和HTTPS流量

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

$ iptables-translate -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
nft 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