此产品的文档集力求使用非歧视性语言。在本文档集中,非歧视性语言是指不隐含针对年龄、残障、性别、种族身份、族群身份、性取向、社会经济地位和交叉性的歧视的语言。由于产品软件的用户界面中使用的硬编码语言、基于 RFP 文档使用的语言或引用的第三方产品使用的语言,文档中可能无法确保完全使用非歧视性语言。 深入了解思科如何使用包容性语言。
思科采用人工翻译与机器翻译相结合的方式将此文档翻译成不同语言,希望全球的用户都能通过各自的语言得到支持性的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 Cisco Systems, Inc. 对于翻译的准确性不承担任何责任,并建议您总是参考英文原始文档(已提供链接)。
本文档介绍保护IP组播网络基础设施的最佳实践的一般指南。
Cisco 建议您了解以下主题:
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
本文档介绍一些基本概念和术语,并讨论下列主题:
在IP组播中有两种典型的服务模型:
1. 任意源组播(ASM)
2. 源特定组播(SSM)
在ASM中,接收方通过互联网组成员协议(IGMP)或组播侦听程序发现(MLD)成员身份报告加入组G以指示该组。此报告请求由任何源发送到组G的流量,因此名称为“any source”。 相反,在SSM中,接收方加入由源S定义的特定信道,该信道将发送到组G。下面将详细介绍每种服务模式。
ASM模型的特征在于有两种协议:“密集模式泛洪和修剪”和“稀疏模式显式联接”:
i)密集模式泛洪和修剪协议(DVMRP/MOSPF/PIM-DM)
在密集模式协议中,网络中的所有路由器都知道所有树、其源和接收器。距离矢量组播路由协议(DVMRP)和协议无关组播(PIM)等协议密集模式在整个网络中泛洪“活动源”信息,通过在不需要特定树流量的拓扑部分创建“修剪状态”来构建树。它们也称为泛洪和修剪协议。在组播开放最短路径优先(MOSPF)协议中,有关接收方的信息会在整个网络中泛洪以支持树构建。
不需要使用密集模式协议,因为网络某些部分中构建的每棵树都可能始终导致网络中所有路由器(或管理范围内,如果已配置)的资源利用率(具有收敛影响)。这些协议在本文的其余部分不作进一步讨论。
ii)稀疏模式显式加入协议(PIM-SM/PIM-BiDir)
使用稀疏模式显式加入协议时,设备不会在网络中创建组特定状态,除非接收方已发送组的显式IGMP/MLD成员身份报告(或“加入”)。众所周知,ASM的这种变体具有良好的扩展性,是重点的组播模式。
这是PIM稀疏模式的基础,大多数组播部署到目前为止都使用过这种模式。这也是Bidirectional PIM (PIM-BiDir)的基础,PIM-BiDir正越来越多地为多(源)到多(接收器)应用部署。
这些协议称为稀疏模式,因为它们有效支持具有“稀疏”接收器群体的IP组播传输树,并且仅在源和接收器之间的路径中的路由器上以及在PIM-SM/BiDir中交汇点(RP)上创建控制平面状态。他们绝不会在网络的其它部分创建状态。只有在收到来自下游路由器或接收方的加入时,路由器才会显式建立状态,因此命名为“显式加入协议”。
PIM-SM和PIM-BiDir都使用“共享树”,允许将来自任何源的流量转发到接收方。共享树上的组播状态称为(*,G)状态,其中*是ANY SOURCE的通配符。此外,PIM-SM还支持创建与来自特定源的流量相关的状态。这些树称为SOURCE TREE,相关联的状态称为(S,G)状态。
SSM是在接收方(或某些代理)发送(S,G)“加入”以表示它希望接收由源S发送到组G的流量时使用的模型。通过IGMPv3/MLDv2“INCLUDE”模式成员身份报告可实现此目的。此模型称为源特定组播(SSM)模型。SSM强制在路由器之间使用显式连接协议。此功能的标准协议是PIM-SSM,它只是用于创建(S,G)树的PIM-SM的子集。SSM中没有共享树(*,G)状态。
因此,组播接收器可以“加入”ASM组G,或者“加入”(或更精确地“预订”)SSM(S,G)信道。为了避免重复术语“ASM组或SSM信道”,使用术语(组播)流,这意味着流可以是ASM组或SSM信道。
要保护组播网络,必须了解常见的数据包类型以及如何防范它们。需要考虑的主要协议有三种:
1. IGMP/MLD
2. PIM
3. MSDP
下一节将分别讨论这些协议中的每一种,以及每种协议可能出现的问题。
IGMP/MLD是组播接收器用来向路由器发出信号的协议,该路由器希望接收特定组播组的内容。互联网组成员协议(IGMP)是IPv4中使用的协议,组播侦听程序发现(MLD)是IPv6中使用的协议。
通常部署的IGMP有两个版本:IGMPv2和IGMPv3。通常部署的MLD还有两个版本:MLDv1和MLDv2。
IGMPv2和MLDv1在功能上是等效的,IGMPv3和MLDv2在功能上是等效的。
这些协议在以下链路中指定:
IGMPv2:RFC 2236
MLDv1:RFC 3590
IGMPv3和MLDv2:RFC 4604
IGMPv2和IGMPv3不仅是一种协议,而且也是IPv4 IP协议(具体而言,是第2号协议)。它不仅按照这些RFC中的说明用于报告组播组成员身份,而且被其他IPv4组播协议(如DVMRP、PIM版本1、mtrace和mrinfo)使用。当您尝试过滤IGMP(例如,通过Cisco IOS® ACL)时,记住这一点很重要。在IPv6中,MLD不是IPv6协议;相反,ICMPv6用于传输MLD数据包。PIM版本2是IPv4和IPv6中的相同协议类型(协议号103)。
本部分将讨论组播和单播PIM控制数据包。讨论了自动RP和引导路由器(BSR),这两种方法在PIM-SM网络中用于选择交汇点和控制组到RP分配。
组播PIM控制数据包包括:
单播PIM控制数据包定向到RP或从RP传出,包括:
图1:PIM单播数据包
利用此类数据包的攻击可能来自任何地方,因为这些数据包是单播数据包。
自动RP是Cisco开发的协议,其作用与PIMv2 BSR相同。自动RP是在BSR之前开发的,仅支持IPv4。BSR支持IPv4和IPv6。自动RP中的映射代理与BSR中的引导路由器具有相同的功能。在BSR中,来自C-RP的消息单播到引导路由器。在自动RP中,消息通过组播发送到映射代理,这样可以在边界进行更简单的过滤,如后所述。自动RP在此链接中进行了详细说明:https://www.cisco.com/c/en/us/td/docs/ios/solutions_docs/ip_multicast/White_papers/rps.html
在Cisco IOS中,始终会转发AutoRP/BSR数据包,并且当前未禁用。在自动RP的情况下,这可能会导致特殊的安全风险。
图2:自动RP数据包
注意:虽然自动RP用作PIM-SM RP通告和发现的机制,但它不使用PIM数据包(IP协议103),而是使用带有组播地址的用户数据报协议(UDP)端口496数据包。
?自动RP使用两种数据包类型:
C-RP-Announce数据包:这些数据包组播到所有映射代理,并使用互联网编号指派机构(IANA)保留的“公认”地址(224.0.1.39)。它们由C-RP发送,以通告RP能够充当RP的RP地址和组范围。
C-RP发现数据包:这些数据包组播到所有PIM路由器,并使用IANA保留的“公认”地址(224.0.1.40)。它们由自动RP映射代理发送,以通告选择为特定组范围RP的特定C-RP。
这些数据包类型中的每种类型都打算在网络上泛洪。
在Cisco IOS中,224.0.1.39和224.0.1.40均以PIM密集模式转发,以避免当组用于分发RP信息时,组的RP没有事先知悉的问题。这是PIM密集模式的唯一推荐用法。
在思科IOS XR中,自动RP消息是从邻居到邻居的逐跳反向路径转发(RPF)泛洪消息。因此,无需创建PIM DM mroute状态即可支持思科IOS XR中的自动RP。事实上,Cisco IOS XR根本不支持PIM-DM。
MSDP是一种IPv4协议,允许通过各自的交汇点将一个域中的源通告给另一个域中的接收方。MSDP在RFC 3618中指定。
为了在PIM域之间共享有关活动源的信息,使用MSDP。如果某个源在一个域中变为活动状态,则MSDP确保所有对等域及时了解此新源,这样,如果其他域中的接收方恰好已发送到接收方感兴趣的组,则允许其他域中的接收方快速联系此新源。ASM/PIM-SM组播通信需要MSDP,它通过各自域中交汇点之间配置的单播传输控制协议(TCP)连接运行。
本文档的此部分按网络中的功能实体组织。所讨论的威胁模型围绕这些实体形成。例如,本文档说明如何保护组播网络中的路由器(从组播的角度而言),而与路由器的部署位置无关。同样,在指定路由器、交汇点等上部署全网安全措施或措施时,也需要考虑以下问题
此处描述的威胁也遵循此逻辑,并按网络中的逻辑功能组织。
在抽象层上,任何组播部署都可能受到各种安全方面的威胁。安全性的关键方面是保密性、完整性和可用性。
威胁机密性:在大多数应用中,组播流量不加密,因此任何人都可以侦听或捕获路径中的任何线路或网络元素。在GET VPN部分中,讨论了加密组播流量以防止此类攻击的方法。
对流量完整性的威胁:如果没有应用级安全或基于网络的安全性(例如GET VPN),组播流量在传输中很容易受到修改。这对于使用组播的控制平面流量(例如OSPF、PIM和许多其他协议)尤为重要。
网络完整性面临的威胁:如果没有本文中描述的安全机制,未经授权的发送方、接收方或受损的网络元素可以访问组播网络,未经授权发送和接收流量(窃取服务)或过载网络资源。
可用性威胁:存在多种可能发生的拒绝服务攻击,可能导致合法用户无法使用资源。
接下来的部分将讨论网络中每个逻辑功能的威胁。
路由器面临许多基本威胁,这些威胁与路由器是否支持组播以及攻击是否涉及组播流量或协议无关。
拒绝服务(DoS)攻击是网络中最重要的通用攻击媒介。原则上,每个网络元素都可以成为DoS攻击的目标,这样可能会使元素过载,随后合法用户的服务可能会丢失或降级。请务必遵循适用于单播的基本网络安全建议。
值得注意的是,组播攻击并非总是有意为之,而往往是意外的。例如,首次观察到的Witty蠕虫于2004年3月,它是一种通过对IP地址的随机攻击传播的蠕虫。由于地址空间的完全随机化,多播IP目的地也会受到蠕虫的影响。在许多组织中,由于蠕虫将数据包发送到许多不同的组播目的地址,许多第一跳路由器崩溃。但是,路由器没有通过创建相关状态来承担此类组播流量负载,并且有效地经历了资源耗尽。这说明即使企业未使用组播,也要保护组播流量的必要性。
路由器面临的常见威胁包括:
当在路由器上启用组播时,除了单播之外,还必须对其加以保护。使用IP组播不会改变基本威胁模型;但是,它支持可能受到攻击的其他协议(PIM、IGMP、MLD、MSDP),这些攻击需要特别保护。当这些协议使用单播流量时,威胁模型与路由器运行的其他协议相同。
请注意,组播流量不能像单播流量一样用于攻击路由器,因为组播流量从根本上说是“接收方驱动”的,不能以远程目标为目标。攻击目标需要明确“加入”到组播流。在大多数情况下(主要例外是自动RP),路由器仅监听和接收“本地链路”组播流量。链路本地流量从不转发。因此,对带有组播数据包的路由器的攻击只能来自直接连接的攻击者。
组播源,无论是PC还是视频服务器,有时都不受网络的管理控制。因此,从网络运营商的角度来看,发送方大多被视为不可信。考虑到PC和服务器的强大功能及其复杂的安全设置(通常不完整),发送方会对任何网络(包括组播)造成重大威胁。这些威胁包括:
注意:主机通常不发送或接收PIM数据包。执行此操作的主机可能尝试发起攻击。
接收方通常也是一个具有大量CPU功率和带宽的平台,支持多种攻击形式。这些威胁与发送方的威胁大致相同。第2层攻击仍是一个重要的攻击媒介。除了攻击媒介通常是IGMP(或如前所述的第2层攻击)之外,接收方还可能伪造接收方和服务盗窃。
PIM-SM RP和PIM-BSR是组播网络中的关键点,因此是攻击者的重要目标。当第一跳路由器两者都不在时,仅单播攻击形式(包括PIM单播)可以直接针对这些元素。RP和BSR面临的威胁包括:
考虑图3中的拓扑,其中显示源、三个接收器(A、B、C)、交换机(S1)和两个路由器(R1和R2)。蓝线代表单播流,红线代表组播流。所有三个接收器都是组播流的成员。
图3:路由器和交换机中的复制
要禁止从特定源到特定接收方的流量,请执行以下操作:
本节适用于ASM和SSM服务模型,其中流量根据接收方端显式联接的接收进行转发。
对于单播流,没有隐式接收器保护。单播源可以将流量发送到目的地,即使该目的地没有请求该流量。因此,防火墙等防御机制通常用于保护端点。另一方面,组播在协议中内置一些隐式保护。理想情况下,流量仅到达已加入相关流量的接收方。
使用ASM,源可以通过向活动RP支持的任何组传输组播流量,来启动流量插入或DoS攻击。理想情况下,此流量不会到达接收方,但至少可以到达路径中的第一跳路由器,也可以到达RP(允许有限攻击)。但是,如果恶意来源知道目标接收方感兴趣的组,并且没有适当的过滤器,它可以将流量发送到该组。只要接收方监听组,就会收到此流量。
使用SSM时,只有在第一跳路由器上,如果没有接收方加入该(S,G)信道,流量停止时,才可能受到不必要来源的攻击。这不会在第一跳路由器上导致任何状态攻击,因为它会丢弃接收方不存在显式加入状态的所有SSM流量。在此模式中,恶意源仅知道目标对哪个组感兴趣是不够的,因为“连接”是源特定的。在这里,需要欺骗的IP源地址加上潜在的路由攻击才能成功。
即使网络中没有接收器,PIM-SM也会在最靠近源的第一跳路由器以及交汇点上创建(S,G)和(*,G)状态。因此,可能存在对源第一跳路由器和PIM-SM RP上的网络进行状态攻击的可能性。
如果恶意源开始将流量发送到多个组,则对于检测到的每个组,处于网络状态的路由器会在源和RP处创建状态,前提是相关组得到RP配置的允许。
因此,PIM-SM会受到源发起的状态和流量攻击。如果源主机在正确的前缀内随机更改其源IP地址,或者换句话说,只有地址的主机位被欺骗,则攻击可能加剧。
图4:ASM RP攻击
与PIM-SSM一样,来自源的PIM-BiDir状态创建攻击是不可能的。PIM-BiDir中的流量在由来自接收方的加入创建的状态转发,而在转发到RP的流量状态转发,这样它就可以到达RP后面的接收方,因为加入仅指向RP。从状态到向RP转发流量的过程称为(*,G/M)状态,由RP配置(静态、自动RP、BSR)创建。在存在源的情况下,它不会更改。因此,攻击者可以向PIM-BiDir RP发送组播流量,但与PIM-SM不同,PIM-BiDir RP不是“活动”实体,而只是为PIM-BiDir组转发或丢弃流量。
注意:某些Cisco IOS平台(*,G/M)状态不受支持。在这种情况下,源可以通过将流量组播传输到多个PIM-BiDir组来攻击路由器,这会导致(*,G)状态创建。例如,Catalyst 6500交换机支持(*,G/M)状态)。
攻击可能源自组播接收器。任何发送IGMP/MLD报告的接收方通常会在第一跳路由器上创建状态。单播中没有等效的机制。
图5:接收端基于显式加入的流量转发
接收方攻击可以分为三种类型:
缓解此类攻击的各种方法将在下一节“组播网络中的安全性”中介绍。
安全不是单点功能,而是每个网络设计的一个固有部分。因此,必须在网络的每个点考虑安全性。每个网络元素都必须受到适当的保护,这一点至关重要。一种可能的攻击场景是路由器被入侵者破坏,这种场景适用于任何技术。一旦入侵者控制了路由器,攻击者就可以实施多种不同的攻击方案。因此,每个网络元素都必须适当保护以防范任何形式的基本攻击以及特定组播攻击。
注意:某些平台(如Catalyst 9000系列交换机)默认启用了CoPP,且保护不会被取代。 有关其他信息,请参阅CoPP指南。
如果您决定在实际网络中调整、修改或创建rACL或CoPP,请务必谨慎。由于这两项功能都可以过滤发往控制平面的所有流量,因此必须明确允许所有所需的控制平面和管理平面协议。所需协议的列表非常长,很容易忽略不明显的协议,例如终端访问控制器访问控制系统(TACACS)。所有非默认rACL和CoPP配置必须始终在实验室环境中进行测试,然后才能部署到生产网络。此外,初始部署仅需要从“允许”策略开始。这允许使用ACL命中计数器验证任何意外命中。
在组播环境中,必须在rACL或CoPP中允许所需的组播协议(PIM、MSDP、IGMP等),组播才能正常运行。请务必记住,来自PIM-SM场景中的源的组播流中的第一个数据包将用作控制平面数据包,以帮助创建组播状态,一直到设备的控制平面。因此,在rACL或CoPP中允许相关组播组非常重要。由于存在许多平台特定的例外,因此在部署之前,请务必参考相关文档并测试任何计划的配置。
在思科IOS XR上,本地数据包传输服务(LPTS)充当到路由器控制平面的流量的监察器,类似于思科IOS上的CoPP。此外,接收流量(包括单播和组播流量)可以过滤并限制速率。
在启用组播的网络中,每个网络元素都需要使用组播特定的安全功能进行保护。本部分概述了这些功能,以便提供通用路由器保护。下一节将讨论并非每台路由器都需要,而只是网络中特定位置需要的功能,以及需要路由器之间交互(例如PIM身份验证)的功能。
ip multicast route-limit <mroute-limit> <warning-threshold>
图6:Mroute限制
Mroute限制允许为组播路由表中允许的路由数量设置阈值。如果启用组播路由限制,则不会创建超出配置限制的组播状态。还有一个警告阈值。当路由数量超过警告阈值时,会触发系统日志警告消息。在mroute limit处,会触发状态的任何其他数据包将被丢弃。
ip multicast route-limit命令也适用于每个MVRF。
禁用SAP侦听:no ip sap listen
sap listen命令会使路由器接收会话通告协议/会话描述协议(SAP/SDP)消息。SAP/SDP是一种从组播主干(MBONE)开始的传统协议。这些消息指示有关未来或当前可用的组播内容的目录信息。这可能是针对路由器CPU和内存资源的DoS源,因此需要禁用此功能。
控制对mrinfo信息的访问-“ip multicast mrinfo-filter”命令
mrinfo命令(适用于Cisco IOS以及某些Microsoft Windows和Linux版本)使用各种消息查询组播路由器以获取信息。可以使用ip multicast mrinfo-filter全局配置命令限制对源子集的访问,或完全禁用该信息。
此示例拒绝源自192.168.1.1的查询,而允许来自任何其他来源的查询:
ip multicast mrinfo-filter 51 access-list 51 deny 192.168.1.1 access-list 51 permit any
此示例拒绝来自任何源的mrinfo请求:
ip multicast mrinfo-filter 52 access-list 52 deny any
注意:与任何ACL的预期一样,deny 表示过滤数据包,而permit表示允许数据包。
如果mrinfo命令用于诊断目的,则强烈建议使用适当的ACL配置ip multicast mrinfo-filter命令,以仅允许来自源地址子集的查询。mrinfo命令提供的信息也可以通过SNMP进行检索。强烈建议使用完整的mrinfo请求块(阻止来自设备查询的任何源)。
ip multicast group-range <std-acl> ipv6 multicast group-range <std-acl>
如果数据包出现在被ACL拒绝的任何组中,则它们会在所有控制协议(包括PIM、IGMP、MLD、MSDP)中丢弃,并在数据平面上丢弃。因此,不会为这些组范围创建IGMP/MLD缓存条目、PIM、组播路由信息库/组播转发信息库(MRIB/MFIB)状态,并且所有数据包都会立即丢弃。
这些命令在设备的全局配置中输入。
建议在网络中的所有路由器上部署此命令(如果可用),以便控制源自网络之外的所有组播流量。请注意,这些命令会影响数据平面和控制平面。如果可用,此命令比标准ACL覆盖范围更广,因此是首选。
PIM路由器必须接收PIM Hello消息才能建立PIM邻居关系。PIM邻居关系也是指定路由器(DR)选举、DR故障切换以及发送/接收PIM加入/修剪/断言消息的基础。
图7:PIM邻居控制
要禁止不必要的邻居,请使用ip pim neighbor-filter命令,如图7所示。此命令过滤所有不允许的邻居PIM数据包,包括Hello数据包、加入/修剪数据包和BSR数据包。网段上的主机可能会伪装成源IP地址的PIM邻居。需要第2层安全机制(即IP源防护)来防止源地址在网段上欺骗尝试,或者在接入交换机中使用VLAN ACL来阻止来自主机的PIM数据包。关键字“log-input”可在ACL中用于记录与ACE匹配的数据包。
PIM联接/修剪数据包被发送到PIM邻居以添加或从特定(S,G)或(*,G)路径中删除该邻居。PIM组播数据包是以生存时间(TTL)=1发送的链路本地组播数据包。所有这些数据包都组播到众所周知的全PIM路由器地址:224.0.0.13。这意味着所有此类攻击必须与受攻击的路由器位于同一子网上。攻击可能包括伪造的Hello、加入/修剪和断言数据包。
注意:将PIM组播数据包中的TTL值人为增加或调整为大于1的值不会出现问题。所有PIM路由器地址始终在路由器上接收和本地处理。正常和合法路由器从不直接转发它。
?为了保护RP免受潜在的PIM-SM注册消息泛洪,DR需要对这些消息进行速率限制。使用ip pim register-rate-limit命令:
ip pim register-rate-limit <count>
图8:PIM-SM寄存器隧道控制
PIM单播数据包可用于攻击RP。因此,基础设施ACL可以保护RP免受此类攻击。请记住,多播发送方和接收方永远不需要发送PIM数据包,因此PIM协议(IP协议103)通常可在用户边缘进行过滤。
自动RP控制- RP通告过滤器
ip pim rp-announce filter命令是在可能的情况下可以使用自动RP配置的另一种安全措施:
ip pim rp-announce-filter
可以在映射代理上配置此配置,以控制哪些路由器被接受为适用于哪些组范围/组模式的候选RP。
图9:自动RP - RP通告过滤器
自动RP控制-限制自动RP消息
使用multicast boundary命令将AutoRP数据包、RP通告(224.0.1.39)或RP发现(224.0.1.40)限制到特定PIM域:
ip multicast boundary <std-acl>
access-list 1 deny 224.0.1.39
access-list 1 deny 224.0.1.40
224.0.1.39 (RP-announce) 224.0.1.40 (RP-discover)
图10:组播边界命令
BSR控制-限制BSR消息
使用ip pim bsr-border 命令过滤PIM域边界的BSR消息。无需ACL,因为BSR消息是通过链路本地组播逐跳转发的。
图11:BSR边界
在最后一节中,我们将讨论针对PIM-SP和RP控制平面数据包以及自动RP、BSR和MSDP消息的过滤器。
图12显示了结合地址范围的自动RP过滤器示例。显示了两种不同的区域绑定方法。从自动RP的角度来看,这两个ACL是等效的。
图12:自动RP过滤器/范围
自动RP的接口边界过滤器的思想是确保自动RP通告仅到达它们支持的区域。定义了区域、公司和互联网范围,并且在每种情况下,每个范围中都有RP和自动RP通告。管理员只希望区域RP为区域路由器所知,公司RP为区域和公司路由器所知,并希望所有互联网RP都全局可用。范围可以进一步扩展。
如图所示,有两种截然不同的方法可以过滤自动RP数据包:互联网边界明确调用自动RP控制组(224.0.1.39和224.0.1.40),从而导致过滤所有自动RP数据包。此方法可在管理域的边缘使用,在该域中没有通过自动RP数据包。区域边界使用filter-auto-rp关键字来检查自动RP数据包中的rp到组范围通告。当ACL明确拒绝通告时,在转发数据包之前会将其从自动RP数据包中删除。在本例中,这允许在区域内了解企业范围的RP,而在从区域到企业其余部分的边界处过滤区域范围的RP。
在本例中,ISP1充当PIM-SM传输提供商。它们仅支持与邻居的MSDP对等,并且只接受(S,G),但不接受(*,G)边界路由器上的流量。
在域间(通常在自治系统之间)要采取两种基本安全措施:
图13显示了ISP1的边界路由器上接口过滤器的示例配置。
要在域边界保护数据平面,请通过multicast boundary命令禁止过滤器针对“host 0.0.0.0”和管理性作用域地址加入(*,G):
图13:域间(*,G)过滤器
要保护控制平面,请通过三个基本安全措施强化MSDP:
1) MSDP SA过滤器
通过MSDP SA过滤器过滤MSDP消息的内容是一种“最佳惯例”。此过滤器的主要思想是避免组播状态传播到非互联网范围的应用和组,并且不需要转发到源域之外。理想情况下,从安全角度来看,过滤器仅允许已知组(以及可能的发件人),并拒绝任何未知发件人和/或组。
通常无法明确列出所有允许的发件人和/或组。建议对PIM-SM域使用默认配置过滤器,对每个组使用单个RP(无MSDP网状组):
!--- Filter MSDP SA-messages. !--- Replicate the following two rules for every external MSDP peer. ! ip msdp sa-filter in <peer_address> list 111 ip msdp sa-filter out <peer_address> list 111 ! !--- The redistribution rule is independent of peers. ! ip msdp redistribute list 111 ! !--- ACL to control SA-messages originated, forwarded. ! !--- Domain-local applications. access-list 111 deny ip any host 224.0.2.2 ! access-list 111 deny ip any host 224.0.1.3 ! Rwhod access-list 111 deny ip any host 224.0.1.24 ! Microsoft-ds access-list 111 deny ip any host 224.0.1.22 ! SVRLOC access-list 111 deny ip any host 224.0.1.2 ! SGI-Dogfight access-list 111 deny ip any host 224.0.1.35 ! SVRLOC-DA access-list 111 deny ip any host 224.0.1.60 ! hp-device-disc !--- Auto-RP groups. access-list 111 deny ip any host 224.0.1.39 access-list 111 deny ip any host 224.0.1.40 !--- Scoped groups. access-list 111 deny ip any 239.0.0.0 0.255.255.255 !--- Loopback, private addresses (RFC 6761). access-list 111 deny ip 10.0.0.0 0.255.255.255 any access-list 111 deny ip 127.0.0.0 0.255.255.255 any access-list 111 deny ip 172.16.0.0 0.15.255.255 any access-list 111 deny ip 192.168.0.0 0.0.255.255 any !--- Default SSM-range. Do not do MSDP in this range. access-list 111 deny ip any 232.0.0.0 0.255.255.255 access-list 111 permit ip any any !
建议尽可能严格地进行入站和出站两个方向的过滤。
有关MSDP SA过滤器建议的详细信息,请使用:https://www.cisco.com/c/en/us/support/docs/ip/ip-multicast/13717-49.html
2) MSDP状态限制
在多个自治系统(AS)之间启用MSDP时,建议限制路由器中由于从邻居接收的“源-活动”(SA)消息而建立的状态量。您可以使用ip msdp sa-limit命令:
ip msdp sa-limit <peer> <limit>
图14:MSDP控制平面
使用ip msdp sa-limit命令,您可以限制由于从MSDP对等接收的SA消息而创建的SA状态的数量。一些简单的经验法则建议包括:
3) MSDP MD5邻居身份验证
建议对MSDP对等使用消息摘要算法(MD5)密码身份验证。这使用TCP MD5签名选项,与RFC 6691中所述的用于保护BGP的用途等效。
图15:MSDP MD5邻居身份验证
这三个MSDP安全建议追求不同的目标:
通过适当的单播安全机制,可以缓解许多源于发送方的组播安全问题。下面是一些单播安全机制建议的最佳实践:
此类措施可用于阻止对核心的定向攻击。例如,这还可以解决使用PIM单播数据包到RP的攻击等问题,RP在网络内部,因此受基础设施ACL保护。
在图16所示的示例中,过滤器是在第一跳组播路由器(指定路由器)的LAN接口(E0)上配置的。过滤器由称为“源”的扩展访问控制列表定义。此ACL应用于连接到源LAN的指定路由器的面向源的接口。事实上,由于组播流量的性质,可能需要在所有面向局域网的接口上配置类似的过滤器,源可能会在这些接口上变为活动状态。由于不可能在所有情况下都准确知道源活动发生的位置,因此建议对网络中的所有入口点应用此类过滤器。
图16:控制源
此过滤器的目的是防止从特定源地址或源地址范围到特定组或组地址范围的流量。此过滤器在PIM创建任何路由之前起作用,并有助于限制状态。
这是标准数据平面ACL。这在高端平台上的ASIC上实施,不会造成性能损失。对于直接连接的源,建议使用数据平面ACL并优先于控制平面ACL,因为它们可以最大程度减少不需要的流量对控制平面的影响。限制数据包可以发送到的目标(IP组播组地址)也非常有效。由于这是路由器命令,因此它无法克服伪造的源IP地址(请参阅本部分的前面部分)。因此,建议为能够连接到特定局域网/虚拟局域网(LAN/VLAN)的所有设备提供额外的第2层(L2)机制或一致的策略。
注意:ACL中的“log”关键字对于了解针对特定ACL条目的命中非常有用;但是,这会占用CPU资源,需要谨慎处理。此外,在基于硬件的平台上,ACL日志消息由CPU生成,因此必须考虑CPU的影响。
?从安全角度来看,ASM/PIM-SM体系结构的实际优势之一是,交汇点为网络中的所有源提供单个控制点,适用于任何组范围。这可以与称为accept-register过滤器的设备一起使用。此过滤器的命令如下所示:
ip pim accept-register / ipv6 pim accept-register
图17:PIM-SM源代码管理
在PIM-SM网络中,可以使用此命令控制不需要的流量源。当源流量到达第一跳路由器时,第一跳路由器(DR)会创建(S,G)状态并向RP发送PIM源注册消息。如果源未列在accept-register过滤器列表(在RP上配置)中,则RP拒绝注册并将立即注册停止消息发送回DR。
在显示的示例中,对RP应用了一个简单的ACL,RP仅过滤源地址。也可以在RP上使用扩展ACL过滤源和组。
源过滤器存在缺点,因为在RP上使用pim accept-register命令时,仍会在源的第一跳路由器上创建PIM-SM (S,G)状态。这可能会导致在位于源本地和位于源与RP之间的接收器处产生流量。此外,pim accept-register命令可在RP的控制平面中运行。这可能使用虚假注册消息使RP过载,并可能导致DoS情况。
建议在RP上应用pim accept-register命令以及其他方法,例如将简单数据平面ACL应用于所有DR和进入网络的所有入口点。 虽然DR上的入口ACL在配置完备、运行正常的网络中已经足够,但建议在RP上配置pim accept-register命令,作为发生边缘路由器配置错误时的辅助安全机制。具有相同目标的分层安全机制称为“深度防御”,是安全领域的常见设计原则。
大多数接收方问题属于IGMP/MLD接收方协议交互领域。
图18:控制IGMP
过滤IGMP或MLD数据包时,请记住以下几点:
一旦启用IP组播,IGMP进程将默认启用。IGMP数据包还携带这些协议,因此每当启用组播时,所有这些协议都会启用:
有关详细信息,请参阅IANA的互联网组管理协议(IGMP)类型编号
Router> mtrace 172.16.0.0 172.16.0.10 239.254.254.254 Type escape sequence to abort. Mtrace from 172.16.0.0 to 172.16.0.10 via group 239.254.254.254 From source (?) to destination (?) Querying full reverse path... 0 172.16.0.10 -1 172.16.0.8 PIM thresh^ 0 0 ms -2 172.16.0.6 PIM thresh^ 0 2 ms -3 172.16.0.5 PIM thresh^ 0 894 ms -4 172.16.0.3 PIM thresh^ 0 893 ms -5 172.16.0.2 PIM thresh^ 0 894 ms -6 172.16.0.1 PIM thresh^ 0 893 ms
单播IGMP数据包(对于IGMP/UDLR)可以过滤,因为它们很可能是攻击数据包,而不是有效的IGMP协议数据包。Cisco IOS支持单播IGMP数据包,以支持单向链路和其他例外情况。
伪造的IGMP/MLD查询数据包可能会导致IGMP版本低于预期。
特别是,理想情况下主机从不发送IGMP查询,因为以较低IGMP版本发送的查询会导致收到此查询的所有主机恢复为较低版本。如果存在IGMPv3/SSM主机,则可能会“攻击”SSM流。对于IGMPv2,这可能会导致更长的离开延迟。
如果存在具有单个IGMP查询器的非冗余LAN,路由器需要丢弃收到的IGMP查询。
如果存在冗余/通用被动LAN,则需要一个支持IGMP监听的交换机。在此案例中,有2个特定功能可以提供帮助:
路由器防护
如果交换机在该端口上收到组播路由器控制数据包(IGMP通用查询、PIM Hello或CGMP Hello),则任何交换机端口都可以成为组播路由器端口。当交换机端口成为组播路由器端口时,所有组播流量都将发送到该端口。使用“路由器防护”可以防止出现这种情况。路由器防护功能不需要启用IGMP监听。
路由器防护功能允许将指定的端口指定为组播主机端口。即使收到组播路由器控制数据包,该端口也无法成为路由器端口。
如果在启用路由器防护的端口上收到以下数据包,则丢弃这些数据包:
当丢弃这些数据包时,更新统计信息,指示由于路由器防护而丢弃数据包。
IGMP最低版本
可以配置允许的IGMP主机的最低版本。例如,您可以禁止所有IGMPv1主机或所有IGMPv1和IGMPv2主机。此过滤器仅适用于成员身份报告。
如果主机连接到一个通用的“被动”LAN(例如,不支持IGMP监听的交换机,或者没有针对该交换机进行配置),那么路由器除了忽略随后触发的“旧版本”成员身份报告外,也无法自行回退。
由于IGMP查询必须对所有主机可见,因此不可能使用带有预共享密钥(例如静态密钥IPSec)的基于散列的消息身份验证(HMAC)机制来验证来自“有效路由器”的IGMP查询。如果两个或多个路由器连接到一个通用LAN网段,则需要选择IGMP查询器。在这种情况下,唯一可用的过滤器是ip access-group filter,它基于发送查询的另一台IGMP路由器的源IP地址。
必须允许“正常”组播IGMP数据包。
此过滤器可用于接收器端口,以仅允许“正常”的IGMP数据包,并过滤已知的“不良”数据包:
ip access-list extended igmp-control <snip> deny igmp any any pim ! No PIMv1 deny igmp any any dvmrp ! No DVMRP packets deny igmp any any host-query ! Do not use this command with redundant routers. ! In that case this packet type is required ! permit igmp any host 224.0.0.22 ! IGMPv3 membership reports permit igmp any any 14 ! Mtrace responses permit igmp any any 15 ! Mtrace queries permit igmp any 224.0.0.0 10.255.255.255 host-query ! IGMPv1/v2/v3 queries permit igmp any 224.0.0.0 10.255.255.255 host-report ! IGMPv1/v2 reports permit igmp any 224.0.0.0 10.255.255.255 7 ! IGMPv2 leave messages deny igmp any any ! Implicitly deny unicast IGMP here!
<snip> permit ip any any ! Permit other packets interface ethernet 0 ip access-group igmp-control in
注意:此类型的IGMP过滤器可用于接收ACL或CoPP。在这两种应用中,都需要结合使用过滤器来处理其他已处理的流量,例如路由和管理平面协议。
图19:主机接收器端访问控制
要过滤发往接收方的流量,请勿过滤数据平面流量,而是过滤控制平面协议IGMP。由于IGMP是接收组播流量的必要前提,因此不需要数据平面过滤器。
特别是,您可以限制接收方可以加入的组播流(连接到配置该命令的接口)。在这种情况下,请使用ip igmp access-group / ipv6 mld access-group 命令:
ip igmp access-group / ipv6 mld access-group
对于ASM组,此命令仅根据目标地址进行过滤。然后会忽略ACL中的源IP地址。对于使用IGMPv3/MLDv2的SSM组,它会过滤源和目标IP。
此示例过滤所有IGMP扬声器的给定组:
access-list 1 deny 226.1.0.0 0.0.255.255
access-list 1 permit any log
!
interface ethernet 1/3
ip igmp access-group 1
此示例过滤特定组的特定IGMP扬声器(因此,特定组播接收器):
ip access-list extended test5 deny igmp host 10.4.4.4 host 232.2.30.30 permit igmp any any ! interface Ethernet0/3 ip igmp access-group test5
ip igmp limit <n> [ except <ext-acl> ] ipv6 mld limit <n> [ except <ext-acl> ]
建议始终按接口配置此限制,也全局配置此限制。在每种情况下,限制是指IGMP缓存中的条目数。
接下来的两个示例展示如何使用此命令帮助限制住宅宽带网络边缘的组数量。
示例1 -将接收组限制为仅包含SDR通告和一个接收信道
会话目录(SDR)用作某些组播接收器的信道指南。有关详细信息,请参阅RFC 2327。
通常的要求是限制接收方接收SD组和一个信道。可以使用以下示例配置:
ip access-list extended channel-guides permit ip any host 239.255.255.254 ! SDR announcements deny ip any any ip igmp limit 1 except channel-guides interface ethernet 0 ip igmp limit 2 except channel-guides
本示例中的访问列表仅指定了信道指南;全局ip igmp limit命令将每个IGMP源限制为一(1)个信道,但不包括始终可以接收的信道指南。interface命令会覆盖全局命令,并且除了通道指南外,还允许在此接口上接收两(2)个通道。
示例2 -汇聚DSLAM链路上的准入控制
此命令还可用于提供一种形式的带宽准入控制。例如,如果必须分配300个SDTV频道(每个频道4Mbps),并且有一个到数字用户线路访问多路复用器(DSLAM)的1Gbps链路,则可以作出策略决定,将电视带宽限制为500 Mbps,并将剩余部分留作互联网和其他用途。在这种情况下,您可以将IGMP状态限制为500 Mbps/4 Mbps = 125个IGMP状态。
这种情况下可以使用以下配置:
图20:使用每接口IGMP限制;Agg-DSLAM链路上的准入控制
ip multicast limit [ rpf | out | connected ] <ext-acl> <max>
在输入和输出接口上可以分别限制状态。直接连接的源状态也可以使用“已连接”关键字进行限制。示例说明了此命令的用法:
示例1 - Agg-DSLAM链路上的出口准入控制
在本例中,有300个SD TV频道。假设每个SD信道需要4 Mbps,总计不超过500 Mbps。最后,还要假设需要支持基本、扩展和高级捆绑包。带宽分配示例:
然后对每个信道使用4 Mbps,将DSLAM上行链路限制为:
在面向DSLAM的出站接口上配置从PEAgg的限制:
图21:使用每接口mroute限制;Agg-DSLAM链路上的准入控制
示例2 - Agg-DSLAM链路上的入口准入控制
不同于上游设备的出站接口上的“out”限制,可以在下游设备的RPF接口上使用RPF限制。这实际上与上一个示例的结果相同,如果下游设备不是Cisco IOS设备,则可能有用。
图22:使用每个接口的mroute限制;输入准入控制
示例3 -基于带宽的限制
您可以在多个内容提供商之间进一步细分接入带宽,并为每个内容提供商提供通向DSLAM的上行链路上的公平带宽份额。在这种情况下,请使用ip multicast limit cost命令:
ip multicast limit cost <ext-acl> <multiplier>
使用此命令,可以将“成本”(使用“multiplier”中指定的值)归属于与ip组播限制中的扩展ACL匹配的任何状态。
此命令是一个全局命令,可以同时配置多个开销。
在本例中,必须支持三个不同的内容提供商对网络中的每个内容提供商具有公平访问权限。此外,在本示例中,需要支持各种类型的运动图像专家组(MPEG)流:
MPEG2 SDTV:4Mbps
MPEG2 HDTV:18Mbps
MPEG4 SDTV:1.6Mbps
MPEG4 HDTV:6Mbps
在这种情况下,您可以将带宽成本分配给每个流类型,并使用以下配置在三个内容提供商之间共享750Mbps的剩余部分:
ip multicast limit cost acl-MP2SD-channels 4000 ! from any provider ip multicast limit cost acl-MP2HD-channels 18000 ! from any provider ip multicast limit cost acl-MP4SD-channels 1600 ! from any provider ip multicast limit cost acl-MP4HD-channels 6000 ! from any provider ! interface Gig0/0 description --- Interface towards DSLAM --- <snip> ! CAC ip multicast limit out 250000 acl-CP1-channels ip multicast limit out 250000 acl-CP2-channels ip multicast limit out 250000 acl-CP3-channels
图23:每个接口Mroute状态限制的成本系数
与单播一样,有时还需要保护组播流量以提供机密性或完整性保护。可能需要提供此类服务的两个主要领域:
IPSec作为一种协议[RFC 6040、7619、4302、4303、5282]特别限制为单播流量(通过RFC)。在这里,在两个单播对等体之间建立了“安全关联”(SA)。为了将IPSec应用于组播流量,一个选项是在GRE隧道内封装组播流量,然后将IPSec应用于GRE隧道(单播)。较新的方法使用在组的所有成员之间建立的单一安全关联。解释组域(GDOI) [RFC 6407]定义如何实现此目标。
基于GDOI,思科开发了一种称为组加密传输(GET) VPN的技术。该技术使用文档“draft-ietf-msec-ipsec-extensions”中定义的“带地址保留的隧道模式”。在GET VPN中,首先在组的所有成员之间建立组安全关联。随后,使用ESP(封装安全负载)或AH(身份验证报头)保护流量,ESP(封装安全负载)或AH(身份验证报头)使用具有地址保留的隧道模式。
总之,GET VPN会封装使用原始报头地址信息的组播数据包,然后使用ESP等保护与组策略相关的内部数据包。
GET VPN的优点是组播流量完全不受安全封装机制的影响。路由的IP报头地址与原始IP报头地址相同。无论是否使用GET VPN,组播流量均可采用相同的方式加以保护。
应用于GET VPN节点的策略在组密钥服务器上集中定义,并分发到所有组节点。因此,所有组节点具有相同的策略,并且应用于组流量的安全设置相同。与标准IPSec类似,加密策略定义哪些类型的流量需要以何种方式保护。这使GET VPN可用于各种用途。
网络范围的加密策略在组密钥服务器上设置,并分发到GET VPN终端。该策略包含IPSec策略(IPSec模式-此处:具有报头保留的隧道模式)和要使用的安全算法(例如AES)。它还包含一个策略,描述哪些流量可以受到保护,如ACL所定义。
GET VPN可用于组播和单播流量。ACL可以定义保护单播流量的策略:
permit ip 10.0.0.0 0.255.255.255 10.0.0.0 0.255.255.255
这将加密源IP地址为10/8而目的IP地址为10/8的所有流量。GET VPN会忽略所有其他流量,例如从10/8到另一个地址的流量。
GET VPN在组播流量方面的应用技术上相同。例如,此访问控制条目(ACE)可用于保护从任何源到相应组播组的流量:
permit ip any 239.192.0.0 0.0.255.255
此策略匹配所有源(“any”)和以239.192开头的所有组播组。流向其他组播组的流量不安全。
注意:必须特别注意加密ACL的构造。必须在GDOI策略中排除管理流量,或源自GET VPN域之外但终止于内部的流量(即仅通过一个加密终端的流量)。
?常见的错误包括:
通常,最佳实践是对控制平面流量(例如路由协议)进行身份验证,以确保消息来自受信任的对等体。对于使用单播的控制平面协议(例如BGP),这相对简单。但是,许多控制平面协议使用组播流量。示例包括OSPF、RIP和PIM。有关完整列表,请参阅IANA的IPv4多播地址空间注册表。
其中一些协议具有内置的身份验证,例如路由信息协议(RIP)或增强型内部组路由协议(EIGRP),其他协议则依靠IPSec来提供此身份验证(例如OSPFv3、PIM)。对于后一种情况,GET VPN提供了一种可扩展的方法来保护这些协议。在大多数情况下,要求是协议消息验证,或者换句话说,验证消息是由受信任的对等体发送的。但是,GET VPN也允许对此类消息进行加密。
要保护(通常仅进行身份验证)此类控制平面流量,需要使用ACL描述流量并将其包括在GET VPN策略中。详细信息取决于要保护的协议,其中需要注意ACL是仅通过入口GET VPN节点(已封装)的流量,还是也通过出口节点的流量。
保护PIM协议有两种基本方法:
注意:提供的命令作为示例有助于解释概念。 例如,必须排除某些用于引导PIM的PIM协议,例如BSR或自动RP。两种方法都具有一定的优势和不便,这取决于它们的部署方式。有关详细信息,请参阅有关如何通过GET VPN保护PIM的特定资料。
组播正在日益成为网络中的常见服务。家庭/家庭宽带网络中的IPTV服务的出现,以及全球许多金融市场向电子交易应用的转移,仅仅是要求组播成为绝对要求的两个例子。组播具有各种不同的配置、操作和管理挑战。其中一个主要挑战是安全。
本文档研究了保护组播的多种方法:
请记住组播安全性与单播有何不同。组播传输基于动态状态的创建,组播涉及动态数据包复制,组播构建单向树以响应PIM JOIN/PRUNE消息。整个环境的安全性要求了解和部署丰富的Cisco IOS命令框架。这些命令主要围绕保护协议操作、状态(组播)或针对CoPP等数据包放置的策略器为中心。 正确使用这些命令可以为IP组播提供强大的保护服务。
综上所述,本文提出并描述了多种方法:
IP组播是一种激动人心的可扩展方式,可用于提供各种应用服务。与单播一样,它需要保护多个不同区域。本文提供了可用于保护IP组播网络的基本构建块。
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
24-Aug-2022 |
初始版本 |