2

Python で iptables スクリプトを書きたかったのです。iptables 自体を呼び出すのではなく、python-iptables パッケージを使用したかったのです。しかし、基本的なルールを設定するのに苦労しています。フィルター チェーンを使用して、ポート 1234 で着信 TCP トラフィックを受け入れたいと考えました。そのため、次のように記述しました。

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の経験がある人はいますか?

4

1 に答える 1

2

ああ、これに気づいた。githubの最新のヘッドを試してみませんか?たくさんのバグを修正し、最新のiptablesバージョンで動作するようにpython-iptablesを更新しました。それでも問題が発生する場合は、githubでチケットを開いてください。

確かに正しくないことの1つは、ルールにプロトコルを設定していないことです。

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)
于 2013-02-07T10:07:13.847 に答える