How to write specific iptables rules using python-iptables
iptables, python
Solution
i've not tried to use python-iptables, but it looks like you need something like:
rule = iptc.Rule()
match = rule.create_match('state')
match.state = 'RELATED,ESTABLISHED'
match.target = iptc.Target('ACCEPT')
chain = iptc.Chain(iptc.Table.(iptc.Table.FILTER), "INPUT")
chain.insert_rule(rule)
and so on.
Problem
I am trying to use python-iptables to write a script to set certain rules. I figured out how to set rules to allow all and deny all, but I need to figure out how to write a rule to allow established connections. For example I need to write the following rules using python-iptables: ``` iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT ``` If anyone has firsthand knowledge or knows a good resource for writing the above or similar rules I would greatly appreciate it. Thanks in advance! Here's the finished product. I plan on adding more rule options to allow users to allow http/s etc. connections if they desire.Thanks for all the help. ``` import iptc def dropAll(): chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), "INPUT") rule = iptc.Rule() rule.in_interface = "eth+" target = iptc.Target(rule, "DROP") rule.target = target chain.insert_rule(rule) def allowLoopback(): chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), "INPUT") rule = iptc.Rule() rule.in_interface = "lo" target = iptc.Target(rule, "ACCEPT") rule.target = target chain.insert_rule(rule) def allowEstablished(): chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), 'INPUT') rule = iptc.Rule() match = rule.create_match('state') match.state = "RELATED,ESTABLISHED" rule.target = iptc.Target(rule, 'ACCEPT') chain.insert_rule(rule) dropAll() allowLoopback() allowEstablished() ```