iptables vs nftables:有什么区别?

时间:2020-03-05 15:32:38  来源:igfitidea点击:

每位Linux管理员都一定会使用iptables,iptables是长期使用的Linux防火墙,多年来一直为我们提供良好的服务。
但是我们可能还不熟悉nftable,这是一个新手,旨在为我们提供一些急需的升级,并最终替代老化的iptables。

为什么使用nftables而不是iptables?

nftables由Netfilter开发,Netfilter是当前维护iptables的同一组织。

创建它是为了解决iptables问题,即可伸缩性和性能。

除了新的语法和一些升级之外,我们还会发现它的功能与其前身非常相似。

使用新实用程序的另一个理由是,iptables框架已变得有些混乱,而iptables,ip6tables,arptables和ebtables都提供了不同但相似的功能。

例如,在iptables中创建IPv4规则和在ip6tables中创建IPv6规则并使两者保持同步只是效率低下。
Nftables旨在取代所有这些,并成为集中式解决方案。

尽管nftables自2014年以来就已包含在Linux内核中,但随着采用的日益普及,它在最近越来越受到关注。
在Linux世界中,变化是缓慢的,而过时的实用程序通常要花费几年或者更长时间才能逐步淘汰,而要使用升级的对等程序。

Nftables正在成为推荐的首选防火墙,并且它应该让Linux管理员更新其功能。
现在是学习nftable并更新现有iptables配置的好时机。

如果我们使用iptables已有多年,并且对必须学习全新实用程序的想法不太满意,请不用担心,我们已在本教程中为我们提供帮助。
在本文中,我们将介绍nftable和iptables之间的区别,并显示使用新的nftables语法配置防火墙规则的示例。

Nftable中的链条和规则

在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之间的语法差异

Nftables与iptables具有不同且更简单的语法。
坦白地说,iptables语法始终不清楚,需要花费更多的精力来学习。
幸运的是,对于那些从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的传入连接:

Hyman@theitroad:~$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

允许传入的SSH连接

让我们看更多示例–加固Linux服务器时通常会发现自己在iptables中键入的常见问题。

Hyman@theitroad:~$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

允许来自特定IP范围的传入SSH连接

如果要允许从192.168.1.0/24传入的SSH连接,请执行以下操作:

Hyman@theitroad:~$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

允许MySQL连接到eth0网络接口

这是iptables和nftables的语法:

Hyman@theitroad:~$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 3306 ct state new,established counter accept

允许传入的HTTP和HTTPS流量

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

Hyman@theitroad:~$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

从这些示例中可以看到,语法仍然与iptables非常相似,但是命令更加直观。

使用nftables进行记录

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

在nftable中,它们是可选的,必须指定。

nft add rule ip filter INPUT ip saddr 192.168.2.1 counter accept

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

nft export xml