我在同一局域网中有多台 CentOS 7 机器。每个应用程序都与其他几个应用程序进行通信,并安装了一个或多个应用程序,每个应用程序都侦听各种端口(数据库、网络服务器、负载平衡服务等)。典型的网络架构的东西。
现在firewalld
所有这些都被禁用。我想在任何地方都启用它。
通常它会是这样的:
systemctl enable firewalld
systemctl start firewalld
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
选项,更改将暂时应用,并在下次防火墙重新加载或重新启动时被删除。