spior 0.1.4 → 0.1.5

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
  SHA256:
3
- metadata.gz: 105d4a29ed0eb407f8116daa49be26a8d8714d999efb531e02676f02c6ed50f3
4
- data.tar.gz: 0cfdf8f3a6f857e6d7a1541b103ade1316048c4554ab03076d5d287a2b1ffa1c
3
+ metadata.gz: 52ad58e21c256642931525e2625cb10e14a74ad17ea95825940b87f6d667fdac
4
+ data.tar.gz: 143940314f5a3e3387f094cdeb6c371a0e34a2227b803f9cb0eaeebc8ebb512d
5
5
  SHA512:
6
- metadata.gz: 37258c344e84aa8508a87d6a5b41dc821d54038a9cc163b1976e924301238b5b4debf03c2fba0e0a8015b6d17abedaf4313bdc3beb459eb7add6199f16eb8abe
7
- data.tar.gz: fe90d4935a4c36efdfb16553153c67a0a956560edb5515ac8efd412a8319a4f897203027aa55883338a32c3add6be19aa5f96e81bfd1d455e6e71357d4e337ab
6
+ metadata.gz: eadbf46e6b47eb820fbd88fd3d71c31183ca49a611ac0c6e0576724abc6357d6409fbf2edc9f69d38441889f262102af47f6fecadc2fe82bcbeea856d0557dc1
7
+ data.tar.gz: f774d5a4bec3474eccaf71e8495fc813cf71681fe609e7f7d1b6bf8e386d46c525bb138b4538f23cb4634706a578cbca96bac80fc85bb37c9700c99aff984ef1
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,10 @@
1
+ ## 0.1.5, release 2020-11-01
2
+ * Simplify lib/spior/copy, lib/spior/clear
3
+ * Write iptables rules for --clearnet and --tor
4
+ * Refacto code
5
+ * Enhance --status with open-uri and json
6
+ * Remove argument --net-card
7
+
1
8
  ## 0.1.4, release 2020-05-21
2
9
  * torrc and resolv.conf are generate dynamically
3
10
  * Remove conf/resolv
data/README.md CHANGED
@@ -17,16 +17,19 @@ And install the gem
17
17
  ### Examples
18
18
  Redirect traffic through TOR:
19
19
 
20
- $ spior -t
21
- $ spior -t -n eth0
20
+ $ spior --tor
22
21
 
23
22
  Change your ip address by reloading the TOR circuit:
24
23
 
25
- $ spior -r
24
+ $ spior --reload
26
25
 
27
26
  Look informations about your current ip address:
28
27
 
29
- $ spior -s
28
+ $ spior --status
29
+
30
+ Return to clearnet navigation
31
+
32
+ $ spior --clearnet
30
33
 
31
34
  ## Left Over
32
35
 
data/Rakefile CHANGED
@@ -1,5 +1,6 @@
1
1
  # https://github.com/seattlerb/minitest#running-your-tests-
2
2
  require "rake/testtask"
3
+ require File.dirname(__FILE__) + "/lib/spior/version"
3
4
 
4
5
  Rake::TestTask.new(:test) do |t|
5
6
  t.libs << "test"
@@ -12,7 +13,7 @@ namespace :gem do
12
13
  task :build do
13
14
  Dir["spior*.gem"].each {|f| File.unlink(f) }
14
15
  system("gem build spior.gemspec")
15
- system("gem install spior-0.1.4.gem -P MediumSecurity")
16
+ system("gem install spior-#{Spior::VERSION}.gem -P MediumSecurity")
16
17
  end
17
18
  end
18
19
 
data/bin/spior CHANGED
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'spior/runner'
3
+ require 'spior'
4
4
 
5
- runner = Spior::Runner.new(ARGV)
6
- runner.run
5
+ Spior::Main.new(ARGV)
@@ -0,0 +1,42 @@
1
+ require_relative 'spior/clear'
2
+ require_relative 'spior/copy'
3
+ require_relative 'spior/install'
4
+ require_relative 'spior/iptables'
5
+ require_relative 'spior/msg'
6
+ require_relative 'spior/options'
7
+ require_relative 'spior/status'
8
+ require_relative 'spior/tor'
9
+ require_relative 'spior/persist'
10
+ require_relative 'spior/network'
11
+ require_relative 'spior/menu'
12
+ require_relative 'spior/helpers'
13
+
14
+ module Spior
15
+ class Main
16
+ def initialize(argv)
17
+ @argv = argv
18
+ run
19
+ end
20
+
21
+ private
22
+
23
+ def run
24
+ options = Options.new(@argv)
25
+
26
+ if options.install
27
+ Msg.head
28
+ Install::check_deps
29
+ Copy.new.save
30
+ end
31
+
32
+ if options.tor
33
+ Msg.head
34
+ Iptables::Tor.new.run!
35
+ end
36
+
37
+ if options.persist
38
+ Persist.enable
39
+ end
40
+ end
41
+ end
42
+ end
@@ -1,8 +1,5 @@
1
1
  require 'tty-which'
2
2
  require 'nomansland'
3
- require_relative 'copy'
4
- require_relative 'msg'
5
- require_relative 'helpers'
6
3
 
7
4
  module Spior
8
5
  module Clear
@@ -10,32 +7,30 @@ module Spior
10
7
 
11
8
  def all
12
9
  iptables
13
- rez_configs
10
+ Spior::Copy.new.restore
14
11
  end
15
12
 
16
13
  private
17
14
 
18
15
  def iptables
19
16
  puts "Clearing rules.."
20
- Spior::Iptables::flush_rules
21
- if File.exist?("/var/lib/iptables/rules-save")
22
- ipt_restore "/var/lib/iptables/rules-save"
23
- elsif File.exist?("/etc/iptables/rules.save")
24
- ipt_restore "/etc/iptables/iptables.rules"
25
- elsif File.exist?("/etc/iptables.rules")
26
- ipt_restore "/etc/iptables.rules"
27
- else
28
- Msg.p "I couldn't find any old rules for iptables to restore, skipping..."
29
- end
17
+ ipt = Spior::Iptables::Default.new
18
+ ipt.stop!
19
+ #if File.exist?("/var/lib/iptables/rules-save")
20
+ # ipt_restore "/var/lib/iptables/rules-save"
21
+ #elsif File.exist?("/etc/iptables/rules.save")
22
+ # ipt_restore "/etc/iptables/iptables.rules"
23
+ #elsif File.exist?("/etc/iptables.rules")
24
+ # ipt_restore "/etc/iptables.rules"
25
+ #else
26
+ #Msg.p "Couldn't find any previous rules for iptables, create basic rules..."
27
+ ipt.run!
28
+ #end
30
29
  end
31
30
 
32
31
  def ipt_restore(path)
33
32
  puts "Restoring rules #{path}..."
34
33
  Helpers::Exec.new("iptables-restore").run("#{path}")
35
34
  end
36
-
37
- def rez_configs
38
- Spior::Copy::restore_files
39
- end
40
35
  end
41
36
  end
@@ -1,120 +1,85 @@
1
- require 'nomansland'
2
- require 'date'
3
1
  require 'digest'
4
- require_relative 'msg'
5
- require_relative 'helpers'
6
2
 
7
3
  module Spior
8
4
  class Copy
9
- class << self
10
-
11
- def config_files
12
- @cp = Helpers::Exec.new("cp -a")
13
- search_conf_dir
14
- copy_file(@conf_dir + "/ipt_mod.conf", "/etc/modules-load.d/ipt_mod.conf")
15
- end
16
-
17
- def backup(file, re = nil)
18
- return if regex_match?(file, re)
19
- @cp = Helpers::Exec.new("cp -a")
20
- backup = file + "_backup"
21
- if File.exist? backup
22
- puts "File #{backup} exist with content:"
23
- system("head -n 10 #{backup}")
24
- print "...\nOverwrite this copy? (N/y) "
25
- case gets.chomp
26
- when /^y|^Y/
27
- @cp.run("#{file} #{backup}")
28
- Msg.p "Overwrite #{file}"
29
- end
30
- else
31
- @cp.run("#{file} #{backup}")
32
- Msg.p "#{file} saved"
33
- end
34
- end
5
+ def initialize
6
+ @cp = Helpers::Exec.new("cp -a")
7
+ @files = []
8
+ search_conf_dir
9
+ config_files
10
+ list
11
+ end
35
12
 
36
- def search_conf_dir
37
- # ebuild on gentoo copy the ext dir at lib/ext
38
- @conf_dir = File.expand_path('../..' + '/lib/ext', __dir__)
39
- if not Dir.exist?(@conf_dir)
40
- @conf_dir = File.expand_path('../..' + '/ext', __dir__)
13
+ def save
14
+ @files.each { |f|
15
+ backup = "#{f}_backup"
16
+ if ! File.exist? backup
17
+ Msg.p "#{f} saved"
18
+ @cp.run("#{f} #{backup}")
41
19
  end
42
- end
20
+ }
21
+ end
43
22
 
44
- def restore(file)
45
- @cp = Helpers::Exec.new("cp -a")
46
- backup = file + "_backup"
23
+ def restore
24
+ @files.each { |f|
25
+ backup = "#{f}_backup"
47
26
  if File.exist? backup
48
- @cp.run("#{backup} #{file}")
27
+ Msg.p "#{f} restored"
28
+ @cp.run("#{backup} #{f}")
49
29
  end
50
- end
30
+ }
31
+ end
51
32
 
52
- def restore_files
53
- restore("/etc/tor/torrc")
54
- restore("/etc/resolv.conf")
55
- end
33
+ private
56
34
 
57
- private
35
+ def config_files
36
+ copy_file("#{@conf_dir}/ipt_mod.conf", "/etc/modules-load.d/ipt_mod.conf")
37
+ end
58
38
 
59
- def copy_file(conf, target)
60
- @config_file = conf
61
- return if check_hash(@config_file, target)
62
- if File.exist? target then
63
- if ! previous_copy target
64
- backup_file(target)
65
- end
66
- add_file target
67
- else
68
- add_file target
69
- end
70
- end
39
+ def list
40
+ add "/etc/resolv.conf"
41
+ add "/etc/tor/torrc"
42
+ add "/etc/systemd/resolved.conf"
43
+ add "/var/lib/iptables/rules-save" # gentoo
44
+ add "/etc/iptables/iptables.rules" # arch
45
+ add "/etc/iptables/rules.v4" # debian
46
+ end
71
47
 
72
- def previous_copy(target)
73
- backup=`ls #{target}.backup-* | head -n 1`.chomp
74
- return false if !File.exist?(backup)
75
- check_hash(backup, target)
76
- end
48
+ def add(file)
49
+ @files << file if File.exist? file
50
+ end
77
51
 
78
- def check_hash(src, target)
79
- return if not File.exist?(target)
80
- sha256conf = Digest::SHA256.file src
81
- sha256target = Digest::SHA256.file target
82
- sha256conf === sha256target
52
+ def search_conf_dir
53
+ # ebuild on gentoo copy the ext dir at lib/ext
54
+ @conf_dir = File.expand_path('../..' + '/lib/ext', __dir__)
55
+ if ! Dir.exist?(@conf_dir)
56
+ @conf_dir = File.expand_path('../..' + '/ext', __dir__)
83
57
  end
58
+ end
84
59
 
85
- def backup_file(target)
86
- d = DateTime.now
87
- backup = target + ".backup-" + d.strftime('%b-%d_%I-%M')
88
- @cp.run("#{target} #{backup}")
89
- puts "Renamed file #{backup}"
90
- end
60
+ def previous_copy(target)
61
+ backup=`ls #{target}.backup-* | head -1`.chomp
62
+ return false if ! File.exist? backup
63
+ check_hash(backup, target)
64
+ end
91
65
 
92
- def add_file(target)
93
- @cp.run("#{@config_file} #{target}")
94
- Msg.p "File #{@config_file} has been successfully copied at #{target}"
95
- end
66
+ def add_file(target)
67
+ @cp.run("#{@config_file} #{target}")
68
+ Msg.p "File #{@config_file} has been successfully copied at #{target}"
69
+ end
96
70
 
97
- def backup_exist(target)
98
- backup=`ls #{target}.backup-* | head -n 1`.chomp
99
- if File.exist? backup
100
- if ! check_hash(target, backup)
101
- @cp.run("#{backup} #{target}")
102
- Msg.p "Restored #{backup}"
103
- end
104
- else
105
- puts "No found previous backup for #{target}"
106
- end
107
- end
71
+ def copy_file(conf, target)
72
+ @config_file = conf
73
+ add_file target if ! File.exist? target
74
+ return if check_hash(@config_file, target)
75
+ add_file target
76
+ end
108
77
 
109
- def regex_match?(infile, re = nil)
110
- return unless re
111
- File.open(infile, 'r') do |file|
112
- file.each do |line|
113
- return true if line =~ re
114
- end
115
- end
116
- false
117
- end
78
+ def check_hash(src, target)
79
+ return if not File.exist?(target)
80
+ sha256conf = Digest::SHA256.file src
81
+ sha256target = Digest::SHA256.file target
82
+ sha256conf === sha256target
118
83
  end
119
84
  end
120
85
  end
@@ -1,5 +1,6 @@
1
1
  require 'fileutils'
2
2
  require 'tempfile'
3
+ require 'open3'
3
4
 
4
5
  module Helpers
5
6
  class Exec
@@ -9,12 +10,16 @@ module Helpers
9
10
  end
10
11
 
11
12
  def run(args)
12
- if @search_uid == '0' then
13
- #puts "found root - uid #{@search_uid}"
14
- system(@name + " " + args)
15
- else
16
- #puts "no root - call sudo - uid #{@search_uid}"
17
- system("sudo " + @name + " " + args)
13
+ cmd = @search_uid == '0' ? @name : "sudo #{@name}"
14
+ Open3.popen2e("#{cmd} #{args}") do |stdin, stdout_err, wait_thr|
15
+ while line = stdout_err.gets
16
+ puts line
17
+ end
18
+
19
+ exit_status = wait_thr.value
20
+ unless exit_status.success?
21
+ raise "Error, Running #{cmd} #{args}"
22
+ end
18
23
  end
19
24
  end
20
25
  end
@@ -47,6 +52,7 @@ module Helpers
47
52
  File.open(tmp.path, 'w') do |file|
48
53
  file.puts @string
49
54
  end
55
+ puts "move #{tmp.path} to #{@dest}"
50
56
  @mv.run("#{tmp.path} #{@dest}")
51
57
  end
52
58
 
@@ -79,7 +85,7 @@ module Helpers
79
85
  # === Parameters:
80
86
  # * _string_ = the string of for whole content file
81
87
  # * _name_ = the name of the service (e.g: tor.service)
82
- def initialise(string, name)
88
+ def initialize(string, name)
83
89
  super
84
90
  @systemd_dir = search_systemd_dir
85
91
  @dest = @systemd_dir + "/" + @name
@@ -1,12 +1,9 @@
1
1
  require 'nomansland'
2
2
  require 'tty-which'
3
- require_relative 'msg'
4
- require_relative 'helpers'
5
3
 
6
4
  module Spior
7
5
  class Install
8
6
  class << self
9
-
10
7
  def check_deps
11
8
  base_packages
12
9
  end
@@ -1,186 +1,8 @@
1
- require 'interfacez'
2
- require_relative 'tor'
3
- require_relative 'msg'
4
- require_relative 'helpers'
5
-
6
1
  module Spior
7
- class Iptables
8
-
9
- def self.tor(interface = false)
10
- initialize(interface)
11
- flush_rules
12
- bogus_tcp_flags
13
- bad_packets
14
- spoofing
15
- icmp
16
- dns
17
- nat
18
- input
19
- forward
20
- output
21
- drop_all
22
- end
23
-
24
- def self.flush_rules
25
- @i = Helpers::Exec.new("iptables")
26
- ipt "-F"
27
- ipt "-X"
28
- ipt "-t nat -F"
29
- ipt "-t nat -X"
30
- ipt "-t mangle -F"
31
- ipt "-t mangle -X"
32
- end
33
-
34
- private
35
-
36
- def self.initialize(interface)
37
- @lo = Interfacez.loopback
38
- @lo_addr = Interfacez.ipv4_address_of(@lo)
39
- @tor = Spior::Tor.new
40
- @non_tor = ["#{@lo_addr}/8", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
41
- @incoming = interface
42
- @incoming_addr = Interfacez.ipv4_address_of(@incoming)
43
- end
44
-
45
- def self.check_dep
46
- Spior::Copy::config_files
47
- end
48
-
49
- def self.ipt(line)
50
- @i.run("#{line}")
51
- #puts "added - #{@i} #{line}"
52
- end
53
-
54
- def self.drop_all
55
- ipt "-P INPUT DROP"
56
- ipt "-P FORWARD DROP"
57
- ipt "-P OUTPUT DROP"
58
- end
59
-
60
- def self.bogus_tcp_flags
61
- puts "bogus"
62
- ipt "-t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP"
63
- ipt "-t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP"
64
- ipt "-t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP"
65
- ipt "-t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP"
66
- ipt "-t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP"
67
- ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP"
68
- ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP"
69
- ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP"
70
- ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP"
71
- ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP"
72
- ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP"
73
- ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP"
74
- ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP"
75
- end
76
-
77
- def self.bad_packets
78
- puts "bad_packets"
79
- # new packet not syn
80
- ipt "-t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP"
81
- # fragment packet
82
- ipt "-A INPUT -f -j DROP"
83
- # XMAS
84
- ipt "-A INPUT -p tcp --tcp-flags ALL ALL -j DROP"
85
- # null packet
86
- ipt "-A INPUT -p tcp --tcp-flags ALL NONE -j DROP"
87
- end
88
-
89
- def self.spoofing
90
- subs=["224.0.0.0/3", "169.254.0.0/16", "172.16.0.0/12", "192.0.2.0/24", "0.0.0.0/8", "240.0.0.0/5"]
91
- subs.each do |sub|
92
- ipt "-t mangle -A PREROUTING -s #{sub} -j DROP"
93
- end
94
- ipt "-t mangle -A PREROUTING -s #{@lo_addr}/8 ! -i #{@lo} -j DROP"
95
- end
96
-
97
- def self.icmp
98
- puts "icmp"
99
- ipt "-N port-scanning"
100
- ipt "-A port-scanning -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURN"
101
- ipt "-A port-scanning -j DROP"
102
-
103
- ipt "-N syn_flood"
104
- ipt "-A INPUT -p tcp --syn -j syn_flood"
105
- ipt "-A syn_flood -m limit --limit 1/s --limit-burst 3 -j RETURN"
106
- ipt "-A syn_flood -j DROP"
107
-
108
- ipt "-A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j ACCEPT"
109
- ipt "-A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j LOG --log-prefix PING-DROP:"
110
- ipt "-A INPUT -p icmp -j DROP"
111
- ipt "-A OUTPUT -p icmp -j ACCEPT"
112
- end
113
-
114
- def self.dns
115
- puts "dns"
116
- ipt "-t nat -A PREROUTING ! -i #{@lo} -p udp -m udp --dport 53 -j REDIRECT --to-ports #{@tor.dns}"
117
- ipt "-t nat -A OUTPUT -p udp -m udp --dport 53 -j REDIRECT --to-ports #{@tor.dns}"
118
- ipt "-t nat -A OUTPUT -p tcp -m tcp --dport 53 -j REDIRECT --to-ports #{@tor.dns}"
119
- end
120
-
121
- def self.nat
122
- puts "nat"
123
- # nat .onion addresses
124
- ipt "-t nat -A OUTPUT -d #{@tor.virt_addr} -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports #{@tor.trans_port}"
125
-
126
- # Don't nat the Tor process, the loopback, or the local network
127
- ipt "-t nat -A OUTPUT -m owner --uid-owner #{@tor.uid} -j RETURN"
128
- ipt "-t nat -A OUTPUT -o #{@lo} -j RETURN"
129
-
130
- # Allow lan access for hosts in $non_tor
131
- @non_tor.each do |lan|
132
- ipt "-t nat -A OUTPUT -d #{lan} -j RETURN"
133
- end
134
-
135
- # Redirects all other pre-routing and output to Tor's TransPort
136
- ipt "-t nat -A OUTPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports #{@tor.trans_port}"
137
-
138
- # Redirects all other pre-routing and output to Tor's TransPort
139
- ipt "-t nat -A OUTPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports #{@tor.trans_port}"
140
- end
141
-
142
- def self.input
143
- puts "input"
144
- ipt "-A INPUT -i #{@incoming} -p tcp -s #{@incoming_addr} --dport 22 -m conntrack --ctstate NEW -j ACCEPT"
145
-
146
- # Allow loopback, rules
147
- ipt "-A INPUT -m state --state ESTABLISHED -j ACCEPT"
148
- ipt "-A INPUT -i #{@lo} -j ACCEPT"
149
-
150
- # Allow DNS lookups from connected clients and internet access through tor.
151
- ipt "-A INPUT -d #{@incoming_addr} -i #{@incoming} -p udp -m udp --dport #{@tor.dns} -j ACCEPT"
152
- ipt "-A INPUT -d #{@incoming_addr} -i #{@incoming} -p tcp -m tcp --dport #{@tor.trans_port} --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT"
153
-
154
- # Default
155
- ipt "-A INPUT -j DROP"
156
- end
157
-
158
- def self.output
159
- puts "output"
160
- ipt "-A OUTPUT -m conntrack --ctstate INVALID -j LOG --log-prefix \"DROP INVALID \" --log-ip-options --log-tcp-options"
161
- ipt "-A OUTPUT -m conntrack --ctstate INVALID -j DROP"
162
- ipt "-A OUTPUT -m state --state ESTABLISHED -j ACCEPT"
163
-
164
- # output
165
- ipt "-A OUTPUT -m owner --uid-owner #{@tor.uid} -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j ACCEPT"
166
-
167
- # Accept, allow loopback output
168
- ipt "-A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT"
169
- ipt "-A OUTPUT -d #{@lo_addr}/32 -o #{@lo} -j ACCEPT"
170
-
171
- # tor transparent magic
172
- ipt "-A OUTPUT -d #{@lo_addr}/32 -p tcp -m tcp --dport #{@tor.trans_port} --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT"
173
-
174
- ipt "-A OUTPUT -j DROP"
175
- end
176
-
177
- def self.forward
178
- puts "forward"
179
- ipt "-A FORWARD -m conntrack --ctstate INVALID -j LOG --log-prefix \"DROP INVALID \" --log-ip-options --log-tcp-options"
180
- ipt "-A FORWARD -m conntrack --ctstate INVALID -j DROP"
181
- ipt "-A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT"
182
- ipt "-A FORWARD -i #{@incoming} ! -s #{@incoming_addr} -j LOG --log-prefix \"SPOOFED PKT \""
183
- ipt "-A FORWARD -i #{@incoming} ! -s #{@incoming_addr} -j DROP"
184
- end
2
+ module Iptables
185
3
  end
186
4
  end
5
+
6
+ require_relative 'iptables/root'
7
+ require_relative 'iptables/tor'
8
+ require_relative 'iptables/default'