Ubuntu

設置 puppetlabs-firewall 模組

  • January 14, 2013

有沒有人有在 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 連接。

引用自:https://serverfault.com/questions/466718