Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / manifests / init.pp @ ad3dbd7d

Historique | Voir | Annoter | Télécharger (6,56 ko)

1 e17693e3 Steve Traylen
# @summary Configure nftables
2
#
3 03d9e7da Steve Traylen
# @example allow dns out and do not allow ntp out
4 2063deaf hashworks
#   class{ 'nftables':
5
#     out_ntp => false,
6
#     out_dns => true,
7 b3a7a6dd tr
#   }
8 e17693e3 Steve Traylen
#
9 b9785000 Steve Traylen
# @example do not flush particular tables, fail2ban in this case
10 2063deaf hashworks
#   class{ 'nftables':
11
#     noflush_tables => ['inet-f2b-table'],
12 03d9e7da Steve Traylen
#   }
13
#
14 b3a7a6dd tr
# @param out_all
15 e17693e3 Steve Traylen
#   Allow all outbound connections. If `true` then all other
16
#   out parameters `out_ntp`, `out_dns`, ... will be assuemed
17
#   false.
18
#
19
# @param out_ntp
20
#   Allow outbound to ntp servers.
21
#
22
# @param out_http
23
#   Allow outbound to http servers.
24
#
25 09cba182 Steve Traylen
# @param out_dns
26
#   Allow outbound to dns servers.
27 e17693e3 Steve Traylen
#
28
# @param out_https
29
#   Allow outbound to https servers.
30
#
31 79e9a23f Nacho Barrientos
# @param out_icmp
32
#   Allow outbound ICMPv4/v6 traffic.
33
#
34 e17693e3 Steve Traylen
# @param in_ssh
35
#   Allow inbound to ssh servers.
36
#
37 79e9a23f Nacho Barrientos
# @param in_icmp
38
#   Allow inbound ICMPv4/v6 traffic.
39
#
40 7b9d6ffc Nacho Barrientos
# @param inet_filter
41
#   Add default tables, chains and rules to process traffic.
42
#
43 82d10659 Nacho Barrientos
# @param nat
44
#   Add default tables and chains to process NAT traffic.
45
#
46 fcb79d73 Ben Morrice
# @param nat_table_name
47
#   The name of the 'nat' table.
48
#
49 802d80d1 Nacho Barrientos
# @param sets
50
#   Allows sourcing set definitions directly from Hiera.
51
#
52 ac0af4aa Nacho Barrientos
# @param log_prefix
53
#   String that will be used as prefix when logging packets. It can contain
54
#   two variables using standard sprintf() string-formatting:
55
#    * chain: Will be replaced by the name of the chain.
56
#    * comment: Allows chains to add extra comments.
57
#
58 b10c6216 Nacho Barrientos
# @param log_limit
59
#  String with the content of a limit statement to be applied
60
#  to the rules that log discarded traffic. Set to false to
61
#  disable rate limiting.
62
#
63 70727742 Nacho Barrientos
# @param reject_with
64
#   How to discard packets not matching any rule. If `false`, the
65
#   fate of the packet will be defined by the chain policy (normally
66
#   drop), otherwise the packet will be rejected with the REJECT_WITH
67
#   policy indicated by the value of this parameter.
68
#
69 ea96d5db Nacho Barrientos
# @param in_out_conntrack
70
#   Adds INPUT and OUTPUT rules to allow traffic that's part of an
71
#   established connection and also to drop invalid packets.
72
#
73 24a5a2a7 tr
# @param fwd_conntrack
74
#   Adds FORWARD rules to allow traffic that's part of an
75
#   established connection and also to drop invalid packets.
76
#
77 ae9872e2 Nacho Barrientos
# @param firewalld_enable
78
#   Configures how the firewalld systemd service unit is enabled. It might be
79
#   useful to set this to false if you're externaly removing firewalld from
80
#   the system completely.
81
#
82 03d9e7da Steve Traylen
# @param noflush_tables
83
#   If specified only other existings tables will be flushed.
84
#   If left unset all tables will be flushed via a `flush ruleset`
85
#
86 09cba182 Steve Traylen
# @param rules
87
#   Specify hashes of `nftables::rule`s via hiera
88
#
89 0c9bc308 hashworks
# @param configuration_path
90
#   The absolute path to the principal nftables configuration file. The default
91
#   varies depending on the system, and is set in the module's data.
92
#
93 8842a597 Tim Meusel
# @param nft_path
94
#   Path to the nft binary
95
#
96 7fb93f38 Tim Meusel
# @param echo
97
#   Path to the echo binary
98
#
99 0b7bcb5d mh
# @param default_config_mode
100
#   The default file & dir mode for configuration files and directories. The
101
#   default varies depending on the system, and is set in the module's data.
102
#
103 be0b08e1 tr
class nftables (
104 5b13f220 Javier Angulo
  Stdlib::Unixpath $echo,
105
  Stdlib::Unixpath $configuration_path,
106
  Stdlib::Unixpath $nft_path,
107
  Stdlib::Filemode $default_config_mode,
108 31b17627 Steve Traylen
  Boolean $in_ssh = true,
109
  Boolean $in_icmp = true,
110
  Boolean $out_ntp = true,
111
  Boolean $out_dns = true,
112
  Boolean $out_http = true,
113
  Boolean $out_https = true,
114
  Boolean $out_icmp = true,
115
  Boolean $out_all = false,
116
  Boolean $in_out_conntrack = true,
117
  Boolean $fwd_conntrack = false,
118 7b9d6ffc Nacho Barrientos
  Boolean $inet_filter = true,
119 31b17627 Steve Traylen
  Boolean $nat = true,
120
  Hash $rules = {},
121
  Hash $sets = {},
122
  String $log_prefix = '[nftables] %<chain>s %<comment>s',
123 fcb79d73 Ben Morrice
  String[1] $nat_table_name = 'nat',
124 31b17627 Steve Traylen
  Variant[Boolean[false], String] $log_limit = '3/minute burst 5 packets',
125
  Variant[Boolean[false], Pattern[/icmp(v6|x)? type .+|tcp reset/]] $reject_with = 'icmpx type port-unreachable',
126
  Variant[Boolean[false], Enum['mask']] $firewalld_enable = 'mask',
127 1fd3f550 Luis Fernández Álvarez
  Optional[Array[Pattern[/^(ip|ip6|inet|arp|bridge|netdev)-[-a-zA-Z0-9_]+$/],1]] $noflush_tables = undef,
128 be0b08e1 tr
) {
129 11bf7237 Steve Traylen
  package { 'nftables':
130 0ba57c66 mh
    ensure => installed,
131 11bf7237 Steve Traylen
  } -> file_line {
132 0ba57c66 mh
    'enable_nftables':
133
      line   => 'include "/etc/nftables/puppet.nft"',
134 0c9bc308 hashworks
      path   => $configuration_path,
135 0ba57c66 mh
      notify => Service['nftables'],
136 11bf7237 Steve Traylen
  } -> file {
137 0ba57c66 mh
    default:
138 e140adff tr
      owner => 'root',
139
      group => 'root',
140 0b7bcb5d mh
      mode  => $default_config_mode;
141 0c9bc308 hashworks
    '/etc/nftables':
142
      ensure => directory,
143 0b7bcb5d mh
      mode   => $default_config_mode;
144 30462da1 Steve Traylen
    '/etc/nftables/puppet-preflight':
145
      ensure  => directory,
146 0b7bcb5d mh
      mode    => $default_config_mode,
147 30462da1 Steve Traylen
      purge   => true,
148
      force   => true,
149
      recurse => true;
150
    '/etc/nftables/puppet-preflight.nft':
151 82d10659 Nacho Barrientos
      ensure  => file,
152 7b9d6ffc Nacho Barrientos
      content => epp('nftables/config/puppet.nft.epp', {
153
          'inet_filter' => $inet_filter,
154
          'nat'         => $nat,
155
          'noflush'     => $noflush_tables
156
        }
157
      );
158 11bf7237 Steve Traylen
  } ~> exec {
159 30462da1 Steve Traylen
    'nft validate':
160
      refreshonly => true,
161 7fb93f38 Tim Meusel
      command     => "${nft_path} -I /etc/nftables/puppet-preflight -c -f /etc/nftables/puppet-preflight.nft || ( ${echo} '#CONFIG BROKEN' >> /etc/nftables/puppet-preflight.nft && /bin/false)";
162 11bf7237 Steve Traylen
  } -> file {
163 30462da1 Steve Traylen
    default:
164
      owner => 'root',
165
      group => 'root',
166 0b7bcb5d mh
      mode  => $default_config_mode;
167 0ba57c66 mh
    '/etc/nftables/puppet.nft':
168 82d10659 Nacho Barrientos
      ensure  => file,
169 7b9d6ffc Nacho Barrientos
      content => epp('nftables/config/puppet.nft.epp', {
170
          'inet_filter' => $inet_filter,
171
          'nat'         => $nat,
172
          'noflush'     => $noflush_tables
173
        }
174
      );
175 0ba57c66 mh
    '/etc/nftables/puppet':
176
      ensure  => directory,
177 0b7bcb5d mh
      mode    => $default_config_mode,
178 0ba57c66 mh
      purge   => true,
179
      force   => true,
180
      recurse => true;
181 11bf7237 Steve Traylen
  } ~> service { 'nftables':
182 30462da1 Steve Traylen
    ensure     => running,
183
    enable     => true,
184
    hasrestart => true,
185 cc9fc807 Tim Meusel
    restart    => 'PATH=/usr/bin:/bin systemctl reload nftables',
186 30462da1 Steve Traylen
  }
187
188 11bf7237 Steve Traylen
  systemd::dropin_file { 'puppet_nft.conf':
189 03d9e7da Steve Traylen
    ensure  => present,
190
    unit    => 'nftables.service',
191 0c9bc308 hashworks
    content => epp('nftables/systemd/puppet_nft.conf.epp', {
192
        'configuration_path' => $configuration_path,
193 8842a597 Tim Meusel
        'nft_path'           => $nft_path,
194 0c9bc308 hashworks
    }),
195 03d9e7da Steve Traylen
    notify  => Service['nftables'],
196 0ba57c66 mh
  }
197
198 c4b1b93b Steve Traylen
  # firewalld.enable can be mask or false depending upon if firewalld is installed or not
199
  # https://tickets.puppetlabs.com/browse/PUP-10814
200 11bf7237 Steve Traylen
  service { 'firewalld':
201 f02562f2 tr
    ensure => stopped,
202 ae9872e2 Nacho Barrientos
    enable => $firewalld_enable,
203 f02562f2 tr
  }
204
205 7b9d6ffc Nacho Barrientos
  if $inet_filter {
206
    include nftables::inet_filter
207
  }
208
209 82d10659 Nacho Barrientos
  if $nat {
210
    include nftables::ip_nat
211
  }
212 b3a7a6dd tr
213
  # inject custom rules e.g. from hiera
214 66ed7f61 mh
  $rules.each |$n,$v| {
215 11bf7237 Steve Traylen
    nftables::rule {
216 66ed7f61 mh
      $n:
217 11bf7237 Steve Traylen
        * => $v,
218 66ed7f61 mh
    }
219
  }
220 802d80d1 Nacho Barrientos
221
  # inject custom sets e.g. from hiera
222
  $sets.each |$n,$v| {
223 11bf7237 Steve Traylen
    nftables::set {
224 802d80d1 Nacho Barrientos
      $n:
225 11bf7237 Steve Traylen
        * => $v,
226 802d80d1 Nacho Barrientos
    }
227
  }
228 0ba57c66 mh
}