Python-iptables,带有接口的规则与ipv6数据包不匹配

时间:2018-07-09 15:01:09

标签: python linux redhat python-iptables

我们在kubernetes精心安排的dockerized环境中的生产环境中使用python-iptables v0.12.0。 使用python-iptables库的容器应用程序由以下网络组成:

存在两个内部接口eth0和eth1(用于容器内的通信),分别具有一个ipv4和一个ipv6地址。 一个外部接口ext0,其中两个ipv6地址仅用于外部通信。

在启动时,我们的应用程序具有以下ip6tables配置,这些配置完全由python-iptables库创建。请注意,LOGGING目标仅用于记录和丢弃数据包:

!enter image description here

所有来自ext0接口的来自外部世界的ipv6流量都应该被丢弃**。

但是,不仅实际上没有数据包被丢弃,而且所有数据包都与对应于我们内部接口之一的第二个规则匹配!

然后,我们接受ext0接口的所有流量:

enter image description here

仍然所有流量都通过eth0接口而不是ext0!

如果我们删除第二条规则,希望流量能够匹配我们的外部接口,

enter image description here

仍然存在相同的问题,但是现在所有流量都与eth1接口匹配!

现在,我们添加了完全相同的规则,以便使用eth1接口接受流量,但是现在,我们使用Linux iptables软件包代替了python-iptables:

enter image description here

您可以看到Linux iptables软件包可以按预期工作(不匹配发往ext0 iface的数据包),而python-iptables生成的规则错误地接受了所有流量!

似乎python-iptables和Linux iptables软件包之间的ipv6规则生成方式可能存在一些差异。

如何解决/解决此问题?

我们的配置设置:

- cat /etc/os-release
NAME="Red Hat Enterprise Linux Server"
VERSION="7.5 (Maipo)"


- uname -r
4.4.134-1.el7.elrepo.x86_64



[root@testEnv tmp]# python
Python 2.7.5 (default, Feb 20 2018, 09:19:12)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

    import iptc
    chain = iptc.Chain(iptc.Table6(iptc.Table6.FILTER), "INPUT")
    rule = iptc.Rule6()
    rule.in_interface = "eth0"
    target = iptc.Target(rule, "ACCEPT")
    rule.target=target
    chain.insert_rule(rule)

0 个答案:

没有答案