設置 puppetlabs-firewall 模組
有沒有人有在 ubuntu 12.04 上設置 puppetlabs-firewall 模組的經驗?
https://github.com/puppetlabs/puppetlabs-firewall上的文件指出:
目前,您需要在我們在模組中提供的內容之外提供一些設置,以支持正確的排序、清除和防火牆持久性。
因此,建議您在某處(例如您的 site.pp)的頂級範圍內提供以下內容:
# Always persist firewall rules exec { 'persist-firewall': command => $operatingsystem ? { 'debian' => '/sbin/iptables-save > /etc/iptables/rules.v4', /(RedHat|CentOS)/ => '/sbin/iptables-save > /etc/sysconfig/iptables', }, refreshonly => true, }
# These defaults ensure that the persistence command is executed after # every change to the firewall, and that pre & post classes are run in the # right order to avoid potentially locking you out of your box during the # first puppet run. Firewall { notify => Exec['persist-firewall'], before => Class['my_fw::post'], require => Class['my_fw::pre'], } Firewallchain { notify => Exec['persist-firewall'], } # Purge unmanaged firewall resources # # This will clear any existing rules, and make sure that only rules # defined in puppet exist on the machine resources { "firewall": purge => true }
我很難理解它是做什麼的以及它是如何工作的。當我把它放在頂部範圍內時,它會鎖定我所有的 puppet 主機。而且我不想將此模組的防火牆規則應用於我所有的 puppet 主機,而只是用於測試目的的一個子集。由於我的大多數主機都使用shorewall,並且只是嘗試通過puppet而不是通過分發shorewall配置文件來控制防火牆。是否有人在 ubuntu 上進行了工作設置,我可以在其中將防火牆分配給特定主機,而配置重複最少?一個例子真的會幫助我。
要完全了解模組的工作方式,請參閱
$module_path/firewall/lib/puppet/{type|proider}/*
它全部用 Ruby 編寫。即使您不懂語言,也很容易理解。正如評論中提到的,清單中的附加程式碼是一種解決方法,因此模組可以正常工作。我猜他們在通過 ruby 直接在類型/提供者中實現所有程式碼時遇到了一些問題。使用預設功能是有意義的
iptables-save
,因為重啟後重新載入防火牆設置要容易得多,並且它適用於大多數流行的 linux 發行版。即使您複製/粘貼該程式碼,它也不應該影響您目前的配置,只要您不在節點預設值或節點配置中使用資源類型。出於測試目的,將此程式碼直接包含在測試節點中。應該產生相同的結果。上面是一個例子:
Firewall { notify => Exec["persist-firewall"], before => Class['my_fw::post'], require => Class['my_fw::pre'], } Firewallchain { notify => Exec['persist-firewall'], } resources { "firewall": purge => true } firewall { '100 ssh 22': port => '22', proto => 'tcp', action => 'accept', } firewall { '100 www 80': port => '80', proto => 'tcp', action => 'accept', } firewall { '100 sql 5436': port => '5436', proto => 'tcp', action => 'accept', } firewall { '100 sql 5438': port => '5438', proto => 'tcp', action => 'accept', } firewall { '100 sql 5440': port => '5440', proto => 'tcp', action => 'accept', } exec { "persist-firewall": command => $operatingsystem ? { "debian" => "/sbin/iptables-save > /etc/iptables/rules.v4", /(RedHat|CentOS)/ => "/sbin/iptables-save > /etc/sysconfig/iptables", }, refreshonly => 'true', }
在這個例子中,我允許 22、80、5436、5438 INCOMING TCP 連接。