使用Chef和数据包为iptables创建ipsets

时间:2017-01-06 16:20:12

标签: ruby-on-rails ruby linux chef databags

我有点坚持使用数据包为Chef实现iptables的ipsets。我知道你可能会说这个解决方案并不优雅和理想,但请相信我,我有自己的理由。我想要实现的目标;我需要创建ip set“allowed_subnet”,以便将来使用iptables将一些ip地址列入白名单。 “允许的”IP地址在数据包中。不幸的是我找不到Chef支持ipset资源所以我必须使用execute。如果我错了,请纠正我。

是的,我的数据包带有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的东西。

0 个答案:

没有答案