路由协议的身份验证
您可以为许多路由协议(包括 BGP、IS-IS、OSPF、RIP 和 RSVP)的路由协议消息配置身份验证方法和密码。为防止交换未经身份验证或伪造的数据包,路由器必须确保它们与受信任的对等方形成路由协议关系(对等或相邻关系)。一种方法是对路由协议消息进行身份验证。相邻路由器使用密码来验证协议从路由器或路由器接口发送的数据包的真实性。
本主题提供对路由协议进行身份验证的高级概述和一些基本示例。有关为特定路由协议配置身份验证的详细信息,请参阅该协议的用户指南。
路由协议的身份验证方法
某些路由协议(BGP、IS-IS、OSPF、RIP 和 RSVP)允许您配置身份验证方法和密码。相邻路由器使用密码来验证协议从路由器或路由器接口发送的数据包的真实性。支持以下身份验证方法:
-
简单身份验证(IS-IS、OSPF 和 RIP)— 使用简单文本密码。接收路由器使用身份验证密钥(密码)来验证数据包。由于密码包含在传输的数据包中,因此这种身份验证方法相对不安全。我们建议您 避免 使用此身份验证方法。
-
MD5 和 HMAC-MD5(BGP、IS-IS、OSPF、RIP 和 RSVP)— MD5 创建包含在传输数据包中的编码校验和。HMAC-MD5 将 HMAC 身份验证与 MD5 相结合,增加了迭代加密散列函数的使用。对于这两种类型的身份验证,接收路由器使用身份验证密钥(密码)来验证数据包。HMAC-MD5 身份验证在 RFC 2104, HMAC 中定义:用于消息身份验证的密钥散列。
通常,身份验证密码是由某个最大数量的字母和数字组成的文本字符串。密码可以包含任何 ASCII 字符。如果在密码中包含空格,请用引号 (“ ”) 将所有字符括起来。
Junos-FIPS 有特殊的密码要求。FIPS 密码长度必须为 10 到 20 个字符。密码必须至少使用五个已定义的字符集中的三个(大写字母、小写字母、数字、标点符号和其他特殊字符)。如果路由器上安装了 Junos-FIPS,则无法配置密码,除非密码符合此标准。
示例:配置 BGP 和 IS-IS 路由协议的身份验证密钥
路由器的主要任务是使用其路由和转发表将用户流量转发到其预期目标。攻击者可以向路由器发送伪造的路由协议数据包,意图更改或破坏其路由表或其他数据库的内容,进而降低路由器和网络的功能。为防止此类攻击,路由器必须确保与可信对等方形成路由协议关系(对等或相邻关系)。一种方法是对路由协议消息进行身份验证。强烈建议在配置路由协议时使用身份验证。
Junos OS 支持 BGP、IS-IS、OSPF、RIP 和 RSVP 的 HMAC-MD5 身份验证。HMAC-MD5 使用密钥与正在传输的数据相结合来计算哈希。计算出的哈希与数据一起传输。接收方使用匹配密钥重新计算和验证消息哈希。如果攻击者伪造或修改了消息,则哈希将不匹配,数据将被丢弃。
在以下示例中,我们将 BGP 配置为外部网关协议 (EGP),将 IS-IS 配置为内部网关协议 (IGP)。如果使用 OSPF,请按所示的 IS-IS 配置进行配置。
配置 BGP
以下示例显示了为不同的 BGP 对等组配置的单个身份验证密钥。您还可以在邻居或路由实例级别或为所有 BGP 会话配置 BGP 身份验证。与任何安全配置一样,粒度级别(以及某种程度上的安全级别)和维护系统所需的管理量之间存在权衡。
此示例还为路由协议事件和错误配置了许多跟踪选项,这些选项可以很好地指示针对路由协议的攻击。这些事件包括协议身份验证失败,这可能指向攻击者。攻击者可能正在向路由器发送欺骗性或其他格式错误的路由数据包,试图引发特定行为。
[edit] protocols { bgp { group ibgp { type internal; traceoptions { file bgp-trace size 1m files 10; flag state; flag general; } local-address 10.10.5.1; log-updown; neighbor 10.2.1.1; authentication-key "$9$aH1j8gqQ1gjyjgjhgjgiiiii"; } group ebgp { type external; traceoptions { file ebgp-trace size 10m files 10; flag state; flag general; } local-address 10.10.5.1; log-updown; peer-as 2; neighbor 10.2.1.2; authentication-key "$9$aH1j8gqQ1gjyjgjhgjgiiiii"; } } }
配置 IS-IS
尽管支持对所有 IGP 进行身份验证,但 Junos OS 某些 IGP 本质上比其他 IGP 更安全。大多数服务提供商使用 OSPF 或 IS-IS 来实现快速的内部融合和可扩展性,并将流量工程功能与 MPLS 结合使用。由于 IS-IS 不在网络层运行,因此欺骗比 OSPF 更难。OSPF 封装在 IP 中,因此会受到远程欺骗和拒绝服务 (DoS) 攻击。
以下示例配置 IS-IS 的身份验证。它还为路由协议事件和错误配置了许多跟踪选项,这些选项可以很好地指示针对路由协议的攻击。这些事件包括协议身份验证失败,这可能指向攻击者。攻击者可能正在向路由器发送欺骗性或其他格式错误的路由数据包,试图引发特定行为。
[edit] protocols { isis { level 1 { authentication-key "$9$aH1j8gqQ1gjyjgjhgjgiiiii"; # SECRET-DATA authentication-type md5; } interface at-0/0/0.131 { lsp-interval 50; level 2 disable; level 1 { metric 3; hello-interval 5; hold-time 60; } } interface lo0.0 { passive; } traceoptions { file isis-trace size 10m files 10; flag normal; flag error; } } }
配置路由协议的身份验证密钥更新机制
您可以为 BGP、LDP 和 IS-IS 路由协议配置身份验证密钥更新机制。此机制使您能够在不中断关联的路由和信令协议(如 OSPF 和 RSVP)的情况下更新身份验证密钥。
要配置此功能,请在层次结构级别包含 authentication-key-chains
语句 [edit security]
。要应用密钥链,必须在协议的相应层次结构级别配置密钥链标识符和密钥链算法。
以下部分提供有关为路由协议配置身份验证密钥更新的详细信息。有关为特定路由协议配置身份验证密钥更新的详细信息,请参阅该协议的用户指南。
配置身份验证密钥更新
要配置认证密钥更新机制,请在层次结构级别包含 key-chain
语句 [edit security authentication-key-chains]
,并指定 key
用于创建由多个认证密钥组成的钥匙串的选项。
[edit security authentication-key-chains] key-chain key-chain-name { key key { algorithm (hmac-sha-1 | md5) options (basic | isis-enhanced) secret secret-data; start-time yyyy-mm-dd.hh:mm:ss; } }
key-chain
- 为钥匙串机制指定名称。您可以在协议的相应层次结构级别引用此名称,以关联使用以下选项指定的唯一身份验证 key-chain
属性:
-
algorithm
- IS-IS 的身份验证算法。 -
key
- 唯一标识钥匙串中每个键的整数值。范围为 0 到 63。 -
options
—(仅限 IS-IS)协议传输编码格式,用于对路由协议数据包中的消息认证代码进行编码。 -
secret
- 加密文本或纯文本格式的密码。即使您以纯文本格式输入密钥数据,密钥也始终以加密格式显示。 -
start-time
- 身份验证密钥传输的开始时间,以 UTC 指定。开始时间在钥匙串中必须是唯一的。
配置 BGP 和 LDP 以进行身份验证密钥更新
要为 BGP 和 LDP 路由协议配置身份验证密钥更新机制,请将语句 authentication-key-chain
包含在层次结构级别中 [edit protocols (bgp | ldp)]
。authentication-key-chain
包含该语句会将每个路由协议与身份验证密钥相关联[edit security authentication-key-chains]
。您还必须配置 authentication-algorithm
语句并指定算法。例如:
[edit protocols] bgp { group group-name { neighbor address { authentication-algorithm algorithm; authentication-key-chain key-chain-name; } } } ldp { session session-addr { authentication-algorithm algorithm; authentication-key-chain key-chain-name; } }
为 BGP 配置认证密钥更新机制时,不能使用认证密钥或密钥链提交 0.0.0.0/allow
语句。如果尝试此操作,CLI 将发出警告,并且提交将失败。