Один из способов установить правила брандмауэра в CentOS - полностью заменить /etc/sysconfig/iptables
, используя шаблон в рецепте.
Скажем, вы хотите настроить маршрутизацию, потому что вы настраиваете кулинарную книгу веб-сервера Apache ("apache2"). Создайте файл 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 README (23 февраля 2013 г.):
Самый простой, но, безусловно, не идеальный способ работы с IPtables - это сбросить все правила. Opscode предоставляет кулинарную книгу iptables, но переходит от используемого там подхода к более надежному решению, использующему общий LWRP "брандмауэр", у которого будет поставщик "iptables". Кроме того, вы можете использовать ufw с книгами поваров и брандмауэрами Opscode для настройки правил. Смотрите README тех поваренных книг для документации.