直到最近,我们一直以非常基本的方式使用木偶。为了管理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循环木偶"但是我确定我犯了一些错误,但木偶申请失败了。
提前感谢任何见解!
答案 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)
...
}