2.7. 配置防火墙
				Web 服务器需要一个开放端口,以便用户可以访问在我们的 Web 服务器上托管的页面。开放问题是,不同版本的 Red Hat Enterprise Linux 使用不同的方法来控制防火墙。对于 Red Hat Enterprise Linux 6 及以下,我们使用 iptables。对于 Red Hat Enterprise Linux 7,我们使用 firewalld。
			
这一决策是使用条件逻辑和系统事实来处理的 Puppet。对于此步骤,我们添加一个语句来检查操作系统并运行相应的防火墙命令。
				在您的 mymodule::httpd 类中添加以下代码:
			
这个代码执行以下操作:
- 
						使用 
操作系统majrelease事实来确定操作系统是否为 Red Hat Enterprise Linux 6 还是 7。 - 
						如果使用 Red Hat Enterprise Linux 6,则声明一个运行 
iptables和iptables-save的可执行(执行)资源来添加永久防火墙规则。httpd_port变量是内嵌的,以定义要打开的端口。在exec资源完成后,我们触发iptables服务的刷新。为此,我们定义了一个服务资源,其中包含subscribe属性。此属性检查是否有对另一个资源的更改,如果是,则执行刷新。在这种情况下,它会检查iptables可执行文件资源。 - 
						如果使用 Red Hat Enterprise Linux 7,声明了运行 
firewall-cmd的类似可执行文件资源来添加持久防火墙规则。此外,也使用httpd_port变量来定义要打开的端口。在exec资源完成后,我们触发firewalld服务的刷新,但使用subscribe属性指向firewall-cmd可执行资源。 - 
						两个防火墙可执行文件的代码包含 
刷新只刷新的 10.10.10.2 true,并订阅 abrt Package['httpd']属性。这样可保证防火墙命令仅在 httpd 安装之后运行。如果没有这些属性,后续运行将添加同一防火墙规则的多个实例。 
				再次运行 puppet apply 命令,以测试对模块的更改。以下示例是 Red Hat Enterprise Linux 6 的测试:
			
				这些输出通知消息显示防火墙规则创建和执行,以及后续服务刷新(subscription 属性)。
			
重要
此配置仅充当使用条件语句的示例。如果您以后为您的系统管理多个防火墙规则,建议为防火墙创建自定义资源。使用可执行资源持续链很多 Bash 命令不足。