CentOS 8 firewalld + nftables 或只是 nftables

ouc*_*cil 6 firewall centos firewalld nftables

我已经在 CentOS 7 上使用了很长时间,并且习惯于iptables在各种个人和商业机器上构建我的自定义配置。

我最近开始使用 CentOS 8 并了解了从iptables到的迁移nftables,因此我能够重写我的规则集并使一切正常运行。问题是我的自定义 nft 规则集在重新启动后没有保留,我必须手动systemctl restart nftables使我的规则重新生效。

我了解到,罪魁祸首firewalld,它从我的理解(因为我从来没有在CentOS的7使用的话),是两个前端管理工具iptablesnftables...正确吗?一旦我systemctl disable firewalld尝试重新启动,我的nftables规则集就按预期到位。问题解决了。

我的问题是,不使用的影响是什么firewalldnftables仍在运行且处于活动状态,所以我假设我的实际防火墙仍然存在,是否有任何理由让我继续firewalld运行并调整设置以确保它正在使用我的nftables规则集。任何关于它的使用的清晰度将不胜感激!

hen*_*ick 7

我认为答案相当简单。首先,你做了完全正确的事情......

Firewalld 是一个纯粹的前端。它本身并不是一个独立的防火墙。它只是通过接受指令,然后将它们转化为 nftables 规则(以前的 iptables)来运行,而 nftables 规则就是防火墙。所以你可以在运行“firewalld using nftables”和运行“nftables only”之间做出选择。Nftables 反过来直接作为内核的一部分工作,在那里使用许多模块,这些模块部分是新的,部分重复内核钩子和模块的“netfilter”系统,这些系统在 2000 年左右成为内核的一部分。

并行运行 firewalld 和 nftables(以前称为 iptables)会让人很困惑,尽管我相信有些人会这样做。如果您习惯于运行自己的 iptables 规则,那么将它们转换为 nftables 规则并让它们成为您的防火墙规则是完美的解决方案。最好的办法确实是完全禁用并最好屏蔽 firewalld - 为了稍微迂腐,您可以运行:

sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl mask --now firewalld
Run Code Online (Sandbox Code Playgroud)

您无需执行其他任何操作。我自己也直接使用 nftables 运行。我发现这比使用前端更透明(当然还有其他的不是 firewalld) - 它让您完全了解您在做什么,并且您可以通过运行sudo nft list ruleset > /etc/nftables.conf. 并且在 /etc/nftables.d 中使用单独的 nft 表是一种很好且简单的方法来跟踪您所做的事情以及事情的位置......

随后@eriknelson 在评论中询问您为什么要屏蔽服务。这样做,afaik,出于用户体验的实际原因,并防止错误和难以发现的错误。运行多个防火墙系统是非常不可取的,因为对大多数人来说,结果是不可预测的,而且您不太可能从任何防火墙获得关于它与预期不会出现的另一防火墙交互的明确错误消息。然而,内核会尝试处理给定的任何内容。如果您使用 nftables 或 iptables,则不应使用 firewalld。或者 ufw。或任何其他更高级别的系统。如果您主要使用防火墙等更高级别的防火墙,则不会

当您屏蔽一个 systemd 服务时,您既不能立即启动也不能启用它。如果您发现/意识到该服务被屏蔽,您可以取消屏蔽它 - 然后做您想做的。设置此设置是为了防止无意或自动进行任何此类更改。您可以通过运行来亲眼看看您的计算机上是否有被屏蔽的服务sudo systemctl list-unit-files | grep mask

因此,您可能不一定想要完全删除 firewalld,但同样不想运行它,这可能是无意中的这种情况,这正是使用sudo systemctl mask xyz.service可以派上用场的情况之一。

我想从你写的东西中你知道这一切。但我有点像 nftables 的布道者,如果其他人阅读了这个答案,他们可能会得到这些小提示的帮助。nftables 的文档很好,但也不过分。