infrataster-plugin-firewall 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1a9d0058206c52c806c0506af6c3c3e525f43a0e
4
- data.tar.gz: 52a5e832e03721db499b672ea3e2cd4d2ee704b6
3
+ metadata.gz: dab37701a4a6c138072f1e492afeba8a10a72858
4
+ data.tar.gz: d8ff612f64c33a1caaae7505e4abdede09525b3b
5
5
  SHA512:
6
- metadata.gz: 0eaa89edf8d58059eb89236b83c07cc1c0d98c58ac0962338c88730b1c505fce2e01f4b073307032cb53c0829da6f4ade5009b606e13a4d1a8a71dbf7a0e1225
7
- data.tar.gz: 88866ecd302ee50988c3225e31658ee45142882021282cd38c49a24441bd91590ae8a53d37bccf1350fd35f5e9368a6d14e126239b639c4437e690ca95cb3095
6
+ metadata.gz: 1e8c0a5497bab4cf8b0862784ad5ecbe2350a9d6710ca7a7b9150ace55b767f669d512a212f3ebadc2f697735ac2ced29ca749b8960dd336ecbaddca2f4d6ead
7
+ data.tar.gz: 098f89b3e1da836f3bf3b10c5847c0921bcd332d9a4cd908dc6294f650f46fdea20aeebdbdca7c9556f800467e3b2593fc531b47959664a01ff4ec07033258bd
data/.gitignore CHANGED
File without changes
data/.rubocop.yml CHANGED
File without changes
data/.travis.yml CHANGED
File without changes
data/Gemfile CHANGED
File without changes
data/LICENSE.txt CHANGED
File without changes
data/README.md CHANGED
@@ -24,6 +24,8 @@ describe server(:src) do
24
24
  it { is_expected.to be_reachable } #ICMP ping
25
25
  it { is_expected.to be_reachable.dest_port(80) } #TCP:80
26
26
  it { is_expected.to be_reachable.tcp.dest_port(80) }
27
+ it { is_expected.to be_reachable.tcp.dest_port(22).ack } # judge with both ACK and captured SYN
28
+ it { is_expected.to be_reachable.tcp.dest_port(22).ack(:only) } # judge with only ACK
27
29
  it { is_expected.to be_reachable.udp.dest_port(53) }
28
30
  it { is_expected.to be_reachable.dest_port('80/tcp') }
29
31
  it { is_expected.to be_reachable.dest_port('53/udp') }
@@ -42,13 +44,15 @@ server 'src'
42
44
  should reach to server 'dst'
43
45
  should reach to server 'dst' dest_port: 80
44
46
  should reach to server 'dst' tcp dest_port: 80
47
+ should reach to server 'dst' tcp dest_port: 22
48
+ should reach to server 'dst' tcp dest_port: 22
45
49
  should reach to server 'dst' udp dest_port: 53
46
50
  should reach to server 'dst' dest_port: 80/tcp
47
51
  should reach to server 'dst' dest_port: 53/udp
48
52
  should reach to server 'dst' tcp dest_port: 80 source_port: 30123
49
53
 
50
54
  Finished in 21.35 seconds (files took 0.7851 seconds to load)
51
- 7 examples, 0 failures
55
+ 9 examples, 0 failures
52
56
  $
53
57
  ```
54
58
 
data/RELEASE_NOTES.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Release Notes
2
2
 
3
+ ## v0.1.4
4
+
5
+ * Add feature to judge with ACK #2
6
+ * Change dependency infrataster version 0.2.0 -> 0.3.0
7
+
3
8
  ## v0.1.3
4
9
 
5
10
  * Fix to netcat send tiny string on udp #1
data/Rakefile CHANGED
@@ -31,6 +31,10 @@ namespace :spec do
31
31
  task :clean => ['destroy_vm'] do
32
32
  end
33
33
 
34
+ desc 'Stop'
35
+ task :stop => ['stop_vm'] do
36
+ end
37
+
34
38
  desc 'Prepare'
35
39
  task :prepare => ['start_vm'] do
36
40
  end
@@ -40,6 +44,11 @@ namespace :spec do
40
44
  system 'vagrant reload --provision | grep "not created" && vagrant up'
41
45
  end
42
46
 
47
+ task :stop_vm do
48
+ puts yellow('Stopping VM...')
49
+ system 'vagrant halt'
50
+ end
51
+
43
52
  task :destroy_vm do
44
53
  puts yellow('Destroying VM...')
45
54
  system 'vagrant', 'destroy', '-f'
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_runtime_dependency 'infrataster', '~> 0.2.0'
21
+ spec.add_runtime_dependency 'infrataster', '~> 0.3.0'
22
22
 
23
23
  spec.add_development_dependency 'bundler', '~> 1.7'
24
24
  spec.add_development_dependency 'rake', '~> 10.0'
File without changes
@@ -56,6 +56,11 @@ module Infrataster
56
56
  @chain_string += " source_port: #{port}"
57
57
  end
58
58
 
59
+ chain :ack do |mode = :both|
60
+ @options ||= {}
61
+ @options.merge!(ack: mode)
62
+ end
63
+
59
64
  failure_message do
60
65
  s = "expected to reach to #{resource.dest_node}"
61
66
  s + "#{@chain_string}, but did not."
File without changes
File without changes
File without changes
@@ -10,6 +10,7 @@ module Infrataster
10
10
  @protocol = options[:protocol] ? options[:protocol] : :icmp
11
11
  @dest_port = options[:dest_port] ? options[:dest_port] : 80
12
12
  @source_port = options[:source_port] ? options[:source_port] : nil
13
+ @ack = options[:ack] ? options[:ack] : nil
13
14
  end
14
15
 
15
16
  def reachable?
@@ -31,23 +32,61 @@ module Infrataster
31
32
  end
32
33
 
33
34
  def transport_reachable?
34
- src_addr = Util.address(@src_node)
35
+ if @protocol == :tcp && @ack == :only
36
+ jugde_with_only_ack
37
+ else
38
+ jugde_with_capture
39
+ end
40
+ end
41
+
42
+ def jugde_with_only_ack
35
43
  dest_addr = Util.address(@dest_node)
36
- bpf_options = { :'src host' => src_addr,
37
- :'dst host' => dest_addr,
38
- :'dst port' => @dest_port,
39
- @protocol.downcase => nil }
40
- bpf_options.merge!(:'src port' => @source_port) if @source_port
41
- bpf = Capture.bpf(bpf_options)
44
+
45
+ nc_result =
46
+ @src_node.server
47
+ .ssh_exec('echo test_with_infrataster | ' \
48
+ + "nc #{dest_addr} #{@dest_port} #{nc_options}" \
49
+ '&& echo NC_OK')
50
+ nc_result.to_s.include?('NC_OK')
51
+ end
52
+
53
+ def jugde_with_capture
54
+ src_addr = Util.address(@src_node)
55
+ dest_addr = Util.address(@dest_node)
56
+
57
+ bpf = Capture.bpf(bpf_options(src_addr, dest_addr))
42
58
  capture = Capture.new(@dest_node, bpf)
59
+ nc_result = nil
43
60
  capture.open do
44
- nc_option = @protocol == :udp ? '-w1 -u' : '-w1 -t'
45
- nc_option += @source_port ? " -p #{@source_port}" : ''
46
- @src_node.server
61
+ nc_result =
62
+ @src_node.server
47
63
  .ssh_exec('echo test_with_infrataster | ' \
48
- + "nc #{dest_addr} #{@dest_port} #{nc_option}")
64
+ + "nc #{dest_addr} #{@dest_port} #{nc_options}" \
65
+ '&& echo NC_OK')
66
+ end
67
+ capture_succedded?(capture.result, nc_result)
68
+ end
69
+
70
+ def capture_succedded?(capture_result, nc_result)
71
+ if @protocol == :tcp && @ack == :both
72
+ capture_result && nc_result.to_s.include?('NC_OK')
73
+ else
74
+ capture_result
49
75
  end
50
- capture.result
76
+ end
77
+
78
+ def nc_options
79
+ nc_option = @protocol == :udp ? '-w1 -u' : '-w1 -t'
80
+ nc_option + (@source_port ? " -p #{@source_port}" : '')
81
+ end
82
+
83
+ def bpf_options(src_addr, dest_addr)
84
+ options = { :'src host' => src_addr,
85
+ :'dst host' => dest_addr,
86
+ :'dst port' => @dest_port,
87
+ @protocol.downcase => nil }
88
+ options.merge!(:'src port' => @source_port) if @source_port
89
+ options
51
90
  end
52
91
  end
53
92
  end
File without changes
@@ -2,7 +2,7 @@ module Infrataster
2
2
  module Plugin
3
3
  # Infrataster plugin for firewall
4
4
  module Firewall
5
- VERSION = '0.1.3'
5
+ VERSION = '0.1.4'
6
6
  end
7
7
  end
8
8
  end
File without changes
@@ -2,9 +2,13 @@ require 'spec_helper'
2
2
 
3
3
  describe server(:src) do
4
4
  describe firewall(server(:dst)) do
5
- it { is_expected.to be_reachable }
5
+ it {
6
+ is_expected.to be_reachable
7
+ }
6
8
  it { is_expected.to be_reachable.dest_port(80) }
7
9
  it { is_expected.to be_reachable.tcp.dest_port(80) }
10
+ it { is_expected.to be_reachable.tcp.dest_port(22).ack }
11
+ it { is_expected.to be_reachable.tcp.dest_port(22).ack(:only) }
8
12
  it { is_expected.to be_reachable.udp.dest_port(53) }
9
13
  it { is_expected.to be_reachable.dest_port('80/tcp') }
10
14
  it { is_expected.to be_reachable.dest_port('53/udp') }
File without changes
data/spec/spec_helper.rb CHANGED
File without changes
@@ -25,6 +25,9 @@ module Infrataster
25
25
  it 'should have chain `source_port`' do
26
26
  expect(context.be_reachable).to respond_to(:source_port)
27
27
  end
28
+ it 'should have chain `ack`' do
29
+ expect(context.be_reachable).to respond_to(:ack)
30
+ end
28
31
  it 'should have failure_message' do
29
32
  expect(context.be_reachable)
30
33
  .to respond_to(:failure_message)
@@ -9,7 +9,7 @@ module Infrataster
9
9
  Infrataster::Server.define(:src, '192.168.33.10')
10
10
  Infrataster::Server.define(:dst, '192.168.33.11')
11
11
  end
12
- after(:all) { Infrataster::Server.clear_all }
12
+ after(:all) { Infrataster::Server.clear_defined_servers }
13
13
  describe '#open' do
14
14
  let(:capture) do
15
15
  ssh = double('ssh')
@@ -9,7 +9,7 @@ module Infrataster
9
9
  Infrataster::Server.define(:src, '192.168.33.10')
10
10
  Infrataster::Server.define(:dst, '192.168.33.11')
11
11
  end
12
- after(:all) { Infrataster::Server.clear_all }
12
+ after(:all) { Infrataster::Server.clear_defined_servers }
13
13
  describe '#reachable?' do
14
14
  context 'if @protocol == :icmp' do
15
15
  let(:transfer) do
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: infrataster-plugin-firewall
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroshi Ota
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-30 00:00:00.000000000 Z
11
+ date: 2015-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: infrataster
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.0
19
+ version: 0.3.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.0
26
+ version: 0.3.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement