Projet

Général

Profil

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

root / spec / classes / dnat4_spec.rb @ b171ac7f

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

1 a5205d2f tr
require 'spec_helper'
2
3
describe 'nftables' do
4
  let(:pre_condition) { 'Exec{path => "/bin"}' }
5
6
  on_supported_os.each do |os, os_facts|
7
    context "on #{os}" do
8
      let(:facts) { os_facts }
9
10
      context 'with dnat' do
11
        let(:pre_condition) do
12 01d8a819 tr
          '
13 a5205d2f tr
          # inet-filter-chain-ingoing
14 01d8a819 tr
          nftables::chain{ \'ingoing\':
15
            inject     => \'20-default_fwd\',
16
            inject_iif => \'eth0\',
17
            inject_oif => \'eth1\';
18 a5205d2f tr
          }
19

20
          # inet-filter-chain-default_fwd
21
          nftables::rules::dnat4{
22 01d8a819 tr
            \'http\':
23
              order => \'10\',
24
              chain => \'ingoing\',
25
              daddr => \'192.0.2.2\',
26
              port  => \'http\';
27
            \'https\':
28
              order => \'10\',
29
              chain => \'ingoing\',
30
              daddr => \'192.0.2.2\',
31
              port  => \'https\';
32
            \'http_alt\':
33
              order => \'10\',
34
              chain => \'ingoing\',
35
              iif   => \'eth0\',
36
              daddr => \'192.0.2.2\',
37
              proto => \'tcp\',
38 a5205d2f tr
              port  => 8080,
39
              dport => 8000;
40 01d8a819 tr
            \'wireguard\':
41
              order => \'10\',
42
              chain => \'ingoing\',
43
              iif   => \'eth0\',
44
              daddr => \'192.0.2.3\',
45
              proto => \'udp\',
46
              port  => \'51820\';
47 a5205d2f tr
          }
48 01d8a819 tr
          '
49 a5205d2f tr
        end
50
51
        it { is_expected.to compile }
52
53 01d8a819 tr
        it {
54
          is_expected.to contain_concat('nftables-inet-filter-chain-default_fwd').with(
55
            path:           '/etc/nftables/puppet/inet-filter-chain-default_fwd.nft',
56
            owner:          'root',
57
            group:          'root',
58
            mode:           '0640',
59
            ensure_newline: true,
60
          )
61
        }
62
        it {
63
          is_expected.to contain_concat__fragment('nftables-inet-filter-chain-default_fwd-header').with(
64
            target:  'nftables-inet-filter-chain-default_fwd',
65
            content: %r{^chain default_fwd \{$},
66
            order:   '00',
67
          )
68
        }
69
        it {
70
          is_expected.to contain_concat__fragment('nftables-inet-filter-chain-default_fwd-rule-jump_ingoing').with(
71
            target:  'nftables-inet-filter-chain-default_fwd',
72
            content: %r{^  iifname eth0 oifname eth1 jump ingoing$},
73
            order:   '20',
74
          )
75
        }
76
        it {
77
          is_expected.to contain_concat__fragment('nftables-inet-filter-chain-default_fwd-footer').with(
78
            target:  'nftables-inet-filter-chain-default_fwd',
79
            content: %r{^\}$},
80
            order:   '99',
81
          )
82
        }
83 a5205d2f tr
84 01d8a819 tr
        it {
85
          is_expected.to contain_concat__fragment('nftables-inet-filter-chain-ingoing-header').with(
86
            target:  'nftables-inet-filter-chain-ingoing',
87
            content: %r{^chain ingoing \{$},
88
            order:   '00',
89
          )
90
        }
91
        it {
92
          is_expected.to contain_concat__fragment('nftables-inet-filter-chain-ingoing-rule-http').with(
93
            target:  'nftables-inet-filter-chain-ingoing',
94
            content: %r{^  ip daddr 192.0.2.2 tcp dport http accept$},
95
            order:   '10',
96
          )
97
        }
98
        it {
99
          is_expected.to contain_concat__fragment('nftables-inet-filter-chain-ingoing-rule-https').with(
100
            target:  'nftables-inet-filter-chain-ingoing',
101
            content: %r{^  ip daddr 192.0.2.2 tcp dport https accept$},
102
            order:   '10',
103
          )
104
        }
105
        it {
106
          is_expected.to contain_concat__fragment('nftables-inet-filter-chain-ingoing-rule-http_alt').with(
107
            target:  'nftables-inet-filter-chain-ingoing',
108
            content: %r{^  iifname eth0 ip daddr 192.0.2.2 tcp dport 8000 accept$},
109
            order:   '10',
110
          )
111
        }
112
        it {
113
          is_expected.to contain_concat__fragment('nftables-inet-filter-chain-ingoing-rule-wireguard').with(
114
            target:  'nftables-inet-filter-chain-ingoing',
115
            content: %r{^  iifname eth0 ip daddr 192.0.2.3 udp dport 51820 accept$},
116
            order:   '10',
117
          )
118
        }
119
        it {
120
          is_expected.to contain_concat__fragment('nftables-inet-filter-chain-ingoing-footer').with(
121
            target:  'nftables-inet-filter-chain-ingoing',
122
            content: %r{^\}$},
123
            order:   '99',
124
          )
125
        }
126 a5205d2f tr
127 01d8a819 tr
        it {
128
          is_expected.to contain_concat('nftables-ip-nat-chain-PREROUTING').with(
129
            path:           '/etc/nftables/puppet/ip-nat-chain-PREROUTING.nft',
130
            owner:          'root',
131
            group:          'root',
132
            mode:           '0640',
133
            ensure_newline: true,
134
          )
135
        }
136
        it {
137
          is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-header').with(
138
            target:  'nftables-ip-nat-chain-PREROUTING',
139
            content: %r{^chain PREROUTING \{$},
140
            order:   '00',
141
          )
142
        }
143
        it {
144
          is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-rule-type').with(
145
            target:  'nftables-ip-nat-chain-PREROUTING',
146
            content: %r{^  type nat hook prerouting priority -100$},
147
            order:   '01',
148
          )
149
        }
150
        it {
151
          is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-rule-policy').with(
152
            target:  'nftables-ip-nat-chain-PREROUTING',
153
            content: %r{^  policy accept$},
154
            order:   '02',
155
          )
156
        }
157
        it {
158
          is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-rule-http').with(
159
            target:  'nftables-ip-nat-chain-PREROUTING',
160
            content: %r{^  tcp dport http dnat to 192.0.2.2$},
161
            order:   '10',
162
          )
163
        }
164
        it {
165
          is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-rule-https').with(
166
            target:  'nftables-ip-nat-chain-PREROUTING',
167
            content: %r{^  tcp dport https dnat to 192.0.2.2$},
168
            order:   '10',
169
          )
170
        }
171
        it {
172
          is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-rule-http_alt').with(
173
            target:  'nftables-ip-nat-chain-PREROUTING',
174
            content: %r{^  iifname eth0 tcp dport 8080 dnat to 192.0.2.2:8000$},
175
            order:   '10',
176
          )
177
        }
178
        it {
179
          is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-rule-wireguard').with(
180
            target:  'nftables-ip-nat-chain-PREROUTING',
181
            content: %r{^  iifname eth0 udp dport 51820 dnat to 192.0.2.3$},
182
            order:   '10',
183
          )
184
        }
185
        it {
186
          is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-footer').with(
187
            target:  'nftables-ip-nat-chain-PREROUTING',
188
            content: %r{^\}$},
189
            order:   '99',
190
          )
191
        }
192 a5205d2f tr
      end
193
    end
194
  end
195
end