Cisco IOS 中的 IPv6 通配符匹配是否可能?

网络工程 安全 ipv6 思科-ios ACL
2021-07-06 20:42:36

Facebook 的 IPv6 地址方案非常聪明,但它让我想到了 ACL,是否有可能编写一个匹配的 Cisco IOS IPv6 ACL?在 IPv4 中,您可以匹配一个中间八位字节,例如 10.xxx.10.xxx,以便用“don't care”命中任何“x”。我认为这在 IPv6 中是不可能的,至少在 IOS 15.1 中不可能。

在我的例子中,由于 Facebook 很聪明,如果可以的话,它可以很容易地匹配 FACE:B00C。这在某种程度上简化了,因为无需查找分配的块,我就可以在该范围内进行匹配。

2A03:2880:F000:[0000-FFFF]:FACE:B00C::/96

明显且正常的方法是在 2A03:2880:F000::/48 上进行匹配,但不幸的是,我一看就不确定 FB 是否具有更大的范围(可能确实如此)。所以在这种特殊情况下,如果我可以只匹配 FACE:B00C 部分,我可以匹配他们正在使用的所有内容,假设他们不转移到 FACE:B00D

由于我无法在 IOS 中为 IPv6 ACL 输入通配符掩码,因此我认为您无法做到这一点,但我很好奇是否有人有有趣的解决方法。我认为知道这一点会很有用,因为在某些时候我可能只因为 DDoS 或攻击性流量而需要过滤一个子块,而不想阻止某些大型提供商的整个 /32。

此外,这可以允许基于策略的流量重定向或优先级排序。如果我意识到广告在不同的块中,我可以对它们进行不同的 QoS,例如,这是一个很好的功能,用于低带宽、拥塞的卫星链接。

编辑:澄清一点。在某些情况下,我需要阻止或允许像 /32 这样的大块内的某些范围。这些可能稍微连续,而不是数百个条目,通配符可能匹配其中的大部分。这也可以用于交通工程,因为我可以路由所有 10.x.10.0 块,如果 x 是奇数,它会走一条路线,甚至到另一条路线。

另一个示例是 DDoS,其中 IPv6 源 IP 被使用拼写黑客组名的模式欺骗。这至少会发生一次,能够过滤它会很好。

紧凑型 ACL 更简洁,但并不总是更易于管理。这些事情可能是好的或坏的想法/实践,不是在这里争论,只是试图了解我拥有哪些工具与我可能需要创建哪些工具。

2个回答

不幸的是,思科在 IPv6 中取消了通配符掩码。这主要是一件好事,除了在这种特殊情况下。然而,要使您的想法奏效,您必须依靠 Facebook 既“聪明”又始终如一,这可能超出人们的期望。

但是,如果您想以不同于其他流量的方式处理 Facebook 的流量,您可以简单地过滤他们分配的地址块。您在问题中提到的那个实际上分配给了 Facebook Ireland:2a03:2880::/32。

但在注册表中查找其他人也同样容易。

我正在玩FPM,我认为它可以满足您的需求:

load protocol system:fpm/phdf/ether.phdf
load protocol flash:/fpm/phdf/ipv6.phdf
!
class-map type stack match-all cm-ipv6
 match field ETHER type eq 0x86DD next IPV6
class-map type access-control match-all cm-ipv6-facebook
 match start IPV6 dest-addr offset 9 size 4 eq 0xFACEB00C
!
policy-map type access-control pm-ipv6-facebook
 class cm-ipv6-facebook
   drop
policy-map type access-control pm-filter
 class cm-ipv6
   log
  service-policy pm-ipv6-facebook
!
interface FastEthernet0/1
 service-policy type access-control input pm-filter

我不得不为此推出自己的 ipv6.phdf 文件:

<?xml version="1.0" encoding="UTF-8"?>
<phdf>
 <version>1</version>
 <protocol name="ipv6" description="Definition-for-the-IPv6-protocol">
 <field name="version" description="IP version">
  <offset type="fixed-offset" units="bits">0</offset>
  <length type="fixed" units="bits">4</length>
 </field>
 <field name="tc" description="IPv6-Traffic-Class">
  <offset type="fixed-offset" units="bits">4</offset>
  <length type="fixed" units="bits">8</length>
 </field>
  <field name="fl" description="IPv6-Flow-Label">
  <offset type="fixed-offset" units="bits">12</offset>
  <length type="fixed" units="bits">20</length>
 </field>
 <field name="length" description="IPv6-Payload-Length">
  <offset type="fixed-offset" units="bits">32</offset>
  <length type="fixed" units="bits">16</length>
 </field>
 <field name="nh" description="IPv6-Next-Header">
  <offset type="fixed-offset" units="bits">48</offset>
  <length type="fixed" units="bits">8</length>
 </field>
 <field name="hl" description="IPv6-Hop-Limit">
  <offset type="fixed-offset" units="bits">56</offset>
  <length type="fixed" units="bits">8</length>
 </field>
 <field name="source-addr" description="IPv6-Source-Address">
  <offset type="fixed-offset" units="bits">64</offset>
  <length type="fixed" units="bits">128</length>
 </field>
 <field name="dest-addr" description="IPv6-Destination-Address">
  <offset type="fixed-offset" units="bits">192</offset>
  <length type="fixed" units="bits">128</length>
 </field>
 <field name="payload-start" description="IPv6-Payload-Start">
  <offset type="fixed-offset" units="bits">320</offset>
  <length type="fixed" units="bits">0</length>
 </field>
 <headerlength type="fixed" value="320"></headerlength>
 <constraint field="version" value="6" operator="eq"></constraint>
</protocol>
</phdf>

不幸的是,当我执行“显示策略映射类型访问控制接口 fa0/1”时,在以太网类型上没有匹配项:

FastEthernet0/1 

  Service-policy access-control input: pm-filter

    Class-map: cm-ipv6 (match-all)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: field ETHER type eq 0x86DD next IPV6
      log

      Service-policy access-control : pm-ipv6-facebook

        Class-map: cm-ipv6-facebook (match-all)
          0 packets, 0 bytes
          5 minute offered rate 0 bps
          Match: start IPV6 dest-addr offset 9 size 4 eq 0xFACEB00C
      drop

        Class-map: class-default (match-any)
          0 packets, 0 bytes
          5 minute offered rate 0 bps, drop rate 0 bps
          Match: any 

    Class-map: class-default (match-any)
      10000 packets, 1863618 bytes
      5 minute offered rate 14000 bps, drop rate 0 bps
      Match: any 

我怀疑我对 Facebook 的 IPv6 地址的 ping 没有通过 CEF 正确运行(FPM 常见问题解答说这是必需的)或者我遗漏了一些东西。尽管如此,我还是为任何想要咀嚼它的人推出了这个。