Projet

Général

Profil

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

root / manifests / init.pp @ de3e7bb0

Historique | Voir | Annoter | Télécharger (5,63 ko)

1 e17693e3 Steve Traylen
# @summary Configure nftables
2
#
3 03d9e7da Steve Traylen
# @example allow dns out and do not allow ntp out
4 e17693e3 Steve Traylen
#   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 03d9e7da Steve Traylen
#   class{'nftables':
11
#     noflush_tables = ['inet-f2b-table'],
12
#   }
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 802d80d1 Nacho Barrientos
# @param sets
47
#   Allows sourcing set definitions directly from Hiera.
48
#
49 ac0af4aa Nacho Barrientos
# @param log_prefix
50
#   String that will be used as prefix when logging packets. It can contain
51
#   two variables using standard sprintf() string-formatting:
52
#    * chain: Will be replaced by the name of the chain.
53
#    * comment: Allows chains to add extra comments.
54
#
55 b10c6216 Nacho Barrientos
# @param log_limit
56
#  String with the content of a limit statement to be applied
57
#  to the rules that log discarded traffic. Set to false to
58
#  disable rate limiting.
59
#
60 70727742 Nacho Barrientos
# @param reject_with
61
#   How to discard packets not matching any rule. If `false`, the
62
#   fate of the packet will be defined by the chain policy (normally
63
#   drop), otherwise the packet will be rejected with the REJECT_WITH
64
#   policy indicated by the value of this parameter.
65
#
66 ea96d5db Nacho Barrientos
# @param in_out_conntrack
67
#   Adds INPUT and OUTPUT rules to allow traffic that's part of an
68
#   established connection and also to drop invalid packets.
69
#
70 24a5a2a7 tr
# @param fwd_conntrack
71
#   Adds FORWARD rules to allow traffic that's part of an
72
#   established connection and also to drop invalid packets.
73
#
74 ae9872e2 Nacho Barrientos
# @param firewalld_enable
75
#   Configures how the firewalld systemd service unit is enabled. It might be
76
#   useful to set this to false if you're externaly removing firewalld from
77
#   the system completely.
78
#
79 03d9e7da Steve Traylen
# @param noflush_tables
80
#   If specified only other existings tables will be flushed.
81
#   If left unset all tables will be flushed via a `flush ruleset`
82
#
83 09cba182 Steve Traylen
# @param rules
84
#   Specify hashes of `nftables::rule`s via hiera
85
#
86 be0b08e1 tr
class nftables (
87 31b17627 Steve Traylen
  Boolean $in_ssh = true,
88
  Boolean $in_icmp = true,
89
  Boolean $out_ntp = true,
90
  Boolean $out_dns = true,
91
  Boolean $out_http = true,
92
  Boolean $out_https = true,
93
  Boolean $out_icmp = true,
94
  Boolean $out_all = false,
95
  Boolean $in_out_conntrack = true,
96
  Boolean $fwd_conntrack = false,
97 7b9d6ffc Nacho Barrientos
  Boolean $inet_filter = true,
98 31b17627 Steve Traylen
  Boolean $nat = true,
99
  Hash $rules = {},
100
  Hash $sets = {},
101
  String $log_prefix = '[nftables] %<chain>s %<comment>s',
102
  Variant[Boolean[false], String] $log_limit = '3/minute burst 5 packets',
103
  Variant[Boolean[false], Pattern[/icmp(v6|x)? type .+|tcp reset/]] $reject_with = 'icmpx type port-unreachable',
104
  Variant[Boolean[false], Enum['mask']] $firewalld_enable = 'mask',
105
  Optional[Array[Pattern[/^(ip|ip6|inet)-[-a-zA-Z0-9_]+$/],1]] $noflush_tables = undef,
106 be0b08e1 tr
) {
107 11bf7237 Steve Traylen
  package { 'nftables':
108 0ba57c66 mh
    ensure => installed,
109 11bf7237 Steve Traylen
  } -> file_line {
110 0ba57c66 mh
    'enable_nftables':
111
      line   => 'include "/etc/nftables/puppet.nft"',
112
      path   => '/etc/sysconfig/nftables.conf',
113
      notify => Service['nftables'],
114 11bf7237 Steve Traylen
  } -> file {
115 0ba57c66 mh
    default:
116 e140adff tr
      owner => 'root',
117
      group => 'root',
118
      mode  => '0640';
119 30462da1 Steve Traylen
    '/etc/nftables/puppet-preflight':
120
      ensure  => directory,
121
      mode    => '0750',
122
      purge   => true,
123
      force   => true,
124
      recurse => true;
125
    '/etc/nftables/puppet-preflight.nft':
126 82d10659 Nacho Barrientos
      ensure  => file,
127 7b9d6ffc Nacho Barrientos
      content => epp('nftables/config/puppet.nft.epp', {
128
          'inet_filter' => $inet_filter,
129
          'nat'         => $nat,
130
          'noflush'     => $noflush_tables
131
        }
132
      );
133 11bf7237 Steve Traylen
  } ~> exec {
134 30462da1 Steve Traylen
    'nft validate':
135
      refreshonly => true,
136
      command     => '/usr/sbin/nft -I /etc/nftables/puppet-preflight -c -f /etc/nftables/puppet-preflight.nft || ( /usr/bin/echo "#CONFIG BROKEN" >> /etc/nftables/puppet-preflight.nft && /bin/false)';
137 11bf7237 Steve Traylen
  } -> file {
138 30462da1 Steve Traylen
    default:
139
      owner => 'root',
140
      group => 'root',
141
      mode  => '0640';
142 0ba57c66 mh
    '/etc/nftables/puppet.nft':
143 82d10659 Nacho Barrientos
      ensure  => file,
144 7b9d6ffc Nacho Barrientos
      content => epp('nftables/config/puppet.nft.epp', {
145
          'inet_filter' => $inet_filter,
146
          'nat'         => $nat,
147
          'noflush'     => $noflush_tables
148
        }
149
      );
150 0ba57c66 mh
    '/etc/nftables/puppet':
151
      ensure  => directory,
152 5acb554a tr
      mode    => '0750',
153 0ba57c66 mh
      purge   => true,
154
      force   => true,
155
      recurse => true;
156 11bf7237 Steve Traylen
  } ~> service { 'nftables':
157 30462da1 Steve Traylen
    ensure     => running,
158
    enable     => true,
159
    hasrestart => true,
160
    restart    => '/usr/bin/systemctl reload nftables',
161
  }
162
163 11bf7237 Steve Traylen
  systemd::dropin_file { 'puppet_nft.conf':
164 03d9e7da Steve Traylen
    ensure  => present,
165
    unit    => 'nftables.service',
166 ce22630b Steve Traylen
    content => file('nftables/systemd/puppet_nft.conf'),
167 03d9e7da Steve Traylen
    notify  => Service['nftables'],
168 0ba57c66 mh
  }
169
170 c4b1b93b Steve Traylen
  # firewalld.enable can be mask or false depending upon if firewalld is installed or not
171
  # https://tickets.puppetlabs.com/browse/PUP-10814
172 11bf7237 Steve Traylen
  service { 'firewalld':
173 f02562f2 tr
    ensure => stopped,
174 ae9872e2 Nacho Barrientos
    enable => $firewalld_enable,
175 f02562f2 tr
  }
176
177 7b9d6ffc Nacho Barrientos
  if $inet_filter {
178
    include nftables::inet_filter
179
  }
180
181 82d10659 Nacho Barrientos
  if $nat {
182
    include nftables::ip_nat
183
  }
184 b3a7a6dd tr
185
  # inject custom rules e.g. from hiera
186 66ed7f61 mh
  $rules.each |$n,$v| {
187 11bf7237 Steve Traylen
    nftables::rule {
188 66ed7f61 mh
      $n:
189 11bf7237 Steve Traylen
        * => $v,
190 66ed7f61 mh
    }
191
  }
192 802d80d1 Nacho Barrientos
193
  # inject custom sets e.g. from hiera
194
  $sets.each |$n,$v| {
195 11bf7237 Steve Traylen
    nftables::set {
196 802d80d1 Nacho Barrientos
      $n:
197 11bf7237 Steve Traylen
        * => $v,
198 802d80d1 Nacho Barrientos
    }
199
  }
200 0ba57c66 mh
}