python-iptables: загадочная ошибка при разрешении входящего TCP-трафика через порт 1234

Я хотел написать скрипт iptables на Python. Вместо того, чтобы вызывать iptables, я хотел использовать пакет python-iptables. Однако мне трудно настроить некоторые основные правила. Я хотел использовать цепочку фильтров для приема входящего TCP-трафика через порт 1234. Поэтому я написал следующее:

import iptc
chain = iptc.Chain(iptc.TABLE_FILTER,"INPUT")
rule = iptc.Rule()
target =  iptc.Target(rule,"ACCEPT")
match = iptc.Match(rule,'tcp')
match.dport='1234'
rule.add_match(match)
rule.target = target
chain.insert_rule(rule)

Однако, когда я запускаю это, я получаю ответ на это:

Traceback (most recent call last):
  File "testing.py", line 9, in <module>
    chain.insert_rule(rule)
  File "/usr/local/lib/python2.6/dist-packages/iptc/__init__.py", line 1133, in insert_rule
    self.table.insert_entry(self.name, rbuf, position)
  File "/usr/local/lib/python2.6/dist-packages/iptc/__init__.py", line 1166, in new
    obj.refresh()
  File "/usr/local/lib/python2.6/dist-packages/iptc/__init__.py", line 1230, in refresh
    self._free()
  File "/usr/local/lib/python2.6/dist-packages/iptc/__init__.py", line 1224, in _free
    self.commit()
  File "/usr/local/lib/python2.6/dist-packages/iptc/__init__.py", line 1219, in commit
    raise IPTCError("can't commit: %s" % (self.strerror()))
iptc.IPTCError: can't commit: Invalid argument
Exception AttributeError: "'NoneType' object has no attribute 'get_errno'" in <bound method Table.__del__ of <iptc.Table object at 0x7fcad56cc550>> ignored

Есть ли у кого-нибудь опыт работы с python-iptables, который мог бы просветить, что я сделал неправильно?


person Lucas Kauffman    schedule 09.12.2012    source источник
comment
Вы запускаете скрипт как root?   -  person Alastair McCormack    schedule 09.12.2012
comment
да, мне удалось войти в другие правила, но это не работает :(   -  person Lucas Kauffman    schedule 09.12.2012


Ответы (1)


О, только что заметил это. Можете ли вы дать последнюю главу из github? Я исправил множество ошибок и обновил python-iptables для работы с последней версией iptables. Если у вас по-прежнему возникают проблемы, откройте тикет на github.

Одна вещь, которая, безусловно, не совсем верна, это то, что вы не устанавливаете протокол в правиле:

import iptc
chain = iptc.Chain(iptc.TABLE_FILTER,"INPUT")
rule = iptc.Rule()

Установить протокол, например. здесь:

rule.protocol = 'tcp'

и тогда у вас должно быть все в порядке:

target =  iptc.Target(rule,"ACCEPT")
match = iptc.Match(rule,'tcp')
match.dport='1234'
rule.add_match(match)
rule.target = target
chain.insert_rule(rule)
person ldx    schedule 07.02.2013
comment
Я использую python-iptables и мне это нравится. Просто хотел сказать спасибо за создание/работу над ним. - person h33th3n; 28.12.2013
comment
Спасибо, чувак, я ценю это. Только что выпущена версия 0.3.0 с несколькими исправлениями, доступными на github или PyPI. :) - person ldx; 07.01.2014