如何在不破坏应用程序的情况下启用firewalld?

如何在不破坏应用程序的情况下启用firewalld?

我在同一局域网中有多台 CentOS 7 机器。每个应用程序都与其他几个应用程序进行通信,并安装了一个或多个应用程序,每个应用程序都侦听各种端口(数据库、网络服务器、负载平衡服务等)。典型的网络架构的东西。

现在firewalld所有这些都被禁用。我想在任何地方都启用它。

通常它会是这样的:

  1. systemctl enable firewalld
  2. systemctl start firewalld
  3. firewall-cmd <...>(添加端口、来源、服务等)

问题是,一旦我启动防火墙服务,默认情况下它会阻止我的大部分内容1,直到我有机会执行第三步。而且,鉴于我必须添加大量配置(端口、源),在我弄清楚之前,我的服务基本上将变得无法使用/无法访问。

我最关心其中一些功能:

  • 我在一些机器上使用 GlusterFS 创建一个网络文件系统,然后将其安装在其他机器上
  • 我使用 Corosync+Pacemaker 在一些机器之间创建几个集群;这些工具使用各种端口来实现类似心跳的功能

如果我在这些机器上打开防火墙,它会立即阻止所有这些服务,直到我有机会执行我的许多firewall-cmd <...>语句。我不知道这样做的后果。


我的问题是:有没有办法在第二步之前执行第三步?这样当我打开服务时一切就位。

我的唯一想法是以某种方式手动编辑/etc/firewalld/zones文件夹中的 XML 文件。但这似乎非常容易出错,特别是因为我不太熟悉firewalld,无法轻松地进行此类编辑。


1 = 据我所知,只有端口 80/443 (HTTP/HTTPS) 和 22 (SSH) 将被打开,所有其他端口都将被阻止,直到您明确打开它们。

答案1

在开始firewalld服务之前,您应该通过配置文件指定参数。我建议您为每个服务(GlusterFS、Pacemaker ...)创建规则文件,并将您需要的所有端口放入该文件中。例如(对于起搏器从配置 iptables 防火墙以允许集群组件/etc/firewalld/services/pacemaker.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Pacemaker</short>
  <description>Pacemaker service</description>
  <port protocol="tcp" port="2224"/>
  <port protocol="tcp" port="3121"/>
  <port protocol="tcp" port="5403"/>
  <port protocol="udp" port="5404"/>
  <port protocol="udp" port="5405"/>
  <port protocol="tcp" port="21064"/>
</service>

您可以从中获得更多信息和示例如何在 CentOS 7 上使用 FirewallD 设置防火墙

然后就可以firewalld安全开始了。

如果您担心firewalld手动编辑区域文件会造成破坏,您可以在虚拟环境中进行测试,然后再应用于工作系统。

答案2

简单的。只需将选项添加--permanent到您的所有规则中,例如

firewall-cmd --zone=trusted --add-port=1234/tcp --permanent

这将在永久配置中注册规则,但不会应用它们,直到您运行命令

firewall-cmd --reload

顺便说一句,这是推荐的操作方式firewalld;如果您不使用该--permanent选项,更改将暂时应用,并在下次防火墙重新加载或重新启动时被删除。

相关内容