分类
协议

OSPF之Keychain认证

OSPF是目前应用最为广泛的IGP协议,运行OSPF路由协议的设备之间,为了确保报文的合法性、防止非法设备侵入、确保网络稳定,非常有必要配置认证机制。OSPF支持的认证方式包括接口认证和区域认证,在不同的认证方式下,又支持Simple、MD5、Hmac-MD5、Keychain等加密模式。本文就OSPF的Keychain加密模式做重点介绍。

运行OSPF路由协议的认证方式包括接口认证和区域认证,这两种认证方式都支持调用Keychain

接口认证:两两互联的OSPF设备之间,当一端启用认证时,另一端也必须配置且使用相同的认证方式、相同的加密模式。

区域认证:同属于一个区域内的所有OSPF设备,如果要启用认证,就必须配置且使用相同的认证方式、相同的加密模式。

如果两台OSPF设备(如R1、R2)既配置了区域认证(Area 0),也配置了接口认证(R1的G1、R2的G1),那么接口认证生效,区域认证不生效。


配置接口IP地址、启用OSPF路由协议

R1
system-view
sysname R1
interface GigabitEthernet 0/0/1
ip address 10.0.12.1 24
quit
ospf 1 router-id 1.1.1.1
area 0
network 10.0.12.1 0.0.0.0
quit
quit

R2
system-view
sysname R2
interface GigabitEthernet 0/0/1
ip address 10.0.12.2 24
interface GigabitEthernet 0/0/2
ip address 10.0.23.2 24
quit
ospf 1 router-id 2.2.2.2
area 0
network 10.0.12.2 0.0.0.0
area 1
network 10.0.23.2 0.0.0.0
quit
quit

R3
system-view
sysname R3
interface GigabitEthernet 0/0/2
ip address 10.0.23.3 24
quit
ospf 1 router-id 3.3.3.3
area 1
network 10.0.23.3 0.0.0.0
quit
quit

查看OSPF邻居关系

使用命令display ospf peer brief查看邻居关系
使用命令display ospf peer brief查看邻居关系

查看OSPF路由

使用命令display ospf routing查看OSPF路由
使用命令display ospf routing查看OSPF路由

OSPF支持的加密模式

接口认证方式下:

  • Null:Null表示的是一种验证模式,并不代表不配置任何验证。
  • Simple:简单验证模式,以绝对的秘钥值(如ieclub)来进行相互身份的校验。缺省情况下,Simple验证模式默认将秘钥值以密文存储在配置文件中。同时,使用Wireshark抓包时,可以在报文中看到明文的秘钥值。
  • MD5:MD5验证模式,MD5可以产生出一个16字节的Hash Value用于确保信息传输完整一致。MD5已经可以被破解。
  • Hmac-MD5:Hmac-MD5验证模式,可以理解为升级后的MD5。Hmac-MD5已经可以被破解。
  • Keychain:与以上几种加密模式相比,使用Keychain验证模式安全性最高。一组秘钥链(Keychain)最多可以配置64个Key-ID,每个Key-ID可以配置不同的工作时间段、不同的加密算法、不同的秘钥值。假设以(periodic daily)日周期循环为例,可以做到每22.5分钟动态更换一次加密算法及秘钥值(破解的前提是:你得在22.5分钟内准确知道像eHSZ!}^c~JN(<[Oqc=4cI,kYa63Vm8)+MN+!q3x#ms(“1nNL#C2D+$x7x’_n)H_T1QOx7#这样一串字符是采用什么算法加密的?然后再针对这种算法结合这组字符尝试破解)。

区域认证方式下:

  • Simple
  • MD5
  • Hmac-MD5
  • Keychain

Simple加密模式(以接口认证为例)

R2
interface GigabitEthernet 0/0/2
ospf authentication-mode simple cipher iEcLuB

R3
interface GigabitEthernet 0/0/2
ospf authentication-mode simple cipher iEcLuB

秘钥值字段长度为1至8个字符(如上面的iEcLuB),当然iEcLuB这个秘钥值存储在配置文件中是被加密存储的,因为我添加了cipher这个关键词。


MD5加密模式(以接口认证为例)

R2
interface GigabitEthernet 0/0/2
ospf authentication-mode md5 5 iEcLuB.NeT

R3
interface GigabitEthernet 0/0/2
ospf authentication-mode md5 5 iEcLuB.NeT

key-id 5 以及 秘钥值 iEcLuB.NeT,两端设备必须一致。
秘钥值字段长度为1至255个字符(如上面的iEcLuB.NeT),当然iEcLuB.NeT这个秘钥值存储在配置文件中也是被加密存储的,因为我也添加了cipher这个关键词。如果我使用plain替代cipher,将会以明文存储秘钥值在配置文件中,这非常不安全。


Hmac-MD5加密模式(以接口认证为例)

R2
interface GigabitEthernet 0/0/2
ospf authentication-mode hmac-md5 9 cipher iEcLuB.nEt

R3
interface GigabitEthernet 0/0/2
ospf authentication-mode hmac-md5 9 cipher iEcLuB.nEt

key-id 9 以及 秘钥值 iEcLuB.nEt,两端设备必须一致。
秘钥值字段长度为1至255个字符(如上面的iEcLuB.nEt),当然iEcLuB.nEt这个秘钥值存储在配置文件中还是会被加密存储的,因为我还是添加了cipher这个关键词。


Keychain加密模式(两种时间模式)

绝对时间模式:UTC时间

R1、R2
keychain ospf-area-auth-1 mode absolute
receive-tolerance 30
key-id 0
algorithm hmac-md5
key-string cipher iEcLuB2011
send-time utc 00:00 2020-11-20 to 23:59 2021-11-30
receive-time utc 00:00 2020-11-01 to 23:59 2021-11-30
key-id 1
algorithm md5
key-string cipher iEcLuB2012
send-time utc 00:00 2020-12-01 to 23:59 2021-12-31
receive-time utc 00:00 2020-12-01 to 23:59 2021-12-31
key-id 2
algorithm hmac-md5
key-string cipher iEcLuB2101
send-time utc 00:00 2021-01-01 to 23:59 2021-03-31
receive-time utc 00:00 2021-01-01 to 23:59 2021-03-31

区域认证调用(所属区域内OSPF路由器都要调用)
R1、R2
ospf 1
area 0
authentication-mode keychain ospf-area-auth-1
quit
quit

再次查看邻居关系

R1上使用命令display ospf peer brief查看邻居关系
R1上使用命令display ospf peer brief查看邻居关系

在Area 0骨干区域开启抓包

在Area 0骨干区域开启抓包
在Area 0骨干区域开启抓包,可以看到此DD报文是经过认证加密的,当前Key-ID 0被Active

查看Keychain中Key被Active情况

使用命令display keychain ospf-area-auth-1 显示Keychain信息
使用命令display keychain ospf-area-auth-1 显示Keychain信息
使用命令display keychain ospf-area-auth-1 显示Key-ID信息
使用命令display keychain ospf-area-auth-1 显示Key-ID信息

周期时间模式:日/周/月/年

R2、R3
keychain ospf-interface-auth-1 mode periodic daily
receive-tolerance 30
key-id 61
algorithm md5
key-string cipher iecluB20201120
send-time daily 00:00 to 07:59
receive-time daily 00:00 to 07:59
key-id 62
algorithm hmac-md5
key-string cipher ieCluB20201120
send-time daily 08:00 to 16:59
receive-time daily 08:00 to 16:59
key-id 63
algorithm md5
key-string cipher iECluB20201120
send-time daily 17:00 to 23:59
receive-time daily 17:00 to 23:59

接口认证调用(互联接口上两端都要相同配置并调用)
R2、R3

interface GigabitEthernet 0/0/2
ospf authentication-mode keychain ospf-interface-auth-1

再次查看邻居关系

在R3使用命令display ospf peer brief查看邻居关系
在R3使用命令display ospf peer brief查看邻居关系

在Area 1区域开启抓包

在R2与R3相连接口上开启抓包
在R2与R3相连接口上抓包,可以看到此LSAck报文是经过加密的,当前Key-ID 63被Active

查看Keychain中Key被Active情况

使用命令display keychain ospf-interface-auth-1查看Keychain信息
使用命令display keychain ospf-interface-auth-1查看Keychain信息
使用命令display keychain ospf-interface-auth-1查看Key-ID信息
使用命令display keychain ospf-interface-auth-1查看Key-ID信息

后记

关于receive-tolerance

由于没有查询到确切的资料佐证,以下是我个人关于receive-tolerance这条命令的理解:

由于网络环境或者通信方时间未同步等因素影响,设备发送的报文可能存在时间差,使接收端在非活跃时间段收到报文。接收端处于非活跃状态,没有合适的认证算法和密钥来解密报文,设备将会丢弃报文。为了解决该问题,用户可以配置接收的容忍时间,使接收时间的起始时间和结束时间同时增加相应的时间,保证使接收端能处理发送端发送的所有报文,保证协议报文的正常处理。
Keychain中的send-time和receive-time都是精确到1分钟,那么我理解为如果两台设备R1、R2的本地时钟分别为21:28:01和21:28:59,在Keychain验证中将统一视为21:28:00。但如果两台设备R1、R2的本地时钟分别为21:28:31和21:29:30,将可能因时间差出现校验错误。
receive-tolerance命令用来在Keychain中配置key的接收容忍时间,例如:receive-tolerance 5表示配置接收容忍时间为5分钟,即允许发送端与接收端存在5分钟的时间差。receive-tolerance的可选参数为infinite或1至14400分钟,由于Keychain的send-time和receive-time本身是精确到1分钟,因此建议receive-tolerance至少配置2分钟。

receive-tolerance用白话可以理解为:允许迟到时间。

关于default send-key-id

Keychain通过定期动态更改认证算法和密钥的方法,保证协议报文传输的安全性,同时能减少人工更改算法和密钥的工作量。每个Keychain中由多个key组成,每一key有自己的发送和接收时间,不同的key在指定的时间内活跃。
当Keychain中不存在发送key,或者某个时间段没有活跃的发送key时,Keychain将不能对协议报文进行认证和加密处理,导致应用协议因认证不通过而断开连接。配置缺省的发送key可以保证在没有活跃的key时,Keychain采用该key对协议报文进行认证和加密,从而保证协议报文的正常通信。
一个Keychain中只能存在一个缺省的发送key。当指定的缺省发送key是一个已经存在的key时,缺省发送key直接继承该key的认证加密算法和密钥。当指定的缺省发送key是一个新创建的key时,需要同时配置key的认证加密算法和密钥。

default send-key用白话可以理解为:备胎。

关于algorithm

各个应用程序支持的算法有不同,具体情况如下:

RIP:支持MD5和simple;
BGP和BGP4+:支持MD5;
IS-IS:支持MD5和simple;
OSPF:支持MD5和HMAC-MD5;
MSDP:支持MD5;
MPLS的LDP:支持MD5;
MPLS的TE支持:HMAC-MD5。

例如keychain中创建了3个Key,其中有一个Key使用了Sha-1模式加密,那么在这个Key被Active的时候,OSPF链路将断开!因为OSPF不支持使用Sha-1模式加密的Keychain。举例:在一个还没有通电的工地上是无法使用指纹锁的,因为没有电来驱动指纹识别器以及控制电磁锁的开关。

养成习惯

无论使用何种加密模式,在使能设备加密认证前,请配置设备的时区和时钟并确保一致。尤其是使用Keychain认证时,务必确保参与认证的设备的时区和时钟(完全)一致。由于这篇文章的主题是OSPF的交互认证,这里就不探讨NTP的配置了。


原创不易,转载请注明出处。
原标题:OSPF之Keychain认证
原文章链接:https://ieclub.net/?p=1585

发表评论

电子邮件地址不会被公开。 必填项已用*标注