Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

18.12.2. 过滤链

过滤规则以过滤链的形式组织。这些链可以看作树结构,并将数据包过滤规则作为单个链中的条目(branches)。
数据包在根链中启动其过滤器评估,然后在其他链中继续评估,从这些链返回,或被其中一个遍历链的过滤规则中丢弃或接受。
libvirt 的网络过滤系统会自动为每个虚拟机的网络接口创建单独的 root 链,供用户选择来激活流量过滤。用户可以编写在根链中直接实例化的过滤规则,也可以创建特定于协议的过滤链,以有效地评估特定于协议的规则。
存在以下链:
  • root
  • mac
  • STP(跨度树协议)
  • vlan
  • ARP 和 rarp
  • ipv4
  • ipv6
可以使用协议名称创建评估 mac、stp、vlan、rp、ipv4 或 ipv6 协议的多个链。

例 18.3. ARP 流量过滤

此示例允许指定名称 arp-xyz 或 arp-test 链,并在这些链中评估其 ARP 协议数据包。
以下过滤器 XML 显示了在 arp 链中过滤 ARP 流量的示例。
<filter name='no-arp-spoofing' chain='arp' priority='-500'>
  <uuid>f88f1932-debf-4aa1-9fbe-f10d3aa4bc95</uuid>
  <rule action='drop' direction='out' priority='300'>
    <mac match='no' srcmacaddr='$MAC'/>
  </rule>
  <rule action='drop' direction='out' priority='350'>
    <arp match='no' arpsrcmacaddr='$MAC'/>
  </rule>
  <rule action='drop' direction='out' priority='400'>
    <arp match='no' arpsrcipaddr='$IP'/>
  </rule>
  <rule action='drop' direction='in' priority='450'>
    <arp opcode='Reply'/>
    <arp match='no' arpdstmacaddr='$MAC'/>
  </rule>
  <rule action='drop' direction='in' priority='500'>
    <arp match='no' arpdstipaddr='$IP'/>
  </rule>
  <rule action='accept' direction='inout' priority='600'>
    <arp opcode='Request'/>
  </rule>
  <rule action='accept' direction='inout' priority='650'>
    <arp opcode='Reply'/>
  </rule>
  <rule action='drop' direction='inout' priority='1000'/>
</filter>
在rp 链中放置特定于 ARP 的规则(而非在根链中),即 ARP 以外的数据包协议不需要由 ARP 协议特定的规则进行评估。这提高了流量过滤的效率。但是,必须注意,只有给定协议的过滤规则放入链中,因为不会评估其他规则。例如,IPv4 规则不会在 ARP 链中评估,因为 IPv4 协议数据包不会遍历 ARP 链。