CompTIA A+ 认证考试的学习资源
2024年3月17日差异解释
2024年3月17日每个 Linux 管理员肯定都使用过 iptables,这是一个历史悠久的 Linux 防火墙,多年来一直为我们提供良好的服务。但您可能还不熟悉 nftables,它是一个新来者,旨在为我们提供一些急需的升级,并最终取代老化的 iptables。
为什么使用 nftables 而不是 iptables?
nftables由 Netfilter开发,该组织目前维护 iptables。它的创建是为了解决iptables的问题,即可扩展性和性能。
除了新的语法和一些升级之外,您会发现它的功能与其前身非常相似。
新实用程序的另一个理由是 iptables 框架变得有点复杂,iptables、ip6tables、arptables 和 ebtables 都提供不同但相似的功能。
例如,在 iptables 中创建 IPv4 规则并在 ip6tables 中创建 IPv6 规则并保持两者同步的效率很低。Nftables 的目标是取代所有这些并成为一个中心化的解决方案。
尽管 nftables 自 2014 年起就已包含在 Linux 内核中,但随着采用变得更加广泛,它最近获得了越来越多的关注。Linux 世界的变化是缓慢的,过时的实用程序通常需要几年或更长时间才能被淘汰,以支持升级的实用程序。
Nftables 正在成为推荐的防火墙选择,Linux 管理员有必要更新他们的功能。现在是学习 nftables 和更新现有 iptables 配置的好时机。
如果您已经使用 iptables 多年,并且对必须学习全新实用程序的想法不太感兴趣,请不要担心,我们已经在本指南中为您介绍了。在本文中,我们将介绍 nftables 和 iptables 之间的差异,并展示使用新 nftables 语法配置防火墙规则的示例。
nftables 中的链和规则
在iptables中,默认有3条链:input、output、forward。这三个“链”(以及其他链,如果您已配置)保存“规则”,并且 iptables 通过将网络流量与链中的规则列表进行匹配来工作。如果正在检查的流量不匹配任何规则,则将对该流量使用链的默认策略(即接受、丢弃)。
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 的传入连接:
linux@handbook:~$ 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 中输入的常见内容。
linux@handbook:~$ 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 连接:
linux@handbook:~$ 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 的语法:
linux@handbook:~$ 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 流量
要允许某种类型的流量,这两个命令的语法如下:
linux@handbook:~$ 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 规则。
如果您有疑问或建议,请在评论中告诉我。