0

我有点坚持使用数据包使用 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 的东西。

4

0 回答 0