如何使用python-iptables指定多参数匹配?
例如,以下iptables
命令:
-A INPUT -s 1.1.1.1 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
如果我创建以下内容:
import iptc
rule = iptc.Rule()
rule.src = '1.1.1.1'
rule.protocol = 'tcp'
t = rule.create_target('DROP')
m = rule.create_match('tcp')
m.tcp_flags = 'FIN,SYN,RST,ACK SYN'
它会抱怨:
ValueError: invalid value FIN,SYN,RST,ACK SYN
PS:我知道,对于我的特定示例,我可以简单地使用m.syn = '1'
,但我试图概括如何来指定多参数匹配。
答案 0 :(得分:1)
您使用的是最新版本吗?请参阅此issue。
答案 1 :(得分:0)
好的......有人试图发布答案,但是当我评论时,他/她删除了答案。
答案是:
m.tcp_flags = ['FIN', 'SYN', 'RST', 'ACK SYN']
给出了错误的结果:
print m.parameters
{u'tcp_flags': u'FIN SYN'}
然而,这激发了我尝试以下方法:
m.tcp_flags = ['FIN,SYN,RST,ACK', 'SYN']
给出:
>>> match.parameters
{u'tcp_flags': u'FIN,SYN,RST,ACK SYN'}
将该规则提交到INPUT
链并运行iptables-save
表明它正确返回了我想要的规则。
所以,谢谢!