aboutsummaryrefslogtreecommitdiff
path: root/manifests/ipset.pp
diff options
context:
space:
mode:
authorTim Meusel <tim@bastelfreak.de>2019-09-30 14:51:12 +0200
committerTim Meusel <tim@bastelfreak.de>2019-10-01 16:27:42 +0200
commitd4b8909eab6194da389b121e46137da7618eb45c (patch)
tree8cfc5af5a35a1557af027d68eccbd9def263dbde /manifests/ipset.pp
parent5d00a506f896fccb2485ebf3ea316f0156b80f8b (diff)
downloadpuppet-ferm-d4b8909eab6194da389b121e46137da7618eb45c.tar.gz
puppet-ferm-d4b8909eab6194da389b121e46137da7618eb45c.tar.bz2
implement ipset support
Diffstat (limited to 'manifests/ipset.pp')
-rw-r--r--manifests/ipset.pp62
1 files changed, 62 insertions, 0 deletions
diff --git a/manifests/ipset.pp b/manifests/ipset.pp
new file mode 100644
index 0000000..fab7894
--- /dev/null
+++ b/manifests/ipset.pp
@@ -0,0 +1,62 @@
+#
+# @summary a defined resource that can match for ipsets at the top of a chain. This is a per-chain resource. You cannot mix IPv4 and IPv6 sets.
+#
+# @see http://ferm.foo-projects.org/download/2.1/ferm.html#set
+#
+# @example
+# ferm::ipset { 'CONSUL':
+# sets => {
+# 'internet' => 'ACCEPT'
+# },
+# }
+#
+# @example create to matches for IPv6, both at the end of the `INPUT` chain. Explicitly mention the `filter` table.
+# ferm::ipset { 'INPUT':
+# prepend_to_chain => false,
+# table => 'filter',
+# ip_version => 'ip6',
+# sets => {
+# 'testset01' => 'ACCEPT',
+# 'anothertestset' => 'DROP'
+# },
+# }
+#
+# @param chain
+# name of the chain we want to apply those rules to. The name of the defined resource will be used as default value for this.
+#
+# @param table
+# name of the table where we want to apply this. Defaults to `filter` because that's the most common usecase.
+#
+# @param ip_version
+# sadly, ip sets are version specific. You cannot mix IPv4 and IPv6 addresses. Because of this you need to provide the version.
+#
+# @param sets
+# A hash with multiple sets. For each hash you can provide an action like `DROP` or `ACCEPT`.
+#
+define ferm::ipset (
+ Hash[String[1], Ferm::Actions] $sets,
+ String[1] $chain = $name,
+ Ferm::Tables $table = 'filter',
+ Enum['ip','ip6'] $ip_version = 'ip',
+ Boolean $prepend_to_chain = true,
+) {
+
+ $suffix = $prepend_to_chain ? {
+ true => 'aaa',
+ false => 'ccc',
+ }
+
+ # make sure the generated snippet is actually included
+ concat::fragment{"${table}-${chain}-ipset":
+ target => $ferm::configfile,
+ content => epp(
+ "${module_name}/ferm-chain-ipset.epp", {
+ 'ip' => $ip_version,
+ 'table' => $table,
+ 'chain' => $chain,
+ 'sets' => $sets,
+ }
+ ),
+ order => "${table}-${chain}-${suffix}",
+ }
+}