如何使用 Vagrant 和 Chef 在 Centos 上配置防火墙

如何使用 Vagrant 和 Chef 在 Centos 上配置防火墙

我使用 Vagrant 和 Chef 创建了一个服务器盒,一切正常运行。但是,当从头安装该盒时,默认的 iptables 规则已经到位,因此我需要禁用防火墙才能访问我的 Web 服务器。

(顺便说一下,这是一个本地虚拟机,所以我不关心防火墙安全)。

启动虚拟机时,我通过 ssh 连接到虚拟机并刷新 iptables,一切正常。但我更希望在创建机器时运行 shell 脚本来执行此操作。

甚至更好的是,我想使用配方配置 iptables,但我没有看到支持的配方。

谢谢

答案1

/etc/sysconfig/iptables在 CentOS 中设置防火墙规则的一种方法是使用配方中的模板完全替换。

假设您要调整路由,因为您正在设置 Apache Web 服务器(“apache2”)cookbook。创建cookbooks/apache2/templates/default/iptables.erb包含以下内容的文件:

# Firewall configuration created and managed by Chef
# Do not edit manually
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m tcp -p tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

确保在 COMMIT 之后有一个回车符。

然后在您的配方中调用模板,然后重新启动iptables服务。

#
# Load firewall rules we know works
#
template "/etc/sysconfig/iptables" do
  # path "/etc/sysconfig/iptables"
  source "iptables.erb"
  owner "root"
  group "root"
  mode 00600
  # notifies :restart, resources(:service => "iptables")
end

execute "service iptables restart" do
  user "root"
  command "service iptables restart"
end

当您运行时vagrant up,您将看到以下输出(摘录)。

...
INFO: Processing template[/etc/sysconfig/iptables] action create (bpif_apache2::default line 40)
INFO: template[/etc/sysconfig/iptables] backed up to /var/chef/backup/etc/sysconfig/iptables.chef-20130312055953
INFO: template[/etc/sysconfig/iptables] updated content
INFO: template[/etc/sysconfig/iptables] owner changed to 0
INFO: template[/etc/sysconfig/iptables] group changed to 0
INFO: template[/etc/sysconfig/iptables] mode changed to 600
INFO: Processing execute[service iptables restart] action run (bpif_apache2::default line 49)
INFO: execute[service iptables restart] ran successfully
...

以下链接帮助我理解并最终解决了这个问题。

值得一提的是,Opscode 似乎也发现 CentOS 中的防火墙有点困难,正如他们的 apache2 cookbook README(2013 年 2 月 23 日)中所述:

处理 IPtables 的最简单但肯定不是最理想的方法是清除所有规则。Opscode 确实提供了 iptables 手册,但正在从那里使用的方法迁移到更强大的解决方案,该解决方案利用具有“iptables”提供程序的通用“防火墙”LWRP。或者,您可以使用 ufw,以及 Opscode 的 ufw 和防火墙手册来设置规则。请参阅这些手册的 README 以获取文档。

相关内容