有人有在 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 上有一个可行的设置,我可以在配置中将防火墙分配给特定主机,同时尽量减少重复?举个例子真的能帮到我。
答案1
要完全理解模块的工作原理,请查看$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 传入 TCP 连接。