【发布时间】:2018-01-16 04:04:12
【问题描述】:
根据documentation:rules,执行以下操作应该会在 iptables 规则列表中添加一个简单的规则:
rule = iptc.Rule()
rule.src = "127.0.0.1"
rule.protocol = "udp"
rule.target = rule.create_target("ACCEPT")
match = rule.create_match("comment")
match.comment = "this is a test comment"
chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), "INPUT")
chain.insert_rule(rule)
但是,运行此示例会产生绝对为零的新规则。
我正在通过以下方式验证这一点:
iptables -L --line-number
在我提交错误问题之前,我想知道是否有其他人遇到过这个问题,如果遇到过,您是如何解决的。
为了安全起见,我以 root 身份运行所有内容,我还尝试通过运行文档同一部分的另一个示例代码来验证规则:
table = iptc.Table(iptc.Table.FILTER)
for chain in table.chains:
print ("=======================")
print ("Chain ", chain.name)
for rule in chain.rules:
print ("Rule", "proto:", rule.protocol, "src:", rule.src, "dst:", \
rule.dst, "in:", rule.in_interface, "out:", rule.out_interface,)
print ("Matches:")
for match in rule.matches:
print (match.name)
print ("Target:"),
print (rule.target.name)
print ("=======================")
(稍作修改以使用 Python3)。
这是为了确保自动提交没有问题,但结果仍然相同。
我还要指出它确实工作了一小段时间,大约为 iptables 添加了 3 个功能。做一个systemctl restart iptables 可能会起作用,但如果可能的话,我想 - 在我做经典的旧“Windows 技巧”重新启动东西之前弄清楚为什么会出错。 (在 journald/systemd 中没有提到任何关于 iptables 的内容)
【问题讨论】:
-
我无法重现您的问题。调用
chain.insert_rule(rule)后,我立即在filter表的INPUT链中看到了新规则。 -
感谢@larsks 提供这些信息。我怀疑这对我来说真的是本地的。
标签: python linux python-3.x iptables python-iptables