每个 Linux 管理员肯定都使用过 iptables,这是一种长期为我们服务多年的 Linux 防火墙。 但是您可能还不熟悉 nftables,它是一个新来者,旨在为我们提供一些急需的升级并最终取代老化的 iptables。
为什么选择 nftables 而不是 iptables?
这 表格 由开发 网络过滤器,当前维护 iptables 的同一组织。 它的创建是为了解决以下问题 iptables,即可扩展性和性能。
除了新语法和一些升级之外,您会发现它的功能与其前身非常相似。
新实用程序的另一个理由是 iptables 框架变得有点复杂,iptables、ip6tables、arptables 和 ebtables 都提供不同但相似的功能。
为了 example,在 iptables 中创建 IPv4 规则和在 ip6tables 中创建 IPv6 规则并保持两者同步是效率低下的。 Nftables 旨在取代所有这些并成为一个集中的解决方案。
尽管自 2014 年以来 nftables 已包含在 Linux 内核中,但随着采用越来越广泛,它最近获得了更多的关注。 Linux 世界的变化是缓慢的,过时的实用程序通常需要几年或更长时间才能被淘汰,以支持升级后的对应物。
Nftables 正在成为推荐的首选防火墙,Linux 管理员应该更新他们的全部内容。 现在是学习 nftables 和更新现有 iptables 配置的好时机。
如果您已经使用 iptables 多年,并且对必须学习一个全新的实用程序的想法不太感兴趣,请不要担心,我们已经在本指南中为您介绍了内容。 在本文中,我们将介绍 nftables 和 iptables 之间的区别,并展示使用新 nftables 语法配置防火墙规则的示例。
nftables 中的链和规则
在 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-翻译 实用程序,它将接受 iptables 命令并将它们转换为等效的 nftables。 这是查看两种语法有何不同的简单方法。
使用以下命令在基于 Ubuntu 和 Debian 的发行版上安装 iptables-translate:
sudo apt install iptables-nftables-compat
安装后,您可以将 iptables 语法传递给 iptables-translate 命令,它将返回 nftables 等效命令。
让我们看一些示例,以便您了解这些命令之间的不同之处。
阻止传入连接
此命令将阻止来自 IP 地址 192.168.2.1 的传入连接:
[email protected]:~$ 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 中键入的常见内容。
[email protected]:~$ 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 连接:
[email protected]:~$ 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 的语法:
[email protected]:~$ 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 流量,这两个命令的语法如下:
[email protected]:~$ 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 过去默认做的那样。
在 nftables 中,它们是可选的并且必须指定。
nft add rule ip filter INPUT ip saddr 192.168.2.1 counter accept
Nftables 内置了用于导出配置的选项。 它目前支持 XML 和 JSON。
nft export xml
结论
在本文中,我解释了为什么 nftables 是 Linux 防火墙的新推荐选择。 我还列出了旧 iptables 和新 nftables 之间的许多差异,包括它们的功能和语法。
本指南向您展示了为什么要考虑升级到 nftables,以及如何开始使用您需要熟悉的新语法才能成功升级旧的 iptables 规则。
如果您有任何问题或建议,请在评论中告诉我。