我使用 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
...
以下链接帮助我理解并最终解决了这个问题。
- https://github.com/pdaether/LAMP-CentOS-with-Vagrant/blob/master/files/iptables.txt
- http://infrastructure.fedoraproject.org/csi/security-policy/en-US/html/HostIptables-Standard-Introduction-Prerequisites.html
值得一提的是,Opscode 似乎也发现 CentOS 中的防火墙有点困难,正如他们的 apache2 cookbook README(2013 年 2 月 23 日)中所述:
处理 IPtables 的最简单但肯定不是最理想的方法是清除所有规则。Opscode 确实提供了 iptables 手册,但正在从那里使用的方法迁移到更强大的解决方案,该解决方案利用具有“iptables”提供程序的通用“防火墙”LWRP。或者,您可以使用 ufw,以及 Opscode 的 ufw 和防火墙手册来设置规则。请参阅这些手册的 README 以获取文档。