Projet

Général

Profil

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

root / spec / classes / dnat4_spec.rb @ 3d29a6eb

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

1
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
          """
13
          # inet-filter-chain-ingoing
14
          nftables::chain{ 'ingoing':
15
            inject     => '20-default_fwd',
16
            inject_iif => 'eth0',
17
            inject_oif => 'eth1';
18
          }
19

20
          # inet-filter-chain-default_fwd
21
          nftables::rules::dnat4{
22
            '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
              port  => 8080,
39
              dport => 8000;
40
            'wireguard':
41
              order => '10',
42
              chain => 'ingoing',
43
              iif   => 'eth0',
44
              daddr => '192.0.2.3',
45
              proto => 'udp',
46
              port  => '51820';
47
          }
48
          """
49
        end
50

    
51
        it { is_expected.to compile }
52

    
53
        it { is_expected.to contain_concat('nftables-inet-filter-chain-default_fwd').with(
54
          :path           => '/etc/nftables/puppet/inet-filter-chain-default_fwd.nft',
55
          :owner          => 'root',
56
          :group          => 'root',
57
          :mode           => '0640',
58
          :ensure_newline => true,
59
        )}
60
        it { is_expected.to contain_concat__fragment('nftables-inet-filter-chain-default_fwd-header').with(
61
          :target  => 'nftables-inet-filter-chain-default_fwd',
62
          :content => /^chain default_fwd {$/,
63
          :order   => '00',
64
        )}
65
        it { is_expected.to contain_concat__fragment('nftables-inet-filter-chain-default_fwd-rule-jump_ingoing').with(
66
          :target  => 'nftables-inet-filter-chain-default_fwd',
67
          :content => /^  iifname eth0 oifname eth1 jump ingoing$/,
68
          :order   => '20',
69
        )}
70
        it { is_expected.to contain_concat__fragment('nftables-inet-filter-chain-default_fwd-footer').with(
71
          :target  => 'nftables-inet-filter-chain-default_fwd',
72
          :content => /^}$/,
73
          :order   => '99',
74
        )}
75

    
76
        it { is_expected.to contain_concat__fragment('nftables-inet-filter-chain-ingoing-header').with(
77
          :target  => 'nftables-inet-filter-chain-ingoing',
78
          :content => /^chain ingoing {$/,
79
          :order   => '00',
80
        )}
81
        it { is_expected.to contain_concat__fragment('nftables-inet-filter-chain-ingoing-rule-http').with(
82
          :target  => 'nftables-inet-filter-chain-ingoing',
83
          :content => /^  ip daddr 192.0.2.2 tcp dport http accept$/,
84
          :order   => '10',
85
        )}
86
        it { is_expected.to contain_concat__fragment('nftables-inet-filter-chain-ingoing-rule-https').with(
87
          :target  => 'nftables-inet-filter-chain-ingoing',
88
          :content => /^  ip daddr 192.0.2.2 tcp dport https accept$/,
89
          :order   => '10',
90
        )}
91
        it { is_expected.to contain_concat__fragment('nftables-inet-filter-chain-ingoing-rule-http_alt').with(
92
          :target  => 'nftables-inet-filter-chain-ingoing',
93
          :content => /^  iifname eth0 ip daddr 192.0.2.2 tcp dport 8000 accept$/,
94
          :order   => '10',
95
        )}
96
        it { is_expected.to contain_concat__fragment('nftables-inet-filter-chain-ingoing-rule-wireguard').with(
97
          :target  => 'nftables-inet-filter-chain-ingoing',
98
          :content => /^  iifname eth0 ip daddr 192.0.2.3 udp dport 51820 accept$/,
99
          :order   => '10',
100
        )}
101
        it { is_expected.to contain_concat__fragment('nftables-inet-filter-chain-ingoing-footer').with(
102
          :target  => 'nftables-inet-filter-chain-ingoing',
103
          :content => /^}$/,
104
          :order   => '99',
105
        )}
106

    
107
        it { is_expected.to contain_concat('nftables-ip-nat-chain-PREROUTING').with(
108
          :path           => '/etc/nftables/puppet/ip-nat-chain-PREROUTING.nft',
109
          :owner          => 'root',
110
          :group          => 'root',
111
          :mode           => '0640',
112
          :ensure_newline => true,
113
        )}
114
        it { is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-header').with(
115
          :target  => 'nftables-ip-nat-chain-PREROUTING',
116
          :content => /^chain PREROUTING {$/,
117
          :order   => '00',
118
        )}
119
        it { is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-rule-type').with(
120
          :target  => 'nftables-ip-nat-chain-PREROUTING',
121
          :content => /^  type nat hook prerouting priority -100$/,
122
          :order   => '01',
123
        )}
124
        it { is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-rule-policy').with(
125
          :target  => 'nftables-ip-nat-chain-PREROUTING',
126
          :content => /^  policy accept$/,
127
          :order   => '02',
128
        )}
129
        it { is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-rule-http').with(
130
          :target  => 'nftables-ip-nat-chain-PREROUTING',
131
          :content => /^  tcp dport http dnat to 192.0.2.2$/,
132
          :order   => '10',
133
        )}
134
        it { is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-rule-https').with(
135
          :target  => 'nftables-ip-nat-chain-PREROUTING',
136
          :content => /^  tcp dport https dnat to 192.0.2.2$/,
137
          :order   => '10',
138
        )}
139
        it { is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-rule-http_alt').with(
140
          :target  => 'nftables-ip-nat-chain-PREROUTING',
141
          :content => /^  iifname eth0 tcp dport 8080 dnat to 192.0.2.2:8000$/,
142
          :order   => '10',
143
        )}
144
        it { is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-rule-wireguard').with(
145
          :target  => 'nftables-ip-nat-chain-PREROUTING',
146
          :content => /^  iifname eth0 udp dport 51820 dnat to 192.0.2.3$/,
147
          :order   => '10',
148
        )}
149
        it { is_expected.to contain_concat__fragment('nftables-ip-nat-chain-PREROUTING-footer').with(
150
          :target  => 'nftables-ip-nat-chain-PREROUTING',
151
          :content => /^}$/,
152
          :order   => '99',
153
        )}
154
      end
155
    end
156
  end
157
end