среда, 12 октября 2016 г.

Linux. Правила iptables из python

Приветствую, уважаемый читатель!

Столкнулся с необходимостью писать новые правила для iptables из python. Решил поделиться найденными вариантами, как это можно сделать.



Первый вариант длиннее и для его реализации необходимо воспользоваться дополнительной библиотекой для python, а именно python-iptables. Буду писать в комментариях аналог правила на bash.

import iptc

# iptables -I BAS 1 -s 111.111.111.111 -p tcp --dport 22 -j DROP

rule = iptc.Rule()
rule.protocol = "tcp"
rule.target = iptc.Target(rule, "DROP")
rule.src = "111.111.111.111"
match = iptc.Match(rule, "tcp")
match.dport = "22"
rule.add_match(match)
chain_bas = iptc.Chain(iptc.Table(iptc.Table.FILTER), "BAS")
chain_bas.insert_rule(rule)

# iptables -I BAS 1 -d 8.8.8.8 -p udp --dport 53 -m iprange --src-range 192.168.1.1-192.168.1.254 -j ACCEPT

rule = iptc.Rule()
rule.protocol = "udp"
rule.target = iptc.Target(rule,"ACCEPT")
rule.dst = "8.8.8.8"
match = iptc.Match(rule, "udp")
match.dport = "53"
rule.add_match(match)
match = iptc.Match(rule,"iprange")
match.src_range = "192.168.1.1-192.168.1.254"
rule.add_match(match)
chain_bas = iptc.Chain(iptc.Table(iptc.Table.FILTER), "BAS")
chain_bas.insert_rule(rule)

Второй вариант привычен с точки зрения синтаксиса написания правил, т.к. используется модуль os.


import os

ip = "111.111.111.111"
os.system('iptables -I BAS 1 -s %s -p tcp --dport 22 -j ACCEPT' % ip)

Комментариев нет:

Отправить комментарий