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