ript 0.8.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/.rbenv-version +1 -0
- data/AUTHORS.md +16 -0
- data/CHANGELOG.md +93 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +62 -0
- data/LICENCE +19 -0
- data/README.md +564 -0
- data/Rakefile +136 -0
- data/bin/rbenv-sudo +18 -0
- data/bin/ript +207 -0
- data/dist/init.d +48 -0
- data/examples/accept-multiple-from-and-to.rb +16 -0
- data/examples/accept-with-a-list-of-ports.rb +13 -0
- data/examples/accept-with-specific-port-and-interface.rb +14 -0
- data/examples/accept-without-specific-from.rb +11 -0
- data/examples/accept.rb +12 -0
- data/examples/basic.rb +4 -0
- data/examples/dash-in-partition-name.rb +2 -0
- data/examples/drop.rb +11 -0
- data/examples/duplicate-partition-names/foobar1.rb +2 -0
- data/examples/duplicate-partition-names/foobar2.rb +2 -0
- data/examples/errors-undefined-method-with-no-match.rb +12 -0
- data/examples/errors-undefined-method.rb +12 -0
- data/examples/forward-dnat-with-different-destination-port.rb +16 -0
- data/examples/forward-dnat-with-explicit-from-and-port-mappings.rb +11 -0
- data/examples/forward-dnat-with-explicit-from-and-ports.rb +11 -0
- data/examples/forward-dnat-with-explicit-from.rb +11 -0
- data/examples/forward-dnat-with-explicit-protocols.rb +15 -0
- data/examples/forward-dnat-with-multiple-froms.rb +13 -0
- data/examples/forward-dnat-with-multiple-ports.rb +10 -0
- data/examples/forward-dnat-with-multiple-sources.rb +15 -0
- data/examples/forward-dnat.rb +16 -0
- data/examples/forward-snat-with-explicit-from.rb +16 -0
- data/examples/forward-snat-with-multiple-sources.rb +13 -0
- data/examples/forward-snat.rb +9 -0
- data/examples/log-and-accept.rb +12 -0
- data/examples/log-and-drop.rb +11 -0
- data/examples/log-dnat.rb +10 -0
- data/examples/log-snat.rb +13 -0
- data/examples/log.rb +11 -0
- data/examples/missing-address-definition-in-destination.rb +15 -0
- data/examples/missing-address-definition-in-from.rb +15 -0
- data/examples/multiple-partitions-in-this-file.rb +14 -0
- data/examples/multiple-partitions/bar.rb +11 -0
- data/examples/multiple-partitions/foo.rb +17 -0
- data/examples/partition-name-exactly-20-characters.rb +2 -0
- data/examples/partition-name-longer-than-20-characters.rb +2 -0
- data/examples/postclean.rb +10 -0
- data/examples/preclean.rb +10 -0
- data/examples/raw-with-chain-deletion.rb +9 -0
- data/examples/raw-with-flush.rb +9 -0
- data/examples/raw.rb +50 -0
- data/examples/reject.rb +11 -0
- data/examples/space-in-partition-name.rb +2 -0
- data/features/cli.feature +115 -0
- data/features/dsl/errors.feature +107 -0
- data/features/dsl/filter.feature +187 -0
- data/features/dsl/logging.feature +114 -0
- data/features/dsl/nat.feature +271 -0
- data/features/dsl/raw.feature +28 -0
- data/features/setup.feature +58 -0
- data/features/step_definitions/cli_steps.rb +15 -0
- data/features/step_definitions/example_steps.rb +44 -0
- data/features/support/env.rb +25 -0
- data/lib/ript/bootstrap.rb +20 -0
- data/lib/ript/dsl.rb +14 -0
- data/lib/ript/dsl/primitives.rb +7 -0
- data/lib/ript/dsl/primitives/common.rb +78 -0
- data/lib/ript/dsl/primitives/filter.rb +145 -0
- data/lib/ript/dsl/primitives/nat.rb +206 -0
- data/lib/ript/dsl/primitives/raw.rb +45 -0
- data/lib/ript/exceptions.rb +2 -0
- data/lib/ript/partition.rb +162 -0
- data/lib/ript/patches.rb +10 -0
- data/lib/ript/rule.rb +70 -0
- data/lib/ript/version.rb +3 -0
- data/ript.gemspec +33 -0
- metadata +232 -0
data/examples/raw.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
partition "setup" do
|
2
|
+
raw <<-RAW
|
3
|
+
####################
|
4
|
+
# policy #
|
5
|
+
####################
|
6
|
+
iptables --policy INPUT DROP
|
7
|
+
iptables --policy OUTPUT DROP
|
8
|
+
iptables --policy FORWARD DROP
|
9
|
+
iptables --table mangle --policy PREROUTING ACCEPT
|
10
|
+
iptables --table mangle --policy OUTPUT ACCEPT
|
11
|
+
|
12
|
+
####################
|
13
|
+
# before #
|
14
|
+
####################
|
15
|
+
# Clean all traffic by sending it through a "before" chain.
|
16
|
+
iptables --new-chain before-a
|
17
|
+
|
18
|
+
iptables --insert INPUT 1 --jump before-a
|
19
|
+
iptables --insert OUTPUT 1 --jump before-a
|
20
|
+
iptables --insert FORWARD 1 --jump before-a
|
21
|
+
|
22
|
+
# ICMP cleaning
|
23
|
+
iptables --append before-a --protocol ICMP --icmp-type echo-reply --jump ACCEPT
|
24
|
+
iptables --append before-a --protocol ICMP --icmp-type destination-unreachable --jump ACCEPT
|
25
|
+
iptables --append before-a --protocol ICMP --icmp-type source-quench --jump ACCEPT
|
26
|
+
iptables --append before-a --protocol ICMP --icmp-type echo-request --jump ACCEPT
|
27
|
+
iptables --append before-a --protocol ICMP --icmp-type time-exceeded --jump ACCEPT
|
28
|
+
iptables --append before-a --protocol ICMP --icmp-type parameter-problem --jump ACCEPT
|
29
|
+
iptables --append before-a --protocol ICMP --jump LOG --log-prefix "INVALID_ICMP " --log-level debug
|
30
|
+
iptables --append before-a --protocol ICMP --jump DROP
|
31
|
+
|
32
|
+
# State cleaning
|
33
|
+
iptables --append before-a --match state --state INVALID --jump LOG --log-prefix "INVALID_STATE " --log-level debug
|
34
|
+
iptables --append before-a --match state --state INVALID --jump DROP
|
35
|
+
iptables --append before-a --protocol TCP --match state --state ESTABLISHED,RELATED --jump ACCEPT
|
36
|
+
iptables --append before-a --protocol UDP --match state --state ESTABLISHED,RELATED --jump ACCEPT
|
37
|
+
|
38
|
+
# Allow loopback
|
39
|
+
iptables --insert before-a --protocol ALL --in-interface lo --jump ACCEPT
|
40
|
+
iptables --insert before-a --protocol ALL --out-interface lo --jump ACCEPT
|
41
|
+
|
42
|
+
####################
|
43
|
+
# after #
|
44
|
+
####################
|
45
|
+
# Clean all traffic by sending it through an "after" chain.
|
46
|
+
iptables --new-chain after-a
|
47
|
+
iptables --append after-a --jump LOG --log-prefix "END_DROP " --log-level debug
|
48
|
+
RAW
|
49
|
+
end
|
50
|
+
|
data/examples/reject.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
partition "bar" do
|
2
|
+
label "www.bar.com", :address => "172.23.0.95"
|
3
|
+
label "barprod-web-01", :address => "192.168.19.2"
|
4
|
+
label "localhost", :address => "127.0.0.1"
|
5
|
+
|
6
|
+
reject "localhost on www.bar.com" do
|
7
|
+
from "localhost"
|
8
|
+
to "www.bar.com"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
@@ -0,0 +1,115 @@
|
|
1
|
+
Feature: Ript cli utility
|
2
|
+
|
3
|
+
@sudo @timeout-10
|
4
|
+
Scenario: Check rules to apply
|
5
|
+
Given I have no iptables rules loaded
|
6
|
+
When I run `ript rules diff examples/basic.rb`
|
7
|
+
Then the output should match:
|
8
|
+
"""
|
9
|
+
iptables --table nat --new-chain basic-d\w+
|
10
|
+
iptables --table nat --new-chain basic-s\w+
|
11
|
+
iptables --table filter --new-chain basic-a\w+
|
12
|
+
"""
|
13
|
+
Then the created chain name in all tables should match
|
14
|
+
|
15
|
+
@sudo @timeout-10
|
16
|
+
Scenario: Apply rules
|
17
|
+
Given I have no iptables rules loaded
|
18
|
+
When I run `ript rules diff examples/basic.rb`
|
19
|
+
Then the output from "ript rules diff examples/basic.rb" should match:
|
20
|
+
"""
|
21
|
+
iptables --table nat --new-chain basic-d\w+
|
22
|
+
iptables --table nat --new-chain basic-s\w+
|
23
|
+
iptables --table filter --new-chain basic-a\w+
|
24
|
+
"""
|
25
|
+
When I run `ript rules apply examples/basic.rb`
|
26
|
+
Then the output from "ript rules diff examples/basic.rb" should match:
|
27
|
+
"""
|
28
|
+
iptables --table nat --new-chain basic-d\w+
|
29
|
+
iptables --table nat --new-chain basic-s\w+
|
30
|
+
iptables --table filter --new-chain basic-a\w+
|
31
|
+
"""
|
32
|
+
When I run `ript rules diff examples/basic.rb `
|
33
|
+
Then the output from "ript rules diff examples/basic.rb " should contain exactly:
|
34
|
+
"""
|
35
|
+
"""
|
36
|
+
Then the created chain name in all tables should match
|
37
|
+
|
38
|
+
@sudo @timeout-10
|
39
|
+
Scenario: Clean rules
|
40
|
+
Given I have no iptables rules loaded
|
41
|
+
When I run `ript rules apply examples/preclean.rb`
|
42
|
+
Then the output from "ript rules apply examples/preclean.rb" should match:
|
43
|
+
"""
|
44
|
+
iptables --table filter --new-chain partition-a
|
45
|
+
iptables --table filter --insert INPUT 1 --jump partition-a
|
46
|
+
iptables --table filter --insert OUTPUT 1 --jump partition-a
|
47
|
+
iptables --table filter --insert FORWARD 1 --jump partition-a
|
48
|
+
iptables --table nat --new-chain partition-d
|
49
|
+
iptables --table nat --insert PREROUTING 1 --jump partition-d
|
50
|
+
iptables --table nat --new-chain partition-s
|
51
|
+
iptables --table nat --insert POSTROUTING 1 --jump partition-s
|
52
|
+
|
53
|
+
|
54
|
+
# supercow-\w+
|
55
|
+
iptables --table nat --new-chain supercow-d\w+
|
56
|
+
iptables --table nat --new-chain supercow-s\w+
|
57
|
+
iptables --table filter --new-chain supercow-a\w+
|
58
|
+
iptables --table filter --append supercow-a\w+ --protocol TCP --destination 172.29.2.2 --source 172.27.1.1 --jump ACCEPT
|
59
|
+
iptables --table filter --insert partition-a --destination 172.29.2.2 --jump supercow-a\w+
|
60
|
+
"""
|
61
|
+
When I run `ript rules apply examples/postclean.rb`
|
62
|
+
Then the output from "ript rules apply examples/postclean.rb" should match:
|
63
|
+
"""
|
64
|
+
# supercow-\w+
|
65
|
+
iptables --table nat --new-chain supercow-d\w+
|
66
|
+
iptables --table nat --new-chain supercow-s\w+
|
67
|
+
iptables --table filter --new-chain supercow-a\w+
|
68
|
+
iptables --table filter --append supercow-a\w+ --protocol TCP --destination 172.29.2.3 --source 172.27.1.2 --jump ACCEPT
|
69
|
+
iptables --table filter --insert partition-a --destination 172.29.2.3 --jump supercow-a\w+
|
70
|
+
"""
|
71
|
+
When I run `ript rules diff examples/postclean.rb`
|
72
|
+
Then the output from "ript rules diff examples/postclean.rb" should contain exactly:
|
73
|
+
"""
|
74
|
+
"""
|
75
|
+
When I run `ript clean apply examples/postclean.rb `
|
76
|
+
Then the output from "ript clean apply examples/postclean.rb " should match:
|
77
|
+
"""
|
78
|
+
iptables --table filter --delete partition-a --destination 172.29.2.2/32 --jump supercow-a\w+
|
79
|
+
iptables --table filter --flush supercow-a\w+
|
80
|
+
iptables --table filter --delete-chain supercow-a\w+
|
81
|
+
iptables --table nat --flush supercow-d\w+
|
82
|
+
iptables --table nat --delete-chain supercow-d\w+
|
83
|
+
iptables --table nat --flush supercow-s\w+
|
84
|
+
iptables --table nat --delete-chain supercow-s\w+
|
85
|
+
"""
|
86
|
+
When I run `ript clean diff examples/postclean.rb`
|
87
|
+
Then the output from "ript clean diff examples/postclean.rb" should contain exactly:
|
88
|
+
"""
|
89
|
+
"""
|
90
|
+
|
91
|
+
@sudo @timeout-10
|
92
|
+
Scenario: raw rules should only apply once
|
93
|
+
Given I have no iptables rules loaded
|
94
|
+
When I run `ript rules apply examples/raw.rb`
|
95
|
+
Then the output from "ript rules apply examples/raw.rb" should match:
|
96
|
+
"""
|
97
|
+
iptables --new-chain before-a
|
98
|
+
"""
|
99
|
+
When I run `ript rules diff examples/raw.rb`
|
100
|
+
Then the output from "ript rules diff examples/raw.rb" should contain exactly:
|
101
|
+
"""
|
102
|
+
"""
|
103
|
+
|
104
|
+
@sudo @timeout-10
|
105
|
+
Scenario: Rule saving works
|
106
|
+
Given I have no iptables rules loaded
|
107
|
+
When I run `ript rules save`
|
108
|
+
Then the output from "ript rules save" should match:
|
109
|
+
"""
|
110
|
+
\*filter
|
111
|
+
:INPUT ACCEPT \[\d+:\d+\]
|
112
|
+
:FORWARD ACCEPT \[\d+:\d+\]
|
113
|
+
:OUTPUT ACCEPT \[\d+:\d+\]
|
114
|
+
COMMIT
|
115
|
+
"""
|
@@ -0,0 +1,107 @@
|
|
1
|
+
Feature: Error handling
|
2
|
+
To ensure that rules apply cleanly
|
3
|
+
Ript should validate user input
|
4
|
+
And fail gracefully
|
5
|
+
|
6
|
+
@errors @name
|
7
|
+
Scenario: Name errors - undefined method
|
8
|
+
# should verify no spaces or dashes
|
9
|
+
When I run `ript rules generate examples/errors-undefined-method.rb`
|
10
|
+
Then the output should match:
|
11
|
+
"""
|
12
|
+
You tried using the '.+' method on line \d+ in .+/errors-undefined-method.rb
|
13
|
+
This method doesn't exist in the DSL. Did you mean:
|
14
|
+
|
15
|
+
- ports
|
16
|
+
|
17
|
+
Aborting.
|
18
|
+
"""
|
19
|
+
When I run `ript rules generate examples/errors-undefined-method-with-no-match.rb`
|
20
|
+
Then the output should match:
|
21
|
+
"""
|
22
|
+
You tried using the '.+' method on line \d+ in .+/errors-undefined-method-with-no-match.rb
|
23
|
+
This method doesn't exist in the DSL. There aren't any other methods with similar names. :-\(
|
24
|
+
Aborting.
|
25
|
+
"""
|
26
|
+
|
27
|
+
@errors @parse @duplicate
|
28
|
+
Scenario: Parse errors - duplicate partition name
|
29
|
+
# should verify no spaces or dashes
|
30
|
+
When I run `ript rules generate examples/duplicate-partition-names/`
|
31
|
+
Then the output should match:
|
32
|
+
"""
|
33
|
+
Error: Partition name '\w+' is already defined!
|
34
|
+
"""
|
35
|
+
|
36
|
+
@errors @parse
|
37
|
+
Scenario: Parse errors - bad characters in partition name
|
38
|
+
# should verify no spaces or dashes
|
39
|
+
When I run `ript rules generate examples/space-in-partition-name.rb`
|
40
|
+
Then the output should match:
|
41
|
+
"""
|
42
|
+
Error: Partition name '.+' can't contain whitespace.
|
43
|
+
"""
|
44
|
+
When I run `ript rules generate examples/dash-in-partition-name.rb`
|
45
|
+
Then the output should match:
|
46
|
+
"""
|
47
|
+
Error: Partition name '.+' can't contain dashes
|
48
|
+
"""
|
49
|
+
|
50
|
+
@errors @parse
|
51
|
+
Scenario: Parse errors - partition name longer than characters
|
52
|
+
When I run `ript rules generate examples/partition-name-longer-than-20-characters.rb`
|
53
|
+
Then the output should match:
|
54
|
+
"""
|
55
|
+
Error: Partition name '.+' cannot be longer than 20 characters.
|
56
|
+
"""
|
57
|
+
When I run `ript rules generate examples/partition-name-exactly-20-characters.rb`
|
58
|
+
Then the output should match:
|
59
|
+
"""
|
60
|
+
name_exactly_20_char
|
61
|
+
"""
|
62
|
+
|
63
|
+
|
64
|
+
@errors @parse
|
65
|
+
Scenario: Parse errors - spaces and dashes
|
66
|
+
When I run `ript rules generate examples/space-in-partition-name.rb`
|
67
|
+
Then the output should contain:
|
68
|
+
"""
|
69
|
+
Partition name 'space in my name' can't contain whitespace
|
70
|
+
"""
|
71
|
+
When I run `ript rules generate examples/dash-in-partition-name.rb`
|
72
|
+
Then the output should contain:
|
73
|
+
"""
|
74
|
+
Partition name 'dash-in-my-name' can't contain dashes ('-')
|
75
|
+
"""
|
76
|
+
|
77
|
+
@errors @parse
|
78
|
+
Scenario: Parse errors - missing address definition
|
79
|
+
When I run `ript rules generate examples/missing-address-definition-in-destination.rb`
|
80
|
+
Then the output should contain:
|
81
|
+
"""
|
82
|
+
Address 'barprod-web-02' (a destination) isn't defined
|
83
|
+
"""
|
84
|
+
|
85
|
+
@errors
|
86
|
+
Scenario: Parse errors - missing address definition
|
87
|
+
When I run `ript rules generate examples/missing-address-definition-in-from.rb`
|
88
|
+
Then the output should contain:
|
89
|
+
"""
|
90
|
+
Address 'bad guy' (a from) isn't defined
|
91
|
+
"""
|
92
|
+
|
93
|
+
@errors
|
94
|
+
Scenario: Load errors - missing rule file
|
95
|
+
When I run `ript rules generate examples/non-existent-lalalalala.rb`
|
96
|
+
Then the output should match:
|
97
|
+
"""
|
98
|
+
The specified rule file or directory 'examples/non-existent-lalalalala.rb' does not exist
|
99
|
+
"""
|
100
|
+
|
101
|
+
@errors @parse
|
102
|
+
Scenario: Multiple partition definitions in the same file
|
103
|
+
When I run `ript rules generate examples/multiple-partitions-in-this-file.rb`
|
104
|
+
Then the output should match:
|
105
|
+
"""
|
106
|
+
Multiple partition definitions are not permitted in the same file.
|
107
|
+
"""
|
@@ -0,0 +1,187 @@
|
|
1
|
+
Feature: Ript DSL
|
2
|
+
|
3
|
+
Scenario: Basic partition
|
4
|
+
When I run `ript rules generate examples/basic.rb`
|
5
|
+
Then the output should match:
|
6
|
+
"""
|
7
|
+
iptables --table nat --new-chain basic-d\w+
|
8
|
+
iptables --table nat --new-chain basic-s\w+
|
9
|
+
iptables --table filter --new-chain basic-a\w+
|
10
|
+
"""
|
11
|
+
Then the created chain name in all tables should match
|
12
|
+
|
13
|
+
@filter @drop
|
14
|
+
Scenario: Drop someone
|
15
|
+
When I run `ript rules generate examples/drop.rb`
|
16
|
+
Then the output should match:
|
17
|
+
"""
|
18
|
+
iptables --table nat --new-chain bar-d\w+
|
19
|
+
iptables --table nat --new-chain bar-s\w+
|
20
|
+
iptables --table filter --new-chain bar-a\w+
|
21
|
+
"""
|
22
|
+
Then the output should match:
|
23
|
+
"""
|
24
|
+
iptables --table filter --insert partition-a --destination 172.23.0.95 --jump bar-a\w+
|
25
|
+
"""
|
26
|
+
Then the output should match:
|
27
|
+
"""
|
28
|
+
iptables --table filter --append bar-a\w+ --protocol TCP --destination 172.23.0.95 --source 127.0.0.1 --jump DROP
|
29
|
+
"""
|
30
|
+
Then the created chain name in all tables should match
|
31
|
+
|
32
|
+
@filter @accept
|
33
|
+
Scenario: Accept someone
|
34
|
+
When I run `ript rules generate examples/accept.rb`
|
35
|
+
Then the output should match:
|
36
|
+
"""
|
37
|
+
iptables --table nat --new-chain keepalived-d\w+
|
38
|
+
iptables --table nat --new-chain keepalived-s\w+
|
39
|
+
iptables --table filter --new-chain keepalived-a\w+
|
40
|
+
"""
|
41
|
+
Then the output should match:
|
42
|
+
"""
|
43
|
+
iptables --table filter --insert partition-a --destination 224.0.0.0/8 --jump keepalived-a\w+
|
44
|
+
"""
|
45
|
+
Then the output should match:
|
46
|
+
"""
|
47
|
+
iptables --table filter --append keepalived-a\w+ --protocol vrrp --destination 224.0.0.0/8 --source 172.16.0.216 --jump ACCEPT
|
48
|
+
iptables --table filter --append keepalived-a\w+ --protocol vrrp --destination 224.0.0.0/8 --source 172.16.0.217 --jump ACCEPT
|
49
|
+
"""
|
50
|
+
Then the created chain name in all tables should match
|
51
|
+
|
52
|
+
@filter @accept
|
53
|
+
Scenario: Accept someone with a specific port and interface
|
54
|
+
When I run `ript rules generate examples/accept-with-specific-port-and-interface.rb`
|
55
|
+
Then the output should match:
|
56
|
+
"""
|
57
|
+
iptables --table nat --new-chain keepalived-d\w+
|
58
|
+
iptables --table nat --new-chain keepalived-s\w+
|
59
|
+
iptables --table filter --new-chain keepalived-a\w+
|
60
|
+
"""
|
61
|
+
Then the output should match:
|
62
|
+
"""
|
63
|
+
iptables --table filter --insert partition-a --destination 192.168.0.76 --jump keepalived-a\w+
|
64
|
+
"""
|
65
|
+
Then the output should match:
|
66
|
+
"""
|
67
|
+
iptables --table filter --append keepalived-a\w+ --in-interface vlan\+ --protocol tcp --dport 22 --destination 192.168.0.76 --source 192.168.0.76 --jump ACCEPT
|
68
|
+
"""
|
69
|
+
Then the created chain name in all tables should match
|
70
|
+
|
71
|
+
@filter @reject
|
72
|
+
Scenario: Reject someone
|
73
|
+
When I run `ript rules generate examples/reject.rb`
|
74
|
+
Then the output should match:
|
75
|
+
"""
|
76
|
+
iptables --table nat --new-chain bar-d\w+
|
77
|
+
iptables --table nat --new-chain bar-s\w+
|
78
|
+
iptables --table filter --new-chain bar-a\w+
|
79
|
+
"""
|
80
|
+
Then the output should match:
|
81
|
+
"""
|
82
|
+
iptables --table filter --insert partition-a --destination 172.23.0.95 --jump bar-a\w+
|
83
|
+
"""
|
84
|
+
Then the output should match:
|
85
|
+
"""
|
86
|
+
iptables --table filter --append bar-a\w+ --protocol TCP --destination 172.23.0.95 --source 127.0.0.1 --jump REJECT
|
87
|
+
"""
|
88
|
+
Then the created chain name in all tables should match
|
89
|
+
|
90
|
+
@filter @log
|
91
|
+
Scenario: Log someone
|
92
|
+
When I run `ript rules generate examples/log.rb`
|
93
|
+
Then the output should match:
|
94
|
+
"""
|
95
|
+
iptables --table nat --new-chain bar-d\w+
|
96
|
+
iptables --table nat --new-chain bar-s\w+
|
97
|
+
iptables --table filter --new-chain bar-a\w+
|
98
|
+
"""
|
99
|
+
Then the output should match:
|
100
|
+
"""
|
101
|
+
iptables --table filter --insert partition-a --destination 172.23.0.95 --jump bar-a\w+
|
102
|
+
"""
|
103
|
+
Then the output should match:
|
104
|
+
"""
|
105
|
+
iptables --table filter --append bar-a\w+ --protocol TCP --destination 172.23.0.95 --source 127.0.0.1 --jump LOG
|
106
|
+
"""
|
107
|
+
Then the created chain name in all tables should match
|
108
|
+
|
109
|
+
@filter @accept @port-range
|
110
|
+
Scenario: Accept a list of ports
|
111
|
+
When I run `ript rules generate examples/accept-with-a-list-of-ports.rb`
|
112
|
+
Then the output should match:
|
113
|
+
"""
|
114
|
+
iptables --table nat --new-chain keepalived-d\w+
|
115
|
+
iptables --table nat --new-chain keepalived-s\w+
|
116
|
+
iptables --table filter --new-chain keepalived-a\w+
|
117
|
+
"""
|
118
|
+
Then the output should match:
|
119
|
+
"""
|
120
|
+
iptables --table filter --insert partition-a --destination 224.0.0.0/8 --jump keepalived-a\w+
|
121
|
+
"""
|
122
|
+
Then the output should match:
|
123
|
+
"""
|
124
|
+
iptables --table filter --append keepalived-a\w+ --protocol tcp --dport 80 --destination 224.0.0.0/8 --source 172.16.0.216 --jump ACCEPT
|
125
|
+
iptables --table filter --append keepalived-a\w+ --protocol tcp --dport 8600:8900 --destination 224.0.0.0/8 --source 172.16.0.216 --jump ACCEPT
|
126
|
+
"""
|
127
|
+
Then the created chain name in all tables should match
|
128
|
+
|
129
|
+
@filter @accept @multiple
|
130
|
+
Scenario: Accept multiple from and to
|
131
|
+
When I run `ript rules generate examples/accept-multiple-from-and-to.rb`
|
132
|
+
Then the output should match:
|
133
|
+
"""
|
134
|
+
iptables --table nat --new-chain tootyfruity-d\w+
|
135
|
+
iptables --table nat --new-chain tootyfruity-s\w+
|
136
|
+
iptables --table filter --new-chain tootyfruity-a\w+
|
137
|
+
"""
|
138
|
+
Then the output should match:
|
139
|
+
"""
|
140
|
+
iptables --table filter --insert partition-a --destination 192.168.0.1 --jump tootyfruity-a\w+
|
141
|
+
iptables --table filter --insert partition-a --destination 192.168.0.2 --jump tootyfruity-a\w+
|
142
|
+
iptables --table filter --insert partition-a --destination 192.168.0.3 --jump tootyfruity-a\w+
|
143
|
+
iptables --table filter --insert partition-a --destination 192.168.0.4 --jump tootyfruity-a\w+
|
144
|
+
iptables --table filter --insert partition-a --destination 192.168.0.5 --jump tootyfruity-a\w+
|
145
|
+
iptables --table filter --insert partition-a --destination 192.168.0.6 --jump tootyfruity-a\w+
|
146
|
+
"""
|
147
|
+
Then the output should match:
|
148
|
+
"""
|
149
|
+
iptables --table filter --append tootyfruity-a\w+ --protocol tcp --dport 22 --destination 192.168.0.1 --source 192.168.0.1 --jump ACCEPT
|
150
|
+
iptables --table filter --append tootyfruity-a\w+ --protocol tcp --dport 22 --destination 192.168.0.2 --source 192.168.0.1 --jump ACCEPT
|
151
|
+
iptables --table filter --append tootyfruity-a\w+ --protocol tcp --dport 22 --destination 192.168.0.3 --source 192.168.0.1 --jump ACCEPT
|
152
|
+
iptables --table filter --append tootyfruity-a\w+ --protocol tcp --dport 22 --destination 192.168.0.4 --source 192.168.0.1 --jump ACCEPT
|
153
|
+
iptables --table filter --append tootyfruity-a\w+ --protocol tcp --dport 22 --destination 192.168.0.5 --source 192.168.0.1 --jump ACCEPT
|
154
|
+
iptables --table filter --append tootyfruity-a\w+ --protocol tcp --dport 22 --destination 192.168.0.6 --source 192.168.0.1 --jump ACCEPT
|
155
|
+
iptables --table filter --append tootyfruity-a\w+ --protocol tcp --dport 22 --destination 192.168.0.1 --source 192.168.0.2 --jump ACCEPT
|
156
|
+
iptables --table filter --append tootyfruity-a\w+ --protocol tcp --dport 22 --destination 192.168.0.2 --source 192.168.0.2 --jump ACCEPT
|
157
|
+
iptables --table filter --append tootyfruity-a\w+ --protocol tcp --dport 22 --destination 192.168.0.3 --source 192.168.0.2 --jump ACCEPT
|
158
|
+
iptables --table filter --append tootyfruity-a\w+ --protocol tcp --dport 22 --destination 192.168.0.4 --source 192.168.0.2 --jump ACCEPT
|
159
|
+
iptables --table filter --append tootyfruity-a\w+ --protocol tcp --dport 22 --destination 192.168.0.5 --source 192.168.0.2 --jump ACCEPT
|
160
|
+
iptables --table filter --append tootyfruity-a\w+ --protocol tcp --dport 22 --destination 192.168.0.6 --source 192.168.0.2 --jump ACCEPT
|
161
|
+
"""
|
162
|
+
Then the created chain name in all tables should match
|
163
|
+
|
164
|
+
@filter @accept @regression
|
165
|
+
Scenario: Accept someone without a specific from
|
166
|
+
When I run `ript rules generate examples/accept-without-specific-from.rb`
|
167
|
+
Then the output should match:
|
168
|
+
"""
|
169
|
+
iptables --table nat --new-chain joeblogsco-d\w+
|
170
|
+
iptables --table nat --new-chain joeblogsco-s\w+
|
171
|
+
iptables --table filter --new-chain joeblogsco-a\w+
|
172
|
+
"""
|
173
|
+
Then the output should match:
|
174
|
+
"""
|
175
|
+
iptables --table filter --append joeblogsco-a\w+ --protocol TCP --dport 80 --destination 172.22.111.99 --source 0.0.0.0/0 --jump ACCEPT
|
176
|
+
iptables --table filter --append joeblogsco-a\w+ --protocol TCP --dport 443 --destination 172.22.111.99 --source 0.0.0.0/0 --jump ACCEPT
|
177
|
+
"""
|
178
|
+
Then the output should match:
|
179
|
+
"""
|
180
|
+
iptables --table filter --insert partition-a --destination 172.22.111.99 --jump joeblogsco-a\w+
|
181
|
+
"""
|
182
|
+
Then the created chain name in all tables should match
|
183
|
+
|
184
|
+
@filter @regression
|
185
|
+
Scenario: Always include protocol when specifying port
|
186
|
+
When I generate rules for packet filtering
|
187
|
+
Then I should see a protocol specified when a port is specified
|