木偶:使用YAML&puppetlabs / firewall

时间:2016-04-12 00:26:14

标签: ruby yaml puppet firewall

直到最近,我们一直以非常基本的方式使用木偶。为了管理iptables,我们创建了一个iptables-save文件并加载它。我想改进我们的iptables管理并使用puppetlabs /防火墙模块。

最佳做法建议我使用.yaml文件来解决这个问题,但是我使用hiera()和yaml' s遇到了很多问题。

我希望common.yaml有一个与某个组关联的范围列表:

firewall_group:
  localdomain:
    - 10.0.0.3/32
    - 10.10.0.0/26
  anotherdomain:
    - 172.0.1.0/26

我希望在其他一些{$ certname} .yaml中包含一个主机将从某些组列表中接受访问的端口列表:

ports:
  ssh: 
    number: 22 
    groups:
      - localdomain
  http:
    number: 80
    groups:
      - localdomain
      - anotherdomain

使用puppetlabs /防火墙创建这些防火墙规则的最佳方法是什么? (假设hiera.yaml正确查找这些.yaml文件)我将.pp文件放在init.pp包含的custom_fw / manifests / core.pp中。

我尝试过使用$ ports.each方法和我找到的create_resources()方法搜索"嵌套的yaml循环木偶"但是我确定我犯了一些错误,但木偶申请失败了。

提前感谢任何见解!

1 个答案:

答案 0 :(得分:1)

我花了一些时间来解决这个问题,并提出了以下解决方案。

首先,获取我的模块alexharvey/firewall_multi。在撰写本文时,您还需要最新的puppetlabs /防火墙模块(v1.8.0),尽管我愿意为需要与早期版本的Puppet Labs防火墙兼容的任何人修补我的模块。

firewall_multi模块为Puppet Labs防火墙模块提供了一个多路复用器前端,允许我们指定源和目标的数组。

其次,您将需要Hiera版本3,它具有alias lookup function,允许您为Hiera数组定义一个别名,该别名可以在Hiera的其他地方使用。

您现在可以执行此操作:

---
mylocaldomain:
  - 10.0.0.3/32
  - 10.10.0.0/26
myotherdomain:
  - 172.0.1.0/26

myclass::firewall_multis:
  '00099 accept tcp port 22 for ssh':
    dport: '22'
    action: 'accept'
    proto: 'tcp'
    source: "%{alias('mylocaldomain')}"
myotherclass::firewall_multis:
  '00200 accept tcp port 80 for http':
    dport: '80'
    action: 'accept'
    proto: 'tcp'
    source: "%{alias('myotherdomain')}"

class myclass (
  $firewall_multis,
) {
  validate_hash($firewall_multis)
  create_resources(firewall_multi, $firewall_multis)
  ...
}

class myotherclass (
  $firewall_multis,
) {
  validate_hash($firewall_multis)
  create_resources(firewall_multi, $firewall_multis)
  ...
}