我有点坚持使用数据包使用 Chef 为 iptables 实现 ipsets。我知道你可能会说这个解决方案并不优雅和理想,但相信我,我有自己的理由。我想要达到的目标;我需要创建 ip 集“allowed_subnet”以供将来与 iptables 一起使用以将某些 ip 地址列入白名单。“允许”的 IP 地址在数据包中。不幸的是,我找不到 Chef 支持 ipset 资源,所以我必须使用执行。如果我错了,请纠正我。
对,我有IP列表的数据包:
{
"id": "ipset_for_iptables",
"ip_list": [
"1.1.1.1",
"1.1.1.2",
"1.1.1.3",
"1.1.1.4"
]
}
数据包名称等于“id”。
我有我的默认配方文件 default.rb 我在其中添加了以下代码:
package 'ipset'
execute 'create timeout ipset' do
command 'ipset create allow_selected hash:ip timeout 120'
not_if 'ipset -L allow_selected'
end
execute 'create ipset' do
command 'ipset create allowed_subnet hash:ip hashsize 8192'
not_if 'ipset -L allowed_subnet'
end
servers = data_bag('ipset_for_iptables' , 'ipset_for_iptables')
template "/opt/data/data_hosts.txt" do
source 'ipset.erb'
owner 'ipset'
group 'ipset'
action :create
variables :properties => servers['ip_list']
end
现在,我的问题是:如何使用“execute”和“ipset”linux 命令将数据包中的 IP 地址添加到 ip set“allowed_subnet”。
这是模板“ipset.erb”的内容:
<% @properties.each do |host|%>
<%= host['ipaddress'] %>
<% end %>
顺便说一句,我不确定这个模板是否正确,这是以前的管理员遗留下来的。如果有人可以帮助我并指出正确的文档,我将非常感激,这些文档可以在未来帮助我,因为我的动物园里有很多这样的继承物。我试图通过阅读 Chef 官方文档找到如何做到这一点,但我想这超出了 Chef 本身和更多 Ruby 的东西。