Class: IP::Chain
- Inherits:
-
Object
- Object
- IP::Chain
- Defined in:
- lib/iptable/ip.rb
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#reference ⇒ Object
Returns the value of attribute reference.
-
#rules ⇒ Object
readonly
Returns the value of attribute rules.
Instance Method Summary collapse
- #add_rule(options) ⇒ Object
- #append_jump_to(chain) ⇒ Object
- #delete ⇒ Object
- #init_rule(options) ⇒ Object
-
#initialize(options) ⇒ Chain
constructor
A new instance of Chain.
- #match_rule(string) ⇒ Object
- #reload ⇒ Object
- #save ⇒ Object
Constructor Details
#initialize(options) ⇒ Chain
Returns a new instance of Chain.
47 48 49 50 51 |
# File 'lib/iptable/ip.rb', line 47 def initialize() @name = [:name] @rules = [] @reference = nil end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
44 45 46 |
# File 'lib/iptable/ip.rb', line 44 def name @name end |
#reference ⇒ Object
Returns the value of attribute reference.
45 46 47 |
# File 'lib/iptable/ip.rb', line 45 def reference @reference end |
#rules ⇒ Object (readonly)
Returns the value of attribute rules.
44 45 46 |
# File 'lib/iptable/ip.rb', line 44 def rules @rules end |
Instance Method Details
#add_rule(options) ⇒ Object
74 75 76 77 78 |
# File 'lib/iptable/ip.rb', line 74 def add_rule() new_rule = Rule.new(.merge(:chain => self)) new_rule.save @rules << new_rule end |
#append_jump_to(chain) ⇒ Object
63 64 65 66 67 68 |
# File 'lib/iptable/ip.rb', line 63 def append_jump_to chain chain.reference = self IO.popen("/sbin/iptables -I #{@name} -j #{chain.name}") do |output| puts output.read end end |
#delete ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/iptable/ip.rb', line 86 def delete @rules.each do |rule| IO.popen("/sbin/iptables -D #{@name} 1") do |output| puts output.read end end if @reference IO.popen("/sbin/iptables -D #{@reference.name} -j #{@name}") do |output| puts output.read end end IO.popen("/sbin/iptables -X #{@name}") do |output| puts output.read end end |
#init_rule(options) ⇒ Object
70 71 72 |
# File 'lib/iptable/ip.rb', line 70 def init_rule() @rules << Rule.new(.merge(:chain => self)) end |
#match_rule(string) ⇒ Object
80 81 82 83 84 |
# File 'lib/iptable/ip.rb', line 80 def match_rule(string) if match = string.match(RULE_RE) init_rule :packets => match[1], :protocol => match[2] end end |
#reload ⇒ Object
102 103 104 105 106 107 108 109 |
# File 'lib/iptable/ip.rb', line 102 def reload @rules = [] IO.popen("/sbin/iptables -L #{@name} -n -v -x") do |output| output.readlines.each do |line| match_rule(line) end end end |
#save ⇒ Object
53 54 55 56 57 58 59 60 61 |
# File 'lib/iptable/ip.rb', line 53 def save IO.popen("/sbin/iptables -N #{@name}") do |output| if output.read =~ /Chain already exists/ return false else return true end end end |