X-Git-Url: https://git.openstreetmap.org/chef.git/blobdiff_plain/abd375c5775dc07eb912a839ddf8bdbfaead285f..969e1e6d277ef40a24d2cdc33f31f1eaa48752f5:/cookbooks/networking/resources/firewall_rule.rb diff --git a/cookbooks/networking/resources/firewall_rule.rb b/cookbooks/networking/resources/firewall_rule.rb index 75d73dc11..6e6c72585 100644 --- a/cookbooks/networking/resources/firewall_rule.rb +++ b/cookbooks/networking/resources/firewall_rule.rb @@ -29,8 +29,8 @@ property :family, :kind_of => [String, Symbol] property :source, :kind_of => String, :required => true property :dest, :kind_of => String, :required => true property :proto, :kind_of => String, :required => true -property :dest_ports, :kind_of => [String, Integer], :default => "-" -property :source_ports, :kind_of => [String, Integer], :default => "-" +property :dest_ports, :kind_of => [String, Integer, Array] +property :source_ports, :kind_of => [String, Integer, Array] property :rate_limit, :kind_of => String, :default => "-" property :connection_limit, :kind_of => [String, Integer], :default => "-" property :helper, :kind_of => String, :default => "-" @@ -51,44 +51,13 @@ end action_class do def add_rule(action) - if node[:networking][:firewall][:engine] == "shorewall" - add_shorewall_rule(action) - elsif node[:networking][:firewall][:engine] == "nftables" - if new_resource.family.nil? - add_nftables_rule(action, "inet") - add_nftables_rule(action, "inet6") - elsif new_resource.family.to_s == "inet" - add_nftables_rule(action, "inet") - elsif new_resource.family.to_s == "inet6" - add_nftables_rule(action, "inet6") - end - end - end - - def add_shorewall_rule(action) - rule = { - :action => action.to_s.upcase, - :source => new_resource.source, - :dest => new_resource.dest, - :proto => new_resource.proto, - :dest_ports => new_resource.dest_ports.to_s, - :source_ports => new_resource.source_ports.to_s, - :rate_limit => new_resource.rate_limit, - :connection_limit => new_resource.connection_limit.to_s, - :helper => new_resource.helper - } - if new_resource.family.nil? - node.default[:networking][:firewall][:inet] << rule - node.default[:networking][:firewall][:inet6] << rule + add_nftables_rule(action, "inet") + add_nftables_rule(action, "inet6") elsif new_resource.family.to_s == "inet" - node.default[:networking][:firewall][:inet] << rule + add_nftables_rule(action, "inet") elsif new_resource.family.to_s == "inet6" - node.default[:networking][:firewall][:inet6] << rule - else - log "Unsupported network family" do - level :error - end + add_nftables_rule(action, "inet6") end end @@ -100,16 +69,13 @@ action_class do when "inet6" then "ip6" end - proto = case new_resource.proto - when "udp" then "udp" - when "tcp", "tcp:syn" then "tcp" - end + proto = new_resource.proto - if new_resource.source_ports != "-" + if new_resource.source_ports rule << "#{proto} sport { #{nftables_source_ports} }" end - if new_resource.dest_ports != "-" + if new_resource.dest_ports rule << "#{proto} dport { #{nftables_dest_ports} }" end @@ -129,9 +95,7 @@ action_class do rule << "#{ip} daddr { #{addresses} }" end - if new_resource.proto == "tcp:syn" - rule << "ct state new" - end + rule << "ct state new" if new_resource.proto == "tcp" if new_resource.connection_limit != "-" set = "connlimit-#{new_resource.rule}-#{ip}" @@ -165,10 +129,10 @@ action_class do end def nftables_source_ports - new_resource.source_ports.to_s.sub(/:$/, "-65535").gsub(":", "-") + Array(new_resource.source_ports).map(&:to_s).join(",") end def nftables_dest_ports - new_resource.dest_ports.to_s.sub(/:$/, "-65535").gsub(":", "-") + Array(new_resource.dest_ports).map(&:to_s).join(",") end end