07-IPsec配置
本章节下载: 07-IPsec配置 (500.02 KB)
目 录
1.3.13 设置IPsec隧道模式下封装后外层IP头的DF位
1.6.1 采用手工方式建立保护IPv4报文的IPsec隧道
1.6.2 采用IKE方式建立保护IPv4报文的IPsec隧道
2.10 配置针对无效IPsec SPI的IKE SA恢复功能
2.15.2 未正确引用IKE提议或IKE keychain导致IKE SA协商失败
· 设备运行于FIPS模式时,本特性部分配置相对于非FIPS模式有所变化,具体差异请见本文相关描述。有关FIPS模式的详细介绍请参见“安全配置指导”中的“FIPS”。
· 设备通过ACL来识别由IPsec隧道保护的流量时,受保护的流量只能是源地址或目的地址为本机的报文。IPsec不会对设备转发的报文进行保护。
· IPsec功能中所指的“接口”为三层接口,包括VLAN接口、三层以太网接口等。三层以太网接口是指在以太网接口视图下通过port link-mode route命令切换为三层模式的以太网接口,有关以太网接口模式切换的操作,请参见“二层技术-以太网交换配置指导”中的“以太网接口配置”。
若在接口上同时配置IPsec和QoS,同一个IPsec SA保护的数据流如果被QoS分类进入不同队列,会导致部分报文发送乱序。由于IPsec具有抗重放功能,IPsec入方向上对于抗重放窗口之外的报文会进行丢弃,从而导致丢包现象。因此当IPsec与QoS配合使用时,必须保证IPsec分类与QoS分类规则配置保持一致。IPsec的分类规则完全由引用的ACL规则确定,QoS分类规则的配置请参考“ACL和QoS配置指导”中的“QoS配置方式”。
IPsec(IP Security,IP安全)是IETF制定的三层隧道加密协议,它为互联网上传输的数据提供了高质量的、基于密码学的安全保证,是一种传统的实现三层VPN(Virtual Private Network,虚拟专用网络)的安全技术。IPsec通过在特定通信方之间(例如两个安全网关之间)建立“通道”,来保护通信方之间传输的用户数据,该通道通常称为IPsec隧道。
IPsec协议不是一个单独的协议,它为IP层上的网络数据安全提供了一整套安全体系结构,包括安全协议AH(Authentication Header,认证头)和ESP(Encapsulating Security Payload,封装安全载荷)、IKE(Internet Key Exchange,互联网密钥交换)以及用于网络认证及加密的一些算法等。其中,AH协议和ESP协议用于提供安全服务,IKE协议用于密钥交换。关于IKE的详细介绍请参见“安全配置指导”中的“IKE”,本节不做介绍。
IPsec提供了两大安全机制:认证和加密。认证机制使IP通信的数据接收方能够确认数据发送方的真实身份以及数据在传输过程中是否遭篡改。加密机制通过对数据进行加密运算来保证数据的机密性,以防数据在传输过程中被窃听。
IPsec为IP层的数据报文提供的安全服务具体包括以下几种:
· 数据机密性(Confidentiality):发送方通过网络传输用户报文前,IPsec对报文进行加密。
· 数据完整性(Data Integrity):接收方对发送方发送来的IPsec报文进行认证,以确保数据在传输过程中没有被篡改。
· 数据来源认证(Data Authentication):接收方认证发送IPsec报文的发送端是否合法。
· 抗重放(Anti-Replay):接收方可检测并拒绝接收过时或重复的IPsec报文。
IPsec具有以下优点:
· 支持IKE(Internet Key Exchange,互联网密钥交换),可实现密钥的自动协商功能,减少了密钥协商的开销。可以通过IKE建立和维护SA(Security Association,安全联盟),简化了IPsec的使用和管理。
· 所有使用IP协议进行数据传输的应用系统和服务都可以使用IPsec,而不必对这些应用系统和服务本身做任何修改。
· 对数据的加密是以数据包为单位的,而不是以整个数据流为单位,这不仅灵活而且有助于进一步提高IP数据包的安全性,可以有效防范网络攻击。
IPsec包括AH和ESP两种安全协议,它们定义了对IP报文的封装格式以及可提供的安全服务。
· AH协议(IP协议号为51)定义了AH头在IP报文中的封装格式,如图1-3所示。AH可提供数据来源认证、数据完整性校验和抗重放功能,它能保护报文免受篡改,但不能防止报文被窃听,适合用于传输非机密数据。AH使用的认证算法有HMAC-MD5和HMAC-SHA1。
· ESP协议(IP协议号为50)定义了ESP头和ESP尾在IP报文中的封装格式,如图1-3所示。ESP可提供数据加密、数据源认证、数据完整性校验和抗重放功能。与AH不同的是,ESP将需要保护的用户数据进行加密后再封装到IP包中,以保证数据的机密性。ESP使用的加密算法有DES、3DES、AES等。同时,作为可选项,ESP还可以提供认证服务,使用的认证算法有HMAC-MD5和HMAC-SHA1。虽然AH和ESP都可以提供认证服务,但是AH提供的认证服务要强于ESP。
在实际使用过程中,可以根据具体的安全需求同时使用这两种协议或仅使用其中的一种。设备支持的AH和ESP联合使用的方式为:先对报文进行ESP封装,再对报文进行AH封装。
IPsec支持两种封装模式:
· 传输模式(Transport Mode)
该模式下的安全协议主要用于保护上层协议报文,仅传输层数据被用来计算安全协议头,生成的安全协议头以及加密的用户数据(仅针对ESP封装)被放置在原IP头后面。若要求端到端的安全保障,即数据包进行安全传输的起点和终点为数据包的实际起点和终点时,才能使用传输模式。如图1-1所示,通常传输模式用于保护两台主机之间的数据。
· 隧道模式(Tunnel Mode)
该模式下的安全协议用于保护整个IP数据包,用户的整个IP数据包都被用来计算安全协议头,生成的安全协议头以及加密的用户数据(仅针对ESP封装)被封装在一个新的IP数据包中。这种模式下,封装后的IP数据包有内外两个IP头,其中的内部IP头为原有的IP头,外部IP头由提供安全服务的设备添加。在安全保护由设备提供的情况下,数据包进行安全传输的起点或终点不为数据包的实际起点和终点时(例如安全网关后的主机),则必须使用隧道模式。如图1-2所示,通常隧道模式用于保护两个安全网关之间的数据。
不同的安全协议及组合在隧道和传输模式下的数据封装形式如图1-3所示。
SA(Security Association,安全联盟)是IPsec的基础,也是IPsec的本质。IPsec在两个端点之间提供安全通信,这类端点被称为IPsec对等体。SA是IPsec对等体间对某些要素的约定,例如,使用的安全协议(AH、ESP或两者结合使用)、协议报文的封装模式(传输模式或隧道模式)、认证算法(HMAC-MD5或HMAC-SHA1)、加密算法(DES、3DES或AES)、特定流中保护数据的共享密钥以及密钥的生存时间等。
SA是单向的,在两个对等体之间的双向通信,最少需要两个SA来分别对两个方向的数据流进行安全保护。同时,如果两个对等体希望同时使用AH和ESP来进行安全通信,则每个对等体都会针对每一种协议来构建一个独立的SA。
SA由一个三元组来唯一标识,这个三元组包括SPI(Security Parameter Index,安全参数索引)、目的IP地址和安全协议号。其中,SPI是用于标识SA的一个32比特的数值,它在AH和ESP头中传输。
SA有手工配置和IKE自动协商两种生成方式:
· 手工方式:通过命令行配置SA的所有信息。该方式的配置比较复杂,而且不支持一些高级特性(例如定时更新密钥),优点是可以不依赖IKE而单独实现IPsec功能。该方式主要用于需要安全通信的对等体数量较少,或小型静态的组网环境中。
· IKE自动协商方式:对等体之间通过IKE协议自动协商生成SA,并由IKE协议维护该SA。该方式的配置相对比较简单,扩展能力强。在中、大型的动态网络环境中,推荐使用IKE自动协商建立SA。
手工方式建立的SA永不老化。通过IKE协商建立的SA具有生存时间,该类型的SA有两种形式的生存时间:
· 基于时间的生存时间,定义了一个SA从建立到失效的时间;
· 基于流量的生存时间,定义了一个SA允许处理的最大流量。
可同时存在基于时间和基于流量两种方式的SA生存时间,只要SA的生存时间到达指定的时间或流量时,该SA就会失效。SA失效前,IKE将为IPsec对等体协商建立新的SA,这样,在旧的SA失效前新的SA就已经准备好。在新的SA开始协商而没有协商好之前,使用当前旧的SA保护通信。一旦协商出新的SA,立即采用新的SA保护通信。
IPsec使用的认证算法主要是通过杂凑函数实现的。杂凑函数是一种能够接受任意长度的消息输入,并产生固定长度输出的算法,该算法的输出称为消息摘要。IPsec对等体双方都会计算一个摘要,接收方将发送方的摘要与本地的摘要进行比较,如果二者相同,则表示收到的IPsec报文是完整未经篡改的,以及发送方身份合法。目前,IPsec强制使用基于HMAC(Hash-based Message Authentication Code,基于散列的消息鉴别码)的认证算法,包括HMAC-MD5和HMAC-SHA1。其中,HMAC-MD5算法的计算速度快,而HMAC-SHA1算法的安全强度高。
IPsec使用的加密算法属于对称密钥系统,这类算法使用相同的密钥对数据进行加密和解密。目前设备的IPsec使用三种加密算法:
· DES:使用56比特的密钥对一个64比特的明文块进行加密。
· 3DES:使用三个56比特(共168比特)的密钥对明文块进行加密。
· AES:使用128比特、192比特或256比特的密钥对明文块进行加密。
这三个加密算法的安全性由高到低依次是:AES、3DES、DES,安全性高的加密算法实现机制复杂,运算速度慢。
IPsec的认证和加/解密处理在设备上既可以通过软件实现,也可以通过硬件加密引擎实现。通过软件实现的IPsec,由于复杂的加密/解密、认证算法会占用大量的CPU资源,将会影响设备整体处理效率;通过硬件加密引擎实现的IPsec,由于复杂的算法处理由硬件完成,因此可以提高设备的处理效率。
若设备支持通过硬件加密引擎进行认证和加/解密处理,则设备会首先将需要处理的数据发送给硬件加密引擎,由硬件加密引擎对数据进行处理之后再发送回设备,最后由设备进行转发。
关于加密引擎的详细介绍请参见“安全配置指导”中的“加密引擎”。
要实现建立IPsec隧道为两个IPsec对等体之间的数据提供安全保护,首先要配置相应的安全策略,通过安全策略定义哪些报文属于要保护的范围,并定义用于保护这些报文的安全参数。之后,将安全策略应用于设备的某接口上。当IPsec对等体根据安全策略识别出要保护的报文时,就建立一个相应的IPsec隧道并将其通过该隧道发送给对端。此处的IPsec隧道可以是提前手工配置或者由报文触发IKE协商建立。这些IPsec隧道实际上就是两个IPsec对等体之间建立的IPsec SA。由于IPsec SA是单向的,因此出方向的报文由出方向的SA保护,入方向的报文由入方向的SA来保护。对端接收到报文后,首先对报文进行分析、识别,然后根据预先设定的安全策略对报文进行不同的处理(丢弃,解封装,或直接转发)。
基于接口的IPsec隧道的建立方式通过将IPsec安全策略应用到设备的接口上,使得设备对通过该接口收发的数据报文依据接口上应用的安全策略进行IPsec保护。目前,在基于接口的IPsec实现方式下仅支持基于ACL建立IPsec隧道。
基于ACL方式下,需要通过定义ACL来指定两个对等体之间需要被保护的数据流的范围,并需要将引用了该ACL的IPsec安全策略应用到相应的接口上。只要接口发送的报文与该接口上应用的IPsec安全策略中的ACL的permit规则匹配,就会受到出方向IPsec SA的保护并进行封装处理。接口接收到目的地址是本机的IPsec报文时,首先根据报文头里携带的SPI查找本地的入方向IPsec SA,由对应的入方向IPsec SA进行解封装处理。解封装后的IP报文若能与ACL的permit规则匹配上则采取后续处理,否则被丢弃。
目前,设备支持的数据流的保护方式包括以下三种:
· 标准方式:一条IPsec隧道保护一条数据流。ACL中的每一个规则对应的数据流分别由一条单独创建的IPsec隧道来保护。缺省采用该方式。
· 聚合方式:一条IPsec隧道保护ACL中定义的所有数据流。ACL中的所有规则对应的数据流只会由一条创建的IPsec隧道来保护。该方式仅用于和老版本的设备互通。
· 主机方式:一条IPsec隧道保护一条主机到主机的数据流。ACL中的每一个规则对应的不同主机之间的数据流分别由一条单独创建的IPsec隧道来保护。这种方式下,受保护的网段之间存在多条数据流的情况下,将会消耗更多的系统资源。
与IPsec相关的协议规范有:
· RFC 2401:Security Architecture for the Internet Protocol
· RFC 2402:IP Authentication Header
· RFC 2406:IP Encapsulating Security Payload
· RFC 4552:Authentication/Confidentiality for OSPFv3
基于ACL方式建立IPsec隧道是指由ACL来指定要保护的数据流范围,利用ACL的丰富配置功能,结合实际的组网环境灵活制定IPsec安全策略。该方式的配置方法为:通过配置IPsec安全策略并将IPsec安全策略绑定在接口上来完成IPsec的配置。具体配置请参见“1.3 基于ACL建立IPsec隧道”。在IPv4网络和IPv6网络中,基于ACL建立IPsec隧道的配置步骤相同。
目前,设备通过ACL来识别由IPsec隧道保护的流量时,受保护的流量只能是源地址或目的地址为本机的报文。例如:可配置IPsec隧道对设备发送给日志服务器的日志信息进行保护。ACL中定义的匹配转发流量的规则不生效,IPsec不会对设备转发的任何数据流和语音流进行保护。关于IPsec中ACL规则的定义请参见“1.3.3 配置ACL”。
通常情况下,由于IKE协议采用UDP的500端口进行通信,IPsec的AH和ESP协议分别使用51或50号协议来工作,因此为保障IKE和IPsec的正常运行,需要确保应用了IKE和IPsec配置的接口上没有禁止掉属于以上端口和协议的流量。
基于ACL建立IPsec隧道的基本配置思路如下:
(1) 配置ACL:指定要保护的数据流。IPsec不需要通过在ACL规则中指定VPN参数来保护VPN间的数据流。
(2) 配置IPsec安全提议:指定安全协议、认证算法、加密算法、封装模式等。
(3) 配置IPsec安全策略:一个IPsec安全策略是若干具有相同名字、不同顺序号的IPsec安全策略表项的集合。在同一个IPsec安全策略中,顺序号越小的IPsec安全策略表项优先级越高。IPsec安全策略将要保护的数据流和IPsec安全提议进行了关联(即定义对何种数据流实施何种保护),并指定了IPsec SA的生成方式(手工方式、IKE协商方式)、对等体IP地址(即保护路径的起点或终点)、所需要的密钥和IPsec SA的生存时间等。
(4) 在接口上应用IPsec安全策略。
表1-1 基于ACL建立IPsec隧道配置任务简介
配置任务 |
说明 |
详细配置 |
|
配置ACL |
必选 |
||
配置IPsec安全提议 |
必选 |
||
配置IPsec安全策略 |
配置手工方式的安全策略 |
二者必选其一 |
|
配置IKE协商方式的安全策略 |
|||
在接口上应用IPsec安全策略 |
必选 |
||
配置解封装后IPsec报文的ACL检查功能 |
可选 |
||
配置IPsec抗重放功能 |
可选 |
||
配置共享源接口安全策略 |
可选 |
||
配置QoS预分类功能 |
可选 |
||
配置IPsec报文日志记录功能 |
可选 |
||
设置IPsec隧道模式下封装后外层IP头的DF位 |
可选 |
||
配置IPsec告警功能 |
可选 |
IPsec通过配置ACL来定义需要保护的数据流。在IPsec应用中,ACL规则中的permit关键字表示与之匹配的流量需要被IPsec保护,而deny关键字则表示与之匹配的流量不需要保护。一个ACL中可以配置多条规则,首个与数据流匹配上的规则决定了对该数据流的处理方式。
在IPsec安全策略中定义的ACL既可用于过滤接口入方向数据流,也可用于过滤接口出方向数据流。
· 设备出入方向的数据流都使用IPsec安全策略中定义的ACL规则来做匹配依据。具体是,出方向的数据流正向匹配ACL规则,入方向的数据流反向匹配ACL规则。
· 在出方向上,与ACL的permit规则匹配的报文将被IPsec保护,未匹配上任何规则或与deny规则匹配上的报文将不被IPsec保护。
· 在入方向上,与ACL的permit规则匹配上的未被IPsec保护的报文将被丢弃;目的地址为本机的被IPsec保护的报文将被进行解封装处理。缺省情况下解封装后的IP报文若能与ACL的permit规则匹配上则采取后续处理,否则被丢弃。若解封装后IPsec报文的ACL检查功能处于关闭状态,则解封装后的IP报文不与ACL匹配,直接进行后续处理。
需要注意的是:
· 仅对确实需要IPsec保护的数据流配置permit规则,避免盲目地使用关键字any。这是因为,在一个permit规则中使用any关键字就代表所有指定范围上出方向的流量都需要被IPsec保护,所有对应入方向上被IPsec保护的报文将被接收并处理,入方向上未被IPsec保护的报文都将被丢弃。这种情况下,一旦入方向收到的某流量是未被IPsec保护的,那么该流量就会被丢弃,这会造成一些本不需要IPsec处理的流量丢失,影响正常的业务传输。
· 当一个安全策略下有多条优先级不同的安全策略表项时,合理使用deny规则。避免本应该与优先级较低的安全策略表项的ACL permit规则匹配而被IPsec保护的出方向报文,因为先与优先级较高的安全策略表项的ACL deny规则匹配上,而没有被IPsec保护,继而在接收端被丢弃。
为保证IPsec对等体上能够成功建立SA,建议两端设备上用于IPsec的ACL配置为镜像对称,即保证两端定义的要保护的数据流范围的源和目的尽量对称。
IPsec安全提议是IPsec安全策略的一个组成部分,它用于定义IPsec需要使用的安全协议、加密/认证算法以及封装模式,为IPsec协商SA提供各种安全参数。
可对IPsec安全提议进行修改,但对已协商成功的IPsec SA,新修改的安全提议并不起作用,即仍然使用原来的安全提议,只有新协商的SA使用新的安全提议。若要使修改对已协商成功的IPsec SA生效,则需要执行reset ipsec sa命令。
FIPS模式下,若采用了ESP安全协议,则必须同时配置ESP加密算法和ESP认证算法。
表1-2 配置IPsec安全提议
操作 |
命令 |
说明 |
|
进入系统视图 |
system-view |
- |
|
创建IPsec安全提议,并进入IPsec安全提议视图 |
ipsec transform-set transform-set-name |
缺省情况下,没有任何IPsec安全提议存在 |
|
配置IPsec安全提议采用的安全协议 |
protocol { ah | ah-esp | esp } |
缺省情况下,采用ESP安全协议 |
|
配置安全算法 |
配置ESP协议采用的加密算法 |
非FIPS模式下: esp encryption-algorithm { 3des-cbc | aes-cbc-128 | aes-cbc-192 | aes-cbc-256 | des-cbc | null } * FIPS模式下: esp encryption-algorithm { aes-cbc-128 | aes-cbc-192 | aes-cbc-256 } * |
只有采用ESP协议(esp或ah-esp)时必选 缺省情况下,ESP协议没有采用任何加密算法 此命令可以同时配置多个加密算法,算法优先级以配置顺序为准 |
配置ESP协议采用的认证算法 |
非FIPS模式下: esp authentication-algorithm { md5 | sha1 } * FIPS模式下: esp authentication-algorithm sha1 |
只有采用ESP协议(esp或ah-esp)时必选 缺省情况下,ESP协议没有采用任何认证算法 此命令可以同时配置多个加密算法,算法优先级以配置顺序为准 |
|
配置AH协议采用的认证算法 |
非FIPS模式下: ah authentication-algorithm { md5 | sha1 } * FIPS模式下: ah authentication-algorithm sha1 |
只有采用AH(ah或ah-esp)协议时必选 缺省情况下,AH协议没有采用任何认证算法 此命令可以同时配置多个加密算法,算法优先级以配置顺序为准 |
|
配置安全协议对IP报文的封装模式 |
encapsulation-mode { transport | tunnel } |
缺省情况下,安全协议采用隧道模式对IP报文进行封装 传输模式必须应用于数据流的源地址和目的地址与IPsec隧道两端地址相同的情况下 |
|
(可选)配置使用IPsec安全策略发起协商时使用PFS特性 |
非FIPS模式下: pfs { dh-group1 | dh-group2 | dh-group5 | dh-group14 | dh-group24 } FIPS模式下: pfs dh-group14 |
缺省情况下,使用IPsec安全策略发起协商时不使用PFS特性 PFS(Perfect Forward Secrecy,完善的前向安全性)特性请参见“安全配置指导”中的“IKE” 发起方的PFS强度必须大于或等于响应方的PFS强度,否则协商会失败。不配置PFS特性的一端,按照对端的PFS特性要求进行IKE协商 |
为保证SA能够成功生成,IPsec隧道两端的配置必须符合以下要求:
· IPsec安全策略引用的IPsec安全提议应采用相同的安全协议、加密/认证算法和报文封装模式。
· 当前端点的IPv4对端地址应与对端应用IPsec安全策略的接口的主IPv4地址保持一致;当前端点的IPv6对端地址应与对端应用IPsec安全策略的接口的第一个IPv6地址保持一致。
· 应分别设置inbound和outbound两个方向的IPsec SA参数,且保证每一个方向上的IPsec SA的唯一性:对于出方向IPsec SA,必须保证三元组(对端IP地址、安全协议、SPI)唯一;对于入方向IPsec SA,必须保证SPI唯一。
· 本端和对端IPsec SA的SPI及密钥必须是完全匹配的。即,本端的入方向IPsec SA的SPI及密钥必须和对端的出方向IPsec SA的SPI及密钥相同;本端的出方向IPsec SA的SPI及密钥必须和对端的入方向IPsec SA的SPI及密钥相同。
· 两端IPsec SA使用的密钥应当以相同的方式输入,即如果一端以字符串方式输入密钥,另一端必须也以字符串方式输入密钥。
操作 |
命令 |
说明 |
|
进入系统视图 |
system-view |
- |
|
创建一条手工方式的IPsec安全策略,并进入IPsec安全策略视图 |
ipsec { ipv6-policy | policy } policy-name seq-number manual |
缺省情况下,不存在任何IPsec安全策略 |
|
(可选)配置IPsec安全策略的描述信息 |
description text |
缺省情况下,无描述信息 |
|
指定IPsec安全策略引用的ACL |
security acl [ ipv6 ] { acl-number | name acl-name } |
缺省情况下,IPsec安全策略没有引用任何ACL 一条安全策略只能引用一个ACL |
|
指定IPsec安全策略所引用的安全提议 |
transform-set transform-set-name |
缺省情况下,IPsec安全策略没有引用任何IPsec安全提议 一条手工方式的IPsec安全策略只能引用一个安全提议 |
|
指定IPsec隧道的对端IP地址 |
remote-address { ipv4-address | ipv6 ipv6-address } |
缺省情况下,未指定IPsec隧道的对端地址 IPsec隧道的本端IPv4地址为应用安全策略的接口的主IP地址;本端IPv6地址为应用安全策略的接口的第一个IPv6地址 |
|
配置IPsec SA的入方向SPI |
sa spi inbound { ah | esp } spi-number |
缺省情况下,不存在IPsec SA的入方向SPI |
|
配置IPsec SA的出方向SPI |
sa spi outbound { ah | esp } spi-number |
缺省情况下,不存在IPsec SA的出方向SPI |
|
配置IPsec SA使用的密钥 |
配置AH协议的认证密钥(以16进制方式输入) |
sa hex-key authentication { inbound | outbound } ah { cipher | simple } key-value |
缺省情况下,未配置IPsec SA使用的密钥 根据本安全策略引用的安全提议中指定的安全协议,配置AH协议或ESP协议的密钥,或者两者都配置 对于ESP协议,以字符串方式输入密钥时,系统会自动地同时生成认证算法的密钥和加密算法的密钥 如果先后以不同的方式输入了密钥,则最后设定的密钥有效 |
配置AH协议的认证密钥(以字符串方式输入) |
sa string-key { inbound | outbound } ah { cipher | simple } key-value |
||
配置ESP协议的认证密钥和加密密钥(以字符串方式输入) |
sa string-key { inbound | outbound } esp { cipher | simple } key-value |
||
配置ESP协议的认证密钥(以16进制方式输入) |
sa hex-key authentication { inbound | outbound } esp { cipher | simple } key-value |
||
配置ESP协议的加密密钥(以16进制方式输入) |
sa hex-key encryption { inbound | outbound } esp { cipher | simple } key-value |
IKE协商方式的IPsec安全策略配置方式为直接方式,即在安全策略视图中定义需要协商的各参数。
IPsec隧道两端的配置必须符合以下要求:
· IPsec安全策略引用的IPsec安全提议中应包含具有相同的安全协议、认证/加密算法和报文封装模式的IPsec安全提议。
· IPsec安全策略引用的IKE profile参数相匹配。
· 一条IKE协商方式的IPsec安全策略中最多可以引用六个IPsec安全提议。IKE协商过程中,IKE将会在隧道两端配置的IPsec安全策略中查找能够完全匹配的IPsec安全提议。如果IKE在两端找不到完全匹配的IPsec安全提议,则SA不能协商成功,需要被保护的报文将被丢弃。
· IKE协商的发起方必须配置IPsec隧道的对端地址,响应方可选配,且当前端点的对端地址与对端的本端地址应保持一致。
对于IKE协商建立的IPsec SA,遵循以下原则:
· 采用隧道两端设置的IPsec SA生存时间中较小者。
· 可同时存在基于时间和基于流量两种方式的IPsec SA生存时间,只要到达指定的时间或指定的流量,IPsec SA就会老化。
表1-4 直接配置IKE协商方式的IPsec安全策略
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建一条IKE协商方式的IPsec安全策略,并进入IPsec安全策略视图 |
ipsec { ipv6-policy | policy } policy-name seq-number isakmp |
缺省情况下,不存在任何IPsec安全策略 |
(可选)配置IPsec安全策略的描述信息 |
description text |
缺省情况下,无描述信息 |
指定IPsec安全策略引用的ACL |
security acl [ ipv6 ] { acl-number | name acl-name } [ aggregation | per-host ] |
缺省情况下,IPsec安全策略没有指定ACL 一条IPsec安全策略只能引用一个ACL |
指定IPsec安全策略引用的IPsec安全提议 |
transform-set transform-set-name&<1-6> |
缺省情况下,IPsec安全策略没有引用任何IPsec安全提议 |
指定IPsec安全策略引用的IKE profile |
ike-profile profile-name |
缺省情况下,IPsec安全策略没有引用任何IKE profile。若系统视图下配置了IKE profile,则使用系统视图下配置的IKE profile进行性协商,否则使用全局的IKE参数进行协商 只能引用一个IKE profile,且不能引用已经被其它IPsec安全策略引用的IKE profile IKE profile的相关配置请参见“安全配置指导”中的“IKE” |
指定IPsec隧道的本端IP地址 |
local-address { ipv4-address | ipv6 ipv6-address } |
缺省情况下,IPsec隧道的本端IPv4地址为应用IPsec安全策略的接口的主IPv4地址,本端IPv6地址为应用IPsec安全策略的接口的第一个IPv6地址 此处指定的IPsec隧道本端IP地址必须与IKE使用的标识本端身份的IP地址一致 |
指定IPsec隧道的对端IP地址 |
remote-address { [ ipv6 ] host-name | ipv4-address | ipv6 ipv6-address } |
缺省情况下,未指定IPsec隧道的对端IP地址 |
配置IPsec SA的生存时间 |
sa duration { time-based seconds | traffic-based kilobytes } |
缺省情况下,IPsec安全策略下的IPsec SA生存时间为当前全局的IPsec SA生存时间 |
(可选)配置IPsec SA的空闲超时时间 |
sa idle-time seconds |
缺省情况下,IPsec安全策略下的IPsec SA空闲超时时间为当前全局的IPsec SA空闲超时时间 |
退回系统视图 |
quit |
- |
配置全局的IPsec SA生存时间 |
ipsec sa global-duration { time-based seconds | traffic-based kilobytes } |
缺省情况下,IPsec SA基于时间的生存时间为3600秒,基于流量的生存时间为1843200千字节 |
(可选)开启全局的IPsec SA空闲超时功能,并配置全局IPsec SA空闲超时时间 |
ipsec sa idle-time seconds |
缺省情况下,全局的IPsec SA空闲超时功能处于关闭状态 |
为使定义的IPsec SA生效,应在每个要加密的数据流和要解密的数据流所在接口上应用一个IPsec安全策略,以对数据进行保护。当取消IPsec安全策略在接口上的应用后,此接口便不再具有IPsec的安全保护功能。
当从一个接口发送数据时,接口将按照顺序号从小到大的顺序逐一匹配引用的IPsec安全策略中的每一条安全策略表项。如果数据匹配上了某一条安全策略表项引用的ACL,则停止匹配,并对其使用当前这条安全策略表项进行处理,即根据已经建立的IPsec SA或者触发IKE协商生成的IPsec SA对报文进行封装处理;如果数据与所有安全策略表项引用的ACL都不匹配,则直接被正常转发,IPsec不对数据加以保护。
应用了IPsec安全策略的接口收到数据报文时,对于目的地址是本机的IPsec报文,根据报文头里携带的SPI查找本地的IPsec SA,并根据匹配的IPsec SA对报文进行解封装处理;对于那些本应该被IPsec保护但未被保护的报文进行丢弃。
表1-5 在接口上应用IPsec安全策略
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入接口视图 |
interface interface-type interface-number |
- |
应用IPsec安全策略 |
ipsec apply { policy | ipv6-policy } policy-name |
缺省情况下,接口上没有应用任何IPsec安全策略 一个接口只能应用一个IPsec安全策略。IKE方式的IPsec安全策略可以应用到多个接口上,手工方式的IPsec安全策略只能应用到一个接口上 |
在隧道模式下,接口入方向上解封装的IPsec报文的内部IP头有可能不在当前IPsec安全策略引用的ACL的保护范围内,如网络中一些恶意伪造的攻击报文就可能有此问题,所以设备需要重新检查解封装后的报文的IP头是否在ACL保护范围内。使能该功能后可以保证ACL检查不通过的报文被丢弃,从而提高网络安全性。
表1-6 配置解封装后IPsec报文的ACL检查功能
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
开启解封装后IPsec报文的ACL检查功能 |
ipsec decrypt-check enable |
缺省情况下,解封装后IPsec报文的ACL检查功能处于开启状态 |
· IPsec抗重放检测功能缺省是使能的,是否关闭该功能请根据实际需求慎重使用。
· 使用较大的抗重放窗口宽度会引起系统开销增大,导致系统性能下降,与抗重放检测用于降低系统在接收重放报文时的开销的初衷不符,因此建议在能够满足业务运行需要的情况下,使用较小的抗重放窗口宽度。
· 一般情况下,分布式设备直接在接收报文的单板上进行业务处理。但IPsec抗重放检测要求同一个Vlan接口(或Tunnel口)发送和接收的流量必须在同一个单板上进行处理,此时需要在Vlan接口(或Tunnel口)下通过service命令指定转发当前接口流量的单板。有关于service命令的详细介绍,请参考“二层技术-以太网交换命令参考”中的“VLAN”或“三层技术-IP业务命令参考”中的“隧道”。
重放报文,通常是指设备再次接收到的已经被IPsec处理过的报文。IPsec通过滑动窗口(抗重放窗口)机制检测重放报文。AH和ESP协议报文中带有序列号,如果收到的报文的序列号与已经解封装过的报文序列号相同,或收到的报文的序列号出现得较早,即已经超过了抗重放窗口的范围,则认为该报文为重放报文。
对重放报文的解封装无意义,并且解封装过程涉及密码学运算,会消耗设备大量的资源,导致业务可用性下降,造成了拒绝服务攻击。通过使能IPsec抗重放检测功能,将检测到的重放报文在解封装处理之前丢弃,可以降低设备资源的消耗。
在某些特定环境下,业务数据报文的接收顺序可能与正常的顺序差别较大,虽然并非有意的重放攻击,但会被抗重放检测认为是重放报文,导致业务数据报文被丢弃,影响业务的正常运行。因此,这种情况下就可以通过关闭IPsec抗重放检测功能来避免业务数据报文的错误丢弃,也可以通过适当地增大抗重放窗口的宽度,来适应业务正常运行的需要。
只有IKE协商的IPsec SA才能够支持抗重放检测,手工方式生成的IPsec SA不支持抗重放检测。因此该功能使能与否对手工方式生成的IPsec SA没有影响。
表1-7 配置IPsec抗重放功能
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
开启IPsec抗重放检测功能 |
ipsec anti-replay check |
缺省情况下,IPsec抗重放检测功能处于开启状态 |
配置IPsec抗重放窗口宽度 |
ipsec anti-replay window width |
缺省情况下,IPsec抗重放窗口宽度为64 |
为了提高网络的可靠性,通常核心设备到ISP(Internet Service Provider,互联网服务提供商)都会有两条出口链路,它们互为备份或者为负载分担的关系。由于在不同的接口上应用安全策略时,各个接口将分别协商生成IPsec SA。因此,则在主备链路切换时,接口状态的变化会触发重新进行IKE协商,从而导致数据流的暂时中断。这种情况下,两个接口上的IPsec SA就需要能够平滑切换。
通过将一个IPsec安全策略与一个源接口绑定,使之成为共享源接口IPsec安全策略,可以实现主备链路切换时受IPsec保护的业务流量不中断。具体机制为:应用相同IPsec安全策略的多个物理接口共同使用一个指定的源接口(称为共享源接口)协商IPsec SA,当这些物理接口对应的链路切换时,如果该源接口的状态不变化,就不会删除该接口协商出的IPsec SA,也不需要重新触发IKE协商,各物理接口继续使用已有的IPsec SA保护业务流量。
对于本配置,有以下配置限制和注意事项:
· 只有IKE协商方式的IPsec安全策略才能配置为IPsec共享源接口安全策略。
· 一个IPsec安全策略只能与一个源接口绑定。
· 一个源接口可以同时与多个IPsec安全策略绑定。
· 删除与共享源接口IPsec安全策略绑定的共享源接口时,将使得该共享源接口IPsec安全策略恢复为普通IPsec安全策略。
· 若一个IPsec安全策略为共享源接口IPsec安全策略,但该IPsec安全策略中未指定隧道本端地址,则IKE将使用共享源接口地址作为IPsec隧道的本端地址进行IKE协商;如果共享源接口IPsec安全策略中指定了隧道本端地址,则将使用指定的隧道本端地址进行IKE协商。
表1-8 配置共享源接口IPsec安全策略
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
配置IPsec安全策略为IPsec共享源接口安全策略 |
ipsec { ipv6-policy | policy } policy-name local-address interface-type interface-nunmber |
缺省情况下,IPsec安全策略不是共享源接口IPsec安全策略,即未将IPsec安全策略与任何源接口绑定 |
当在接口上同时应用了IPsec安全策略与QoS策略时,缺省情况下,QoS使用封装后报文的外层IP头信息来对报文进行分类。但如果希望QoS基于被封装报文的原始IP头信息对报文进行分类,则需要配置QoS预分类功能来实现。
关于QoS策略及QoS分类的相关介绍请参见“ACL和QoS配置指导”中的“QoS配置方式”。
表1-9 配置QoS预分类功能
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入IPsec安全策略视图 |
ipsec { policy | ipv6-policy } policy-name seq-number [ isakmp | manual ] |
- |
开启QoS预分类功能 |
qos pre-classify |
缺省情况下,QoS预分类功能处于关闭状态 |
开启IPsec报文日志记录功能后,设备会在丢弃IPsec报文的情况下,例如入方向找不到对应的IPsec SA、AH/ESP认证失败、ESP加密失败等时,输出相应的日志信息,该日志信息内容主要包括报文的源和目的IP地址、报文的SPI值、报文的序列号信息,以及设备丢包的原因。
表1-10 配置IPsec日志信息记录功能
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
开启IPsec报文日志记录功能 |
ipsec logging packet enable |
缺省情况下,IPsec报文日志记录功能处于关闭状态 |
IP报文头中的DF(Don’t Fragment,不分片)位用于控制报文是否允许被分片。在隧道模式下,IPsec会在原始报文外封装一个新的IP头,称为外层IP头。IPsec的DF位设置功能允许用户设置IPsec封装后的报文外层IP头的DF位,并支持以下三种设置方式:
· clear:表示清除外层IP头的DF位,IPsec封装后的报文可被分片。
· set:表示设置外层IP头的DF位,IPsec封装后的报文不能被分片。
· copy:表示外层IP头的DF位从原始报文IP头中拷贝。
封装后外层IP头的DF位可以在接口视图和系统视图下分别配置,接口视图下的配置优先级高。如果接口下未设置外层IP头的DF位,则按照系统视图下的全局配置来决定如何设置封装后外层IP头的DF位。
对于本配置,有以下配置限制和注意事项:
· 该功能仅在IPsec的封装模式为隧道模式时有效,仅用于设置IPsec隧道模式封装后的外层IP头的DF位,原始报文IP头的DF位不会被修改。
· 如果有多个接口应用了共享源接口安全策略,则这些接口上必须使用相同的DF位设置。
表1-11 在接口下设置IPsec封装后外层IP头的DF位
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入接口视图 |
interface interface-type interface-number |
- |
为当前接口设置IPsec封装后外层IP头的DF位 |
ipsec df-bit { clear | copy | set } |
缺省情况下,接口下未设置IPsec封装后外层IP头的DF位,采用全局设置的DF位 |
表1-12 全局设置IPsec封装后外层IP头的DF位
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
为所有接口设置IPsec封装后外层IP头的DF位 |
ipsec global-df-bit { clear | copy | set } |
缺省情况下,IPsec封装后外层IP头的DF位从原始报文IP头中拷贝 |
开启IPsec的Trap功能后,IPsec会生成告警信息,用于向网管软件报告该模块的重要事件。生成的告警信息将被发送到设备的SNMP模块,通过设置SNMP中告警信息的发送参数,来决定告警信息输出的相关属性。有关告警信息的详细介绍,请参见“网络管理和监控配置指导”中的“SNMP”。
如果希望生成并输出某种类型的IPsec告警信息,则需要保证IPsec的全局告警功能以及相应类型的告警功能均处于开启状态。
表1-13 配置IPsec告警功能
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
开启IPsec的全局告警功能 |
snmp-agent trap enable ipsec global |
缺省情况下,IPsec的全局告警功能处于关闭状态 |
开启IPsec的指定告警功能 |
snmp-agent trap enable ipsec [ auth-failure | decrypt-failure | encrypt-failure | invalid-sa-failure | no-sa-failure | policy-add | policy-attach | policy-delete | policy-detach | tunnel-start | tunnel-stop ] * |
缺省情况下,IPsec的所有告警功能均处于开启状态 |
在完成上述配置后,在任意视图下执行display命令可以显示配置后IPsec的运行情况,通过查看显示信息认证配置的效果。
在用户视图下执行reset命令可以清除IPsec统计信息。
表1-14 IPsec显示和维护
操作 |
命令 |
显示IPsec安全策略的信息 |
display ipsec { ipv6-policy | policy } [ policy-name [ seq-number ] ] |
显示IPsec安全提议的信息 |
display ipsec transform-set [ transform-set-name ] |
显示IPsec SA的相关信息 |
display ipsec sa [ brief | count | interface interface-type interface-number | { ipv6-policy | policy } policy-name [ seq-number ] | profile policy-name | remote [ ipv6 ] ip-address ] |
显示IPsec处理报文的统计信息 |
display ipsec statistics [ tunnel-id tunnel-id ] |
显示IPsec隧道的信息 |
display ipsec tunnel { brief | count | tunnel-id tunnel-id } |
清除已经建立的IPsec SA |
reset ipsec sa [ { ipv6-policy | policy } policy-name [ seq-number ] | profile policy-name | remote { ipv4-address | ipv6 ipv6-address } | spi { ipv4-address | ipv6 ipv6-address } { ah | esp } spi-num ] |
清除IPsec的报文统计信息 |
reset ipsec statistics [ tunnel-id tunnel-id ] |
在Switch A和Switch B之间建立一条IPsec隧道,对Switch A与Switch B之间的数据流进行安全保护。具体要求如下:
· 封装形式为隧道模式。
· 安全协议采用ESP协议。
· 加密算法采用AES-CBC-192,认证算法采用HMAC-SHA1。
· 手工方式建立IPsec SA。
图1-4 保护IPv4报文的IPsec配置组网图
(1) 配置Switch A
# 配置Vlan-interface1接口的IP地址。
<SwitchA> system-view
[SwitchA] interface vlan-interface 1
[SwitchA-Vlan-interface1] ip address 2.2.2.1 255.255.255.0
[SwitchA-Vlan-interface1] quit
# 配置一个访问控制列表,定义Switch A和Switch B之间的数据流。
[SwitchA] acl number 3101
[SwitchA-acl-adv-3101] rule 0 permit ip source 2.2.2.1 0 destination 2.2.3.1 0
[SwitchA-acl-adv-3101] quit
# 创建IPsec安全提议tran1。
[SwitchA] ipsec transform-set tran1
# 配置安全协议对IP报文的封装形式为隧道模式。
[SwitchA-ipsec-transform-set-tran1] encapsulation-mode tunnel
# 配置采用的安全协议为ESP。
[SwitchA-ipsec-transform-set-tran1] protocol esp
# 配置ESP协议采用的加密算法为AES-CBC-192,认证算法为HMAC-SHA1。
[SwitchA-ipsec-transform-set-tran1] esp encryption-algorithm aes-cbc-192
[SwitchA-ipsec-transform-set-tran1] esp authentication-algorithm sha1
[SwitchA-ipsec-transform-set-tran1] quit
# 创建一条手工方式的IPsec安全策略,名称为map1,序列号为10。
[SwitchA] ipsec policy map1 10 manual
# 指定引用ACL 3101。
[SwitchA-ipsec-policy-manual-map1-10] security acl 3101
# 指定引用的IPsec安全提议为tran1。
[SwitchA-ipsec-policy-manual-map1-10] transform-set tran1
# 指定IPsec隧道对端IP地址为2.2.3.1。
[SwitchA-ipsec-policy-manual-map1-10] remote-address 2.2.3.1
# 配置ESP协议的出方向SPI为12345,入方向SPI为54321。
[SwitchA-ipsec-policy-manual-map1-10] sa spi outbound esp 12345
[SwitchA-ipsec-policy-manual-map1-10] sa spi inbound esp 54321
# 配置ESP协议的出方向SA的密钥为明文字符串abcdefg,入方向SA的密钥为明文字符串gfedcba。
[SwitchA-ipsec-policy-manual-map1-10] sa string-key outbound esp simple abcdefg
[SwitchA-ipsec-policy-manual-map1-10] sa string-key inbound esp simple gfedcba
[SwitchA-ipsec-policy-manual-map1-10] quit
# 在Vlan-interface1接口上应用安全策略组。
[SwitchA] interface vlan-interface 1
[SwitchA-Vlan-interface1] ipsec apply policy map1
(2) 配置Switch B
# 配置Vlan-interface1接口的IP地址。
<SwitchB> system-view
[SwitchB] interface vlan-interface 1
[SwitchB-Vlan-interface1] ip address 2.2.3.1 255.255.255.0
[SwitchB-Vlan-interface1] quit
# 配置一个访问控制列表,定义Switch B和Switch A之间的数据流。
[SwitchB] acl number 3101
[SwitchB-acl-adv-3101] rule 0 permit ip source 2.2.3.1 0 destination 2.2.2.1 0
[SwitchB-acl-adv-3101] quit
# 创建IPsec安全提议tran1。
[SwitchB] ipsec transform-set tran1
# 配置安全协议对IP报文的封装形式为隧道模式。
[SwitchB-ipsec-transform-set-tran1] encapsulation-mode tunnel
# 配置采用的安全协议为ESP。
[SwitchB-ipsec-transform-set-tran1] protocol esp
# 配置ESP协议采用的加密算法为AES-CBC-192,认证算法为HMAC-SHA1。
[SwitchB-ipsec-transform-set-tran1] esp encryption-algorithm aes-cbc-192
[SwitchB-ipsec-transform-set-tran1] esp authentication-algorithm sha1
[SwitchB-ipsec-transform-set-tran1] quit
# 创建一条手工方式的IPsec安全策略,名称为use1,序列号为10。
[SwitchB] ipsec policy use1 10 manual
# 指定引用ACL 3101。
[SwitchB-ipsec-policy-manual-use1-10] security acl 3101
# 指定引用的IPsec安全提议为tran1。
[SwitchB-ipsec-policy-manual-use1-10] transform-set tran1
# 指定IPsec隧道对端IP地址为2.2.2.1。
[SwitchB-ipsec-policy-manual-use1-10] remote-address 2.2.2.1
# 配置ESP协议的出方向SPI为54321,入方向SPI为12345。
[SwitchB-ipsec-policy-manual-use1-10] sa spi outbound esp 54321
[SwitchB-ipsec-policy-manual-use1-10] sa spi inbound esp 12345
# 配置ESP协议的出方向SA的密钥为明文字符串gfedcba,入方向SA的密钥为明文字符串abcdefg。
[SwitchB-ipsec-policy-manual-use1-10] sa string-key outbound esp simple gfedcba
[SwitchB-ipsec-policy-manual-use1-10] sa string-key inbound esp simple abcdefg
[SwitchB-ipsec-policy-manual-use1-10] quit
# 在Vlan-interface1接口上应用安全策略组。
[SwitchB] interface vlan-interface 1
[SwitchB-Vlan-interface1] ipsec apply policy use1
以上配置完成后,Switch A和Switch B之间的IPsec隧道就建立好了,Swtich A和Switch B之间数据流的传输将受到生成的IPsec SA的保护。可通过以下显示查看Switch A上手工创建的IPsec SA。
[SwitchA] display ipsec sa
-------------------------------
Interface: Vlan-interface 1
-------------------------------
-----------------------------
IPsec policy: map1
Sequence number: 10
Mode: manual
-----------------------------
Tunnel id: 549
Encapsulation mode: tunnel
Path MTU: 1443
Tunnel:
local address: 2.2.2.1
remote address: 2.2.3.1
Flow:
as defined in ACL 3101
[Inbound ESP SA]
SPI: 54321 (0x0000d431)
Transform set: ESP-ENCRYPT-AES-CBC-192 ESP-AUTH-SHA1
No duration limit for this SA
[Outbound ESP SA]
SPI: 12345 (0x00003039)
Transform set: ESP-ENCRYPT-AES-CBC-192 ESP-AUTH-SHA1
No duration limit for this SA
Switch B上也会产生相应的IPsec SA来保护IPv4报文,查看方式与Switch A同,此处略。
在Switch A和Switch B之间建立一条IPsec隧道,对Switch A与Switch B之间的数据流进行安全保护。具体要求如下:
· 封装形式为隧道模式。
· 安全协议采用ESP协议。
· 加密算法采用AES-CBC-192,认证算法采用HMAC-SHA1。
· IKE协商方式建立IPsec SA。
图1-5 保护IPv4报文的IPsec配置组网图
(1) 配置Switch A
# 配置Vlan-interface1接口的IP地址。
<SwitchA> system-view
[SwitchA] interface vlan-interface 1
[SwitchA-Vlan-interface1] ip address 2.2.2.1 255.255.255.0
[SwitchA-Vlan-interface1] quit
# 配置一个访问控制列表,定义由Switch A去Switch B的数据流。
[SwitchA] acl number 3101
[SwitchA-acl-adv-3101] rule 0 permit ip source 2.2.2.1 0 destination 2.2.3.1 0
[SwitchA-acl-adv-3101] quit
# 创IPsec建安全提议tran1。
[SwitchA] ipsec transform-set tran1
# 配置安全协议对IP报文的封装形式为隧道模式。
[SwitchA-ipsec-transform-set-tran1] encapsulation-mode tunnel
# 配置采用的安全协议为ESP。
[SwitchA-ipsec-transform-set-tran1] protocol esp
# 配置ESP协议采用的加密算法为AES-CBC-192,认证算法为HMAC-SHA1。
[SwitchA-ipsec-transform-set-tran1] esp encryption-algorithm aes-cbc-192
[SwitchA-ipsec-transform-set-tran1] esp authentication-algorithm sha1
[SwitchA-ipsec-transform-set-tran1] quit
# 创建并配置IKE keychain,名称为keychain1。
[SwitchA] ike keychain keychain1
# 配置与IP地址为2.2.3.1的对端使用的预共享密钥为明文12345zxcvb!@#$%ZXCVB。
[SwitchA-ike-keychain-keychain1] pre-shared-key address 2.2.3.1 255.255.255.0 key simple 12345zxcvb!@#$%ZXCVB
[SwitchA-ike-keychain-keychain1] quit
# 创建并配置IKE profile,名称为profile1。
[SwitchA] ike profile profile1
[SwitchA-ike-profile-profile1] keychain keychain1
[SwitchA-ike-profile-profile1] match remote identity address 2.2.3.1 255.255.255.0
[SwitchA-ike-profile-profile1] quit
# 创建一条IKE协商方式的IPsec安全策略,名称为map1,序列号为10。
[SwitchA] ipsec policy map1 10 isakmp
# 指定引用ACL 3101。
[SwitchA-ipsec-policy-isakmp-map1-10] security acl 3101
# 指定引用的安全提议为tran1。
[SwitchA-ipsec-policy-isakmp-map1-10] transform-set tran1
# 指定IPsec隧道的本端IP地址为2.2.2.1,对端IP地址为2.2.3.1。
[SwitchA-ipsec-policy-isakmp-map1-10] local-address 2.2.2.1
[SwitchA-ipsec-policy-isakmp-map1-10] remote-address 2.2.3.1
# 指定引用的IKE profile为profile1。
[SwitchA-ipsec-policy-isakmp-map1-10] ike-profile profile1
[SwitchA-ipsec-policy-isakmp-map1-10] quit
# 在Vlan-interface1上指定“slot 1”为发送和接收当前接口流量的单板。
[SwitchA] interface vlan-interface 1
[SwitchA-Vlan-interface1] service slot 1
# 在Vlan-interface1接口上应用安全策略组。
[SwitchA-Vlan-interface1] ipsec apply policy map1
(2) 配置Switch B
# 配置Vlan-interface1接口的IP地址。
<SwitchB> system-view
[SwitchB] interface vlan-interface 1
[SwitchB-Vlan-interface1] ip address 2.2.3.1 255.255.255.0
[SwitchB-Vlan-interface1] quit
# 配置一个访问控制列表,定义由Switch B去Switch A的数据流。
[SwitchB] acl number 3101
[SwitchB-acl-adv-3101] rule 0 permit ip source 2.2.3.1 0 destination 2.2.2.1 0
[SwitchB-acl-adv-3101] quit
# 创建IPsec安全提议tran1。
[SwitchB] ipsec transform-set tran1
# 配置安全协议对IP报文的封装形式为隧道模式。
[SwitchB-ipsec-transform-set-tran1] encapsulation-mode tunnel
# 配置采用的安全协议为ESP。
[SwitchB-ipsec-transform-set-tran1] protocol esp
# 配置ESP协议采用的加密算法为AES-CBC-192,认证算法为HMAC-SHA1。
[SwitchB-ipsec-transform-set-tran1] esp encryption-algorithm aes-cbc-192
[SwitchB-ipsec-transform-set-tran1] esp authentication-algorithm sha1
[SwitchB-ipsec-transform-set-tran1] quit
# 创建并配置IKE keychain,名称为keychain1。
[SwitchB] ike keychain keychain1
# 配置与IP地址为2.2.2.1的对端使用的预共享密钥为明文12345zxcvb!@#$%ZXCVB。
[SwitchB-ike-keychain-keychain1] pre-shared-key address 2.2.2.1 255.255.255.0 key simple 12345zxcvb!@#$%ZXCVB
[SwitchB-ike-keychain-keychain1] quit
# 创建并配置IKE profile,名称为profile1。
[SwitchB] ike profile profile1
[SwitchB-ike-profile-profile1] keychain keychain1
[SwitchB-ike-profile-profile1] match remote identity address 2.2.2.1 255.255.255.0
[SwitchB-ike-profile-profile1] quit
# 创建一条IKE协商方式的安全策略,名称为use1,序列号为10。
[SwitchB] ipsec policy use1 10 isakmp
# 指定引用ACL 3101。
[SwitchB-ipsec-policy-isakmp-use1-10] security acl 3101
# 指定引用的IPsec安全提议为tran1。
[SwitchB-ipsec-policy-isakmp-use1-10] transform-set tran1
# 指定IPsec隧道的本端IP地址为2.2.3.1,对端IP地址为2.2.2.1。
[SwitchB-ipsec-policy-isakmp-use1-10] local-address 2.2.3.1
[SwitchB-ipsec-policy-isakmp-use1-10] remote-address 2.2.2.1
# 指定引用的IKE对等体为profile1。
[SwitchB-ipsec-policy-isakmp-use1-10] ike-profile profile1
[SwitchB-ipsec-policy-isakmp-use1-10] quit
# 在Vlan-interface1上指定“slot 1”为发送和接收当前接口流量的单板。
[SwitchB] interface vlan-interface 1
[SwitchB-Vlan-interface1] service slot 1
# 在Vlan-interface1接口上应用安全策略组。
[SwitchB-Vlan-interface1] ipsec apply policy use1
以上配置完成后,Switch A和Switch B之间如果有端到端的报文发送或接收,将触发IKE进行IPsec SA的协商。IKE成功协商出IPsec SA后,Switch A和Switch B之间数据流的传输将受到IPsec SA的保护。
· 若无特殊说明,本文中的IKE均指第1版本的IKE协议。
· 设备运行于FIPS模式时,本特性部分配置相对于非FIPS模式有所变化,具体差异请见本文相关描述。有关FIPS模式的详细介绍请参见“安全配置指导”中的“FIPS”。
· IKE功能中所指的“接口”为三层接口,包括VLAN接口、三层以太网接口等。三层以太网接口是指在以太网接口视图下通过port link-mode route命令切换为三层模式的以太网接口,有关以太网接口模式切换的操作,请参见“二层技术-以太网交换配置指导”中的“以太网接口配置”。
IKE(Internet Key Exchange,互联网密钥交换)协议利用ISAKMP(Internet Security Association and Key Management Protocol,互联网安全联盟和密钥管理协议)语言定义密钥交换的过程,是一种对安全服务进行协商的手段。
用IPsec保护一个IP数据包之前,必选先建立一个安全联盟(IPsec SA),IPsec SA可以手工创建或动态建立。IKE为IPsec提供了自动建立IPsec SA的服务,具体有以下优点。
· IKE首先会在通信双方之间协商建立一个安全通道(IKE SA),并在此安全通道的保护下协商建立IPsec SA,这降低了手工配置的复杂度,简化IPsec的配置和维护工作。
· IKE的精髓在于DH(Diffie-Hellman)交换技术,它通过一系列的交换,使得通信双方最终计算出共享密钥。在IKE的DH交换过程中,每次计算和产生的结果都是不相关的。由于每次IKE SA的建立都运行了DH交换过程,因此就保证了每个通过IKE协商建立的IPsec SA所使用的密钥互不相关。
· IPsec使用AH或ESP报文头中的顺序号实现防重放。此顺序号是一个32比特的值,此数溢出之前,为实现防重放,IPsec SA需要重新建立,IKE可以自动重协商IPsec SA。
如图2-1所示,IKE为IPsec协商建立SA,并把建立的参数交给IPsec,IPsec使用IKE建立的SA对IP报文加密或认证处理。
图2-1 IPsec与IKE的关系图
IKE使用了两个阶段为IPsec进行密钥协商以及建立SA:
(1) 第一阶段,通信双方彼此间建立了一个已通过双方身份认证和对通信数据安全保护的通道,即建立一个IKE SA(本文中提到的IKE SA都是指第一阶段SA)。第一阶段有主模式(Main Mode)和野蛮模式(Aggressive Mode)两种IKE协商模式。
(2) 第二阶段,用在第一阶段建立的IKE SA为IPsec协商安全服务,即为IPsec协商IPsec SA,建立用于最终的IP数据安全传输的IPsec SA。
如图2-2所示,第一阶段主模式的IKE协商过程中包含三对消息,具体内容如下:
· 第一对消息完成了SA交换,它是一个协商确认双方IKE安全策略的过程;
· 第二对消息完成了密钥交换,通过交换Diffie-Hellman公共值和辅助数据(如:随机数),最终双方计算生成一系列共享密钥(例如,认证密钥、加密密钥以及用于生成IPsec密钥参数的密钥材料),并使其中的加密密钥和认证密钥对后续的IKE消息提供安全保障;
· 第三对消息完成了ID信息和验证数据的交换,并进行双方身份的认证。
野蛮模式交换与主模式交换的主要差别在于,野蛮模式不提供身份保护,只交换3条消息。在对身份保护要求不高的场合,使用交换报文较少的野蛮模式可以提高协商的速度;在对身份保护要求较高的场合,则应该使用主模式。
IKE可以在不安全的网络上安全地认证通信双方的身份、分发密钥以及建立IPsec SA,具有以下几种安全机制。
IKE的身份认证机制用于确认通信双方的身份。设备支持预共享密钥认证:通信双方通过共享的密钥认证对端身份。
DH算法是一种公共密钥算法,它允许通信双方在不传输密钥的情况下通过交换一些数据,计算出共享的密钥。即使第三方(如黑客)截获了双方用于计算密钥的所有交换数据,由于其复杂度很高,也不足以计算出双方的密钥。
PFS(Perfect Forward Secrecy,完善的前向安全性)是一种安全特性,它解决了密钥之间相互无关性的需求。由于IKE第二阶段协商需要从第一阶段协商出的密钥材料中衍生出用于IPsec SA的密钥,若攻击者能够破解IKE SA的一个密钥,则会非常容易得掌握其衍生出的任何IPsec SA的密钥。使用PFS特性后,IKE第二阶段协商过程中会增加一次DH交换,使得IKE SA的密钥和IPsec SA的密钥之间没有派生关系,即使IKE SA的其中一个密钥被破解,也不会影响它协商出的其它密钥的安全性。
与IKE相关的协议规范有:
· RFC2408:Internet Security Association and Key Management Protocol (ISAKMP)
· RFC2409:The Internet Key Exchange (IKE)
· RFC2412:The OAKLEY Key Determination Protocol
进行IKE配置之前,用户需要确定以下几个因素,以便配置过程的顺利进行。
(1) 确定IKE交换过程中安全保护的强度,包括认证方法、加密算法、认证算法、DH group。
· 认证方法分为预共享密钥认证。预共享密钥认证机制简单、不需要证书,常在小型组网环境中使用。
· 不同认证/加密算法的强度不同,算法强度越高,受保护数据越难被破解,但消耗的计算资源越多。
· DH group位数越大安全性越高,但是处理速度会相应减慢。应该根据实际组网环境中对安全性和性能的要求选择合适的DH group。
(2) 确定通信双方预先约定的预共享密钥。
(3) 确定通信双方都采用IKE协商模式的IPsec安全策略。IPsec安全策略中若不引用IKE profile,则使用系统视图下配置的IKE profile进行协商,若系统视图下没有任何IKE profile,则使用全局的IKE参数进行协商。关于IPsec安全策略的配置,请参见1.3.6 配置IKE协商方式的IPsec安全策略。
表2-1 IKE配置任务简介
配置任务 |
说明 |
详细配置 |
配置IKE profile |
可选 |
|
配置IKE提议 |
可选 若IKE profile中需要指定IKE提议,则必配 |
|
配置IKE keychain |
可选 若IKE第一阶段协商为预共享密钥认证方式,则必配 |
|
配置本端身份信息 |
可选 |
|
配置IKE Keepalive功能 |
可选 |
|
配置IKE NAT Keepalive功能 |
可选 |
|
配置IKE DPD探测功能 |
可选 |
|
配置针对无效IPsec SPI的IKE SA恢复功能 |
可选 |
|
配置对IKE SA数目的限制 |
可选 |
|
配置IKE告警功能 |
可选 |
IKE profile中包括以下配置:
(1) 匹配对端身份的规则。响应方首先需要根据发起方的身份信息查找一个本端的IKE profile,然后使用此IKE profile中的信息验证对端身份,发起方同样需要根据响应方的身份信息查找到一个IKE profile用于验证对端身份。对端身份信息若能满足本地某个IKE profile中指定的匹配规则,则该IKE profile为查找的结果。
(2) 根据IKE提议中配置的认证方法,配置IKE keychain。
(3) 本端作为发起方时所使用的协商模式(主模式、野蛮模式)。本端作为响应方时,将自动适配发起方的协商模式。
(4) 本端作为发起方时可以使用的IKE提议(可指定多个),先指定的优先级高。响应方会将发起方的IKE提议与本端所有的IKE提议进行匹配,如果找到匹配项则直接使用,否则继续查找。若未查找到匹配的IKE提议,则协商失败。
(5) 本端身份信息。
(6) IKE DPD(Dead Peer Detection,对等体存活检测)功能,IKE DPD功能用于检测协商对端是否存活。如果IKE profile视图下和系统视图下都配置了DPD功能,则IKE profile视图下的DPD配置生效,如果IKE profile视图下没有配置DPD功能,则采用系统视图下的DPD配置。
(7) IKE profile的使用范围。限制IKE profile只能在指定的地址或指定接口的地址下使用(这里的地址指的是IPsec策略下配置的本端地址,若本端地址没有配置,则为引用IPsec策略的接口IP地址)。配置了match local address的IKE profile的优先级高于所有未配置match local address的IKE profile。
(8) IKE profile的优先级。IKE profile的匹配优先级首先取决于其中是否配置了match local address,其次决定于配置的优先级值,最后决定于配置IKE profile的先后顺序。
表2-2 配置IKE profile
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建一个IKE profile,并进入IKE Profile视图 |
ike profile profile-name |
缺省情况下,不存在IKE profile |
配置匹配对端身份的规则 |
match remote { certificate policy-name | identity { address { { ipv4-address [ mask | mask-length ] | range low-ipv4-address high-ipv4-address } | ipv6 { ipv6-address [ prefix-length ] | range low-ipv6-address high-ipv6-address } } [ vpn-instance vpn-name ] | fqdn fqdn-name | user-fqdn user-fqdn-name } } |
协商双方都必须配置至少一个match remote规则,当对端的身份与IKE profile中配置的match remote规则匹配时,则使用此IKE profile中的信息与对端完成认证 |
配置采用预共享密钥认证时,所使用的keychain |
keychain keychain-name |
必选 缺省情况下,未指定keychain |
配置IKE第一阶段的协商模式 |
非FIPS模式下: exchange-mode { aggressive | main } FIPS模式下: exchange-mode main |
缺省情况下,IKE第一阶段发起方的协商模式使用主模式 |
配置IKE profile引用的IKE提议 |
proposal proposal-number&<1-6> |
缺省情况下,IKE profile未引用任何IKE提议,使用系统视图下已配置的IKE提议进行IKE协商 |
配置本端身份信息 |
local-identity { address { ipv4-address | ipv6 ipv6-address } | dn | fqdn [ fqdn-name ] | user-fqdn [ user-fqdn-name ] } |
缺省情况下,未配置本端身份信息。此时使用系统视图下通过ike identity命令配置的身份信息作为本端身份信息。若两者都没有配置,则使用IP地址标识本端的身份,该IP地址为IPsec安全策略应用的接口的IP地址 |
(可选)配置IKE DPD功能 |
dpd interval interval-seconds [ retry seconds ] { on-demand | periodic } |
缺省情况下,IKE profile视图下没有配置DPD功能,采用系统视图下的DPD配置。若两者没有配置,则不进行DPD探测 |
(可选)配置IKE profile的使用范围 |
match local address { interface-type interface-number | { ipv4-address | ipv6 ipv6-address } [ vpn-instance vpn-name ] } |
缺省情况下,未限制IKE profile的使用范围 |
(可选)配置内部MPLS L3VPN实例 |
inside-vpn vpn-instance vpn-name |
缺省情况下,IKE profile未指定内部VPN实例,即内网与外网在同一个VPN中 |
(可选)配置IKE profile的优先级 |
priority number |
缺省情况下,IKE profile的优先级为100 |
IKE定义了一套属性数据来描述IKE第一阶段使用怎样的参数来与对端进行协商。用户可以创建多条不同优先级的IKE提议。协商双方必须至少有一条匹配的IKE提议才能协商成功。
在进行IKE协商时,协商发起方会将自己的IKE提议发送给对端,由对端进行匹配。
· 若发起方使用的IPsec安全策略中没有引用IKE profile,则会将当前系统中所有的IKE提议发送给对端,这些IKE提议的优先级顺序由IKE提议的序号决定,序号越小优先级越高;
· 若发起方的IPsec策略中引用了IKE profile,则会将该IKE profile中引用的所有IKE提议发送给对端,这些IKE提议的优先级由引用的先后顺序决定,先引用的优先级高。
协商响应方则以对端发送的IKE提议优先级从高到低的顺序与本端所有的IKE提议进行匹配,直到找到一个匹配的提议来使用。匹配的IKE提议将被用来建立IKE SA。
以上IKE提议的匹配原则是:协商双方具有相同的加密算法、认证方法、认证算法和DH group标识。匹配的IKE提议的IKE SA存活时间则取两端的最小值。
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建IKE提议,并进入IKE提议视图 |
ike proposal proposal-number |
缺省情况下,存在一个缺省的IKE提议 |
指定一个供IKE提议使用的加密算法 |
非FIPS模式下: encryption-algorithm { 3des-cbc | aes-cbc-128 | aes-cbc-192 | aes-cbc-256 | des-cbc } FIPS模式下: encryption-algorithm { aes-cbc-128 | aes-cbc-192 | aes-cbc-256 } |
非FIPS模式下: 缺省情况下,IKE提议使用CBC模式的56-bit DES加密算法 FIPS模式下: 缺省情况下,IKE提议使用CBC模式的128-bit AES加密算法 |
指定一个供IKE提议使用的认证方法 |
authentication-method pre-share |
缺省情况下,IKE提议使用预共享密钥的认证方法 |
指定一个供IKE提议使用的认证算法 |
非FIPS模式下: authentication-algorithm { md5 | sha } FIPS模式下: authentication-algorithm sha |
缺省情况下,IKE提议使用HMAC-SHA1认证算法 |
配置IKE第一阶段密钥协商时所使用的DH密钥交换参数 |
非FIPS模式下: dh { group1 | group14 | group2 | group24 | group5 } FIPS模式下: dh group14 |
非FIPS模式下: 缺省情况下,IKE第一阶段密钥协商时所使用的DH密钥交换参数为group1,即768-bit的Diffie-Hellman group FIPS模式下: 缺省情况下,IKE阶段1密钥协商时所使用的DH密钥交换参数为group14,即2048-bit的Diffie-Hellman group |
指定一个IKE提议的IKE SA存活时间 |
缺省情况下,IKE提议的IKE SA存活时间为86400秒 |
在IKE需要通过预共享密钥方式进行身份认证时,协商双方需要创建并指定IKE keychain。IKE keychain用于配置协商双方的密钥信息,具体包括以下内容:
· 预共享密钥。IKE协商双方配置的预共享密钥必须相同,否则身份认证会失败。以明文或密文方式设置的预共享密钥,均以密文的方式保存在配置文件中。
· IKE keychain的使用范围。限制keychain的使用范围,即IKE keychain只能在指定的地址或指定接口对应的地址下使用(这里的地址指的是IPsec安全策略下配置的本端地址,若本端地址没有配置,则为引用IPsec安全策略的接口的IP地址)。
· IKE keychain的优先级。配置了match local address的IKE keychain的优先级高于所有未配置match local address的IKE keychain。即IKE keychain的优先级首先决定于是否配置了match local address,其次取决于配置的优先级,最后决定于配置IKE keychain的先后顺序。
表2-4 配置IKE keychain
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建IKE keychain,并进入IKE keychain视图 |
ike keychain keychain-name [ vpn-instance vpn-name ] |
缺省情况下,不存在IKE keychain |
配置预共享密钥 |
pre-shared-key { address { ipv4-address [ mask | mask-length ] | ipv6 ipv6-address [ prefix-length ] } | hostname host-name } key { cipher cipher-key | simple simple-key } |
缺省情况下,未配置预共享密钥 |
(可选)配置IKE keychain的使用范围 |
match local address { interface-type interface-number | { ipv4-address | ipv6 ipv6-address } [ vpn-instance vpn-name ] } |
缺省情况下,未限制IKE keychain的使用范围 |
(可选)配置IKE keychain的优先级 |
priority number |
缺省情况下,IKE keychain的优先级为100 |
本端身份信息适用于所有IKE SA的协商,而IKE profile下的local-identity仅适用于本IKE profile。如果IKE profile下没有配置本端身份,则默认使用此处配置的全局本端身份。本端采用认证方式为预共享密钥时,本端除DN之外的其它类型的身份信息均有效。
表2-5 配置本端身份信息
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
配置本端身份信息 |
ike identity { address { ipv4-address | ipv6 ipv6-address } | dn | fqdn [ fqdn-name ] | user-fqdn [ user-fqdn-name ] } |
缺省情况下,使用IP地址标识本端的身份,该IP地址为IPsec安全策略应用的接口地址 |
IKE Keepalive功能用于检测对端是否存活。在对端配置了等待IKE Keepalive报文的超时时间后,必须在本端配置发送IKE Keepalive报文的时间间隔。当对端IKE SA在配置的超时时间内未收到IKE Keepalive报文时,则删除该IKE SA以及由其协商的IPsec SA。
配置IKE Keepalive功能时,请遵循以下配置限制和指导:
· 当有检测对方是否存活的需求时,通常建议配置IKE DPD,不建议配置IKE Keepalive。仅当对方不支持IKE DPD功能且支持IKE Keepalive功能时,才考虑配置IKE Keepalive功能。配置IKE Keepalive功能后,会定时检测对方是否存活,因此会额外消耗网络带宽和计算资源。
· 本端配置的IKE Keepalive报文的等待超时时间要大于对端发送的时间间隔。由于网络中一般不会出现超过连续三次的报文丢失,所以,本端的超时时间可以配置为对端配置的发送IKE Keepalive报文的时间间隔的三倍。
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
配置通过IKE SA向对端发送IKE Keepalive报文的时间间隔 |
ike keepalive interval seconds |
缺省情况下,不向对端发送IKE Keepalive报文 |
配置本端等待对端发送IKE Keepalive报文的超时时间 |
ike keepalive timeout seconds |
缺省情况下,永不超时,一直等待对端发送IKE Keepalive报文 |
在采用IKE协商建立的IPsec隧道中,可能存在NAT设备,由于在NAT设备上的NAT会话有一定存活时间,一旦IPsec隧道建立后如果长时间没有流量,对应的NAT会话表项会被删除,这样将导致IPsec隧道无法继续传输数据。为防止NAT表项老化,NAT内侧的IKE网关设备需要定时向NAT外侧的IKE网关设备发送NAT Keepalive报文,以便维持NAT设备上对应的IPsec流量的会话存活,从而让NAT外侧的设备可以访问NAT内侧的设备。
表2-7 配置IKE NAT Keepalive功能
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
配置向对端发送NAT Keepalive报文的时间间隔 |
ike nat-keepalive seconds |
缺省情况下,向对端发送NAT Keepalive报文的时间间隔为20秒 |
DPD(Dead Peer Detection,对等体存活检测)用于检测对端是否存活。本端主动向对端发送DPD请求报文,对对端是否存活进行检测。如果本端在DPD报文的重传时间间隔(retry seconds)内未收到对端发送的DPD回应报文,则重传DPD请求报文,若重传两次之后仍然没有收到对端的DPD回应报文,则删除该IKE SA和对应的IPsec SA。
配置IKE DPD功能时,请遵循以下配置限制和指导:
· IKE DPD有两种模式:按需探测模式(on-demand)和定时探测模式(periodic)。一般若无特别要求,建议使用按需探测模式,在此模式下,仅在本端需要发送报文时,才会触发探测;如果需要尽快地检测出对端的状态,则可以使用定时探测模式。在定时探测模式下工作,会消耗更多的带宽和计算资源,因此当设备与大量的IKE对端通信时,应优先考虑使用按需探测模式。
· 如果IKE profile视图下和系统视图下都配置了DPD探测功能,则IKE profile视图下的DPD配置生效,如果IKE profile视图下没有配置DPD探测功能,则采用系统视图下的DPD配置。
· 建议配置的触发IKE DPD探测的时间间隔大于DPD报文的重传时间间隔,使得直到当前DPD探测结束才可以触发下一次DPD探测,DPD在重传过程中不触发新的DPD探测。
以定时探测模式为例,若本端的IKE DPD配置如下:
ike dpd interval 10 retry 6 periodic
则,具体的探测过程为:IKE SA协商成功之后10秒,本端会发送DPD探测报文,并等待接收DPD回应报文。若本端在6秒内没有收到DPD回应报文,则会第二次发送DPD探测报文。在此过程中总共会发送三次DPD探测报文,若第三次DPD探测报文发出后6秒仍没收到DPD回应报文,则会删除发送DPD探测报文的IKE SA及其对应的所有IPsec SA。若在此过程中收到了DPD回应报文,则会等待10秒再次发送DPD探测报文。
表2-8 配置全局IKE DPD功能
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
配置IKE DPD功能 |
ike dpd interval interval-seconds [ retry seconds ] { on-demand | periodic } |
缺省情况下,IKE DPD功能处于关闭状态 |
当IPsec隧道一端的安全网关出现问题(例如安全网关重启)导致其IPsec SA丢失时,会造成IPsec流量黑洞现象:一端(接收端)的IPsec SA已经丢失,而另一端(发送端)还持有对应的IPsec SA且不断地向对端发送报文,当接收端收到发送端使用此IPsec SA封装的IPsec报文时,就会因为找不到对应的SA而持续丢弃报文,形成流量黑洞。该现象造成IPsec通信链路长时间得不到恢复(只有等到发送端旧的IPsec SA生命周期超时,并重建IPsec SA后,两端的IPsec流量才能得以恢复),因此需要采取有效的IPsec SA恢复手段来快速恢复中断的IPsec通信链路。
IPsec SA由SPI唯一标识,接收方根据IPsec报文中的SPI在SA数据库中查找对应的IPsec SA,若接收方找不到处理该报文的IPsec SA,则认为此报文的SPI无效。如果接收端当前存在IKE SA,则会向对端发送删除对应IPsec SA的通知消息,发送端IKE接收到此通知消息后,就会立即删除此无效SPI对应的IPsec SA。之后,当发送端需要继续向接收端发送报文时,就会触发两端重建IPsec SA,使得中断的IPsec通信链路得以恢复;如果接收端当前不存在IKE SA,就不会触发本端向对端发送删除IPsec SA的通知消息,接受端将默认丢弃无效SPI的IPsec报文,使得链路无法恢复。后一种情况下,如果使能了IPsec无效SPI恢复IKE SA功能,就会触发本端与对端协商新的IKE SA并发送删除消息给对端,从而使链路恢复正常。
由于使能此功能后,若攻击者伪造大量源IP地址不同但目的IP地址相同的无效SPI报文发给设备,会导致设备因忙于与无效对端协商建立IKE SA而面临受到DoS(Denial of Sevice)攻击的风险。因此,建议通常不要打开ike invalid-spi-recovery enable功能。
表2-9 使能针对无效IPsec SPI的IKE SA恢复功能
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
使能针对无效IPsec SPI的IKE SA恢复功能 |
ike invalid-spi-recovery enable |
缺省情况下,针对无效IPsec SPI的IKE SA恢复功能处于关闭状态 |
由于不同设备的能力不同,为充分利用设备的处理能力,可以配置允许同时处于协商状态的IKE SA的最大数,也可以配置允许建立的IKE SA的最大数。
若设置允许同时协商更多的IKE SA,则可以充分利用设备处理能力,以便在设备有较强处理能力的情况下得到更高的新建性能;若设置允许同时协商较少的IKE SA,则可以避免产生大量不能完成协商的IKE SA,以便在设备处理能力较弱时保证一定的新建性能。
若设置允许建立更多的IKE SA,则可以使得设备在有充足内存的情况下得到更高的并发性能;若设置允许建立较少的IKE SA,则可以在设备没有充足内存的情况下,使得IKE不过多占用系统内存。
表2-10 配置对本端IKE SA数目的限制
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
配置对本端IKE SA数目的限制 |
ike limit { max-negotiating-sa negotiation-limit | max-sa sa-limit } |
缺省情况下,不限制允许同时处于协商状态的IKE SA数目,也不限制允许建立的IKE SA的最大数目 |
开启IKE的告警功能后,IKE会生成告警信息,用于向网管软件报告该模块的重要事件。生成的告警信息将被发送到设备的SNMP模块,通过设置SNMP中告警信息的发送参数,来决定告警信息输出的相关属性。有关告警信息的详细介绍,请参见“网络管理和监控配置指导”中的“SNMP”。
如果希望生成并输出某种类型的IKE告警信息,则需要保证IKE的全局告警功能以及相应类型的告警功能均处于开启状态。
表2-11 配置IKE 告警功能
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
开启IKE的全局告警功能 |
snmp-agent trap enable ike global |
缺省情况下,IKE的告警Trap功能处于开启状态 |
开启IKE的指定告警功能 |
snmp-agent trap enable ike [ attr-not-support | auth-failure | cert-type-unsupport | cert-unavailable | decrypt-failure | encrypt-failure | invalid-cert-auth | invalid-cookie | invalid-id | invalid-proposal | invalid-protocol | invalid-sign | no-sa-failure | proposal-add | proposal–delete | tunnel-start | tunnel-stop | unsupport-exch-type ] * |
缺省情况下,IKE的所有告警功能均处于开启状态 |
在完成上述配置后,在任意视图下执行display命令可以显示配置后IKE的运行情况,通过查看显示信息验证配置的效果。
在用户视图下执行reset命令可以删除IKE SA。
表2-12 IKE显示和维护
操作 |
命令 |
显示所有IKE提议的配置信息 |
display ike proposal |
显示当前IKE SA的信息 |
display ike sa [ verbose [ connection-id connection-id | remote-address [ ipv6 ] remote-address [ vpn-instance vpn-name ] ] ] |
清除IKE SA |
reset ike sa [ connection-id connection-id ] |
清除IKE的MIB统计信息 |
reset ike statistics |
在Switch A和Switch B之间建立一个IPsec隧道,对Switch A和Switch B之间的数据流进行安全保护。
· Switch A和Switch B之间采用IKE协商方式建立IPsec SA。
· 使用缺省的IKE提议。
· 使用缺省的预共享密钥认证方法。
图2-3 IKE主模式及预共享密钥认证典型组网图
请保证Switch A与Switch B之间路由可达。
(1) 配置Switch A
# 配置Vlan-interface1的IP地址。
<SwitchA> system-view
[SwitchA] interface vlan-interface 1
[SwitchA-vlan-interface1] ip address 1.1.1.1 255.255.255.0
[SwitchA-vlan-interface1] quit
# 配置ACL 3101,定义Switch A和Switch B之间的数据流。
[SwitchA] acl number 3101
[SwitchA-acl-adv-3101] rule 0 permit ip source 1.1.1.1 0 destination 2.2.2.2 0
[SwitchA-acl-adv-3101] quit
# 配置安全提议tran1。
[SwitchA] ipsec transform-set tran1
# 配置安全协议对IP报文的封装形式为隧道模式。
[SwitchA-ipsec-transform-set-tran1] encapsulation-mode tunnel
# 配置采用的安全协议为ESP。
[SwitchA-ipsec-transform-set-tran1] protocol esp
# 配置ESP协议采用的加密算法为AES-CBC-192,认证算法为HMAC-SHA1。
[SwitchA-ipsec-transform-set-tran1] esp encryption-algorithm aes-cbc-192
[SwitchA-ipsec-transform-set-tran1] esp authentication-algorithm sha1
[SwitchA-ipsec-transform-set-tran1] quit
# 创建IKE keychain,名称为keychain1。
[SwitchA] ike keychain keychain1
# 配置与IP地址为2.2.2.2的对端使用的预共享密钥为明文12345zxcvb!@#$%ZXCVB。
[SwitchA-ike-keychain-keychain1] pre-shared-key address 2.2.2.2 255.255.255.0 key simple 12345zxcvb!@#$%ZXCVB
[SwitchA-ike-keychain-keychain1] quit
# 创建IKE profile,名称为profile1。
[SwitchA] ike profile profile1
# 指定引用的IKE keychain为keychain1。
[SwitchA-ike-profile-profile1] keychain keychain1
# 配置匹配对端身份的规则为IP地址2.2.2.2/24。
[SwitchA-ike-profile-profile1] match remote identity address 2.2.2.2 255.255.255.0
[SwitchA-ike-profile-profile1] quit
# 创建一条IKE协商方式的IPsec安全策略,名称为map1,顺序号为10。
[SwitchA] ipsec policy map1 10 isakmp
# 配置IPsec隧道的对端IP地址为2.2.2.2。
[SwitchA-ipsec-policy-isakmp-map1-10] remote-address 2.2.2.2
# 指定引用ACL 3101。
[SwitchA-ipsec-policy-isakmp-map1-10] security acl 3101
# 指定引用的安全提议为tran1。
[SwitchA-ipsec-policy-isakmp-map1-10] transform-set tran1
# 指定引用的IKE profile为profile1。
[SwitchA-ipsec-policy-isakmp-map1-10] ike-profile profile1
[SwitchA-ipsec-policy-isakmp-map1-10] quit
# 在Vlan-interface1上指定“slot 1”为发送和接收当前接口流量的单板。
[SwitchA] interface vlan-interface 1
[SwitchA-Vlan-interface1] service slot 1
# 在Vlan-interface1上应用安全策略组。
[SwitchA-Vlan-interface1] ipsec apply policy map1
(2) 配置Switch B
# 配置Vlan-interface1的IP地址。
<SwitchB> system-view
[SwitchB] interface Vlan-interface1
[SwitchB-Vlan-interface1] ip address 2.2.2.2 255.255.255.0
[SwitchB-Vlan-interface1] quit
# 配置ACL 3101,定义Switch B和Switch A之间的数据流。
[SwitchB] acl number 3101
[SwitchB-acl-adv-3101] rule 0 permit ip source 2.2.2.2 0 destination 1.1.1.0 0
[SwitchB-acl-adv-3101] quit
# 创建IPsec安全提议tran1。
[SwitchB] ipsec transform-set tran1
# 配置安全协议对IP报文的封装形式为隧道模式。
[SwitchB-ipsec-transform-set-tran1] encapsulation-mode tunnel
# 配置采用的安全协议为ESP。
[SwitchB-ipsec-transform-set-tran1] protocol esp
# 配置ESP协议采用的加密算法为AES-CBC-192,认证算法为HMAC-SHA1。
[SwitchB-ipsec-transform-set-tran1] esp encryption-algorithm aes-cbc-192
[SwitchB-ipsec-transform-set-tran1] esp authentication-algorithm sha1
[SwitchB-ipsec-transform-set-tran1] quit
# 创建IKE keychain,名称为keychain1。
[SwitchB]ike keychain keychain1
# 配置与IP地址为1.1.1.1的对端使用的预共享密钥为明文12345zxcvb!@#$%ZXCVB。
[SwitchB-ike-keychain-keychain1] pre-shared-key address 1.1.1.1 255.255.255.0 key simple 12345zxcvb!@#$%ZXCVB
[SwitchB-ike-keychain-keychain1] quit
# 创建IKE profile,名称为profile1。
[SwitchB] ike profile profile1
# 指定引用的IKE keychain为keychain1。
[SwitchB-ike-profile-profile1] keychain keychain1
# 配置匹配对端身份的规则为IP地址1.1.1.1/24。
[SwitchB-ike-profile-profile1] match remote identity address 1.1.1.1 255.255.255.0
[SwitchB-ike-profile-profile1] quit
# 创建一条IKE协商方式的IPsec安全策略,名称为use1,顺序号为10。
[SwitchB] ipsec policy use1 10 isakmp
# 配置IPsec隧道的对端IP地址为1.1.1.1。
[SwitchB-ipsec-policy-isakmp-use1-10] remote-address 1.1.1.1
# 指定引用ACL 3101。
[SwitchB-ipsec-policy-isakmp-use1-10] security acl 3101
# 指定引用的安全提议为tran1。
[SwitchB-ipsec-policy-isakmp-use1-10] transform-set tran1
# 指定引用的IKE profile为profile1。
[SwitchB-ipsec-policy-isakmp-use1-10] ike-profile profile1
[SwitchB-ipsec-policy-isakmp-use1-10] quit
# 在Vlan-interface1上指定“slot 1”为发送和接收当前接口流量的单板。
[SwitchB] interface vlan-interface 1
[SwitchB-Vlan-interface1] service slot 1
# 在Vlan-interface1上应用安全策略组。
[SwitchB-Vlan-interface1] ipsec apply policy use1
以上配置完成后,Switch A和Switch B之间如果有端到端的报文发送或接收,将触发IKE协商。
(1) 通过如下命令查看当前的IKE SA信息,发现IKE SA的状态(Flags字段)为Unknown。
<Sysname> display ike sa
Connection-ID Remote Flag DOI
------------------------------------------------------------------
1 192.168.222.5 Unknown IPSEC
Flags:
RD--READY RL--REPLACED FD-FADING
(2) 打开IKE事件和报文调试信息开关后分别可以看到如下调试信息。
IKE事件调试信息:
The attributes are unacceptable.
IKE报文调试信息:
Construct notification packet: NO_PROPOSAL_CHOSEN.
IKE提议配置错误。
(1) 排查IKE提议相关配置。具体包括:检查两端的IKE提议是否匹配,即IKE提议中的认证方法、认证算法、加密算法是否匹配。
(2) 修改IKE提议的配置,使本端IKE提议的配置和对端匹配。
(1) 通过如下命令查看当前的IKE SA信息,发现IKE SA的状态(Flags字段)为Unknown。
<Sysname> display ike sa
Connection-ID Remote Flag DOI
------------------------------------------------------------------
1 192.168.222.5 Unknown IPSEC
Flags:
RD--READY RL--REPLACED FD-FADING
(2) 打开IKE事件和报文调试信息开关后分别可以看到如下调试信息。
IKE事件调试信息:
Notification PAYLOAD_MALFORMED is received.
IKE报文调试信息:
Construct notification packet: PAYLOAD_MALFORMED.
故障原因可能为以下两点:
(1) 匹配到的IKE profile中没有引用协商过程中匹配到的IKE提议。
通过调试信息看到:
Failed to find proposal 1 in profile profile1.
(2) 匹配到的IKE profile中没有引用协商过程中匹配到的IKE keychain。
通过调试信息看到:
Failed to find keychain keychain1 in profile profile1.
(1) 检查匹配到的IKE提议是否在IKE profile下引用。以故障分析中的调试信息为例,IKE profile profile1中需要引用IKE proposal 1。
(2) 检查匹配到的IKE keychain是否在IKE profile下引用。以故障分析中的调试信息为例,IKE profile profile1中需要引用IKE keychain keychain1。
(1) 通过display ike sa命令查看当前的IKE SA信息,发现IKE SA协商成功,其状态(Flags字段)为RD。但通过display ipsec sa命令查看当前的IPsec SA时,发现没有协商出相应的IPsec SA。
(2) 打开IKE调试信息开关可以看到以下调试信息:
The attributes are unacceptable.
或者:
Construct notification packet: NO_PROPOSAL_CHOSEN.
IPsec安全策略参数配置错误。
(1) 排查IPsec相关配置。具体包括:检查双方接口上应用的IPsec安全策略的参数是否匹配,即引用的IPsec安全提议的协议、加密算法和认证算法是否匹配。
(2) 修改IPsec安全策略配置,使本端IPsec安全策略的配置和对端匹配。
(1) 通过display ike sa命令查看当前的IKE SA信息,发现IKE SA协商成功,其状态(Flags字段)为RD。但通过display ipsec sa命令查看当前的IPsec SA时,发现没有协商出相应的IPsec SA。
(2) 打开IKE调试信息开关可以看到以下调试信息:
Notification INVALID_ID_INFORMATION is received.
或者:
Failed to get IPsec policy when renegotiating IPsec SA. Delete IPsec SA.
Construct notification packet: INVALID_ID_INFORMATION.
响应方IPsec安全策略配置错误,导致在IKE第二阶段协商时找不到IPsec安全策略,原因可能为如下几点:
(1) 通过display ike sa verbose命令查看IKE一阶段协商中是否找到匹配的IKE profile。若没有找到IKE profile,则会查找全局的IKE参数,因此就要求这种情况下IPsec安全策略中不能引用任何IKE profile,否则协商失败。
通过如下显示信息可以看到,IKE SA在协商过程中没有找到匹配的IKE profile:
<Sysname> display ike sa verbose
-----------------------------------------------
Connection ID: 3
Outside VPN:
Inside VPN:
Profile:
Transmitting entity: Responder
-----------------------------------------------
Local IP: 192.168.222.5
Local ID type: IPV4_ADDR
Local ID: 192.168.222.5
Remote IP: 192.168.222.71
Remote ID type: IPV4_ADDR
Remote ID: 192.168.222.71
Authentication-method: PRE-SHARED-KEY
Authentication-algorithm: MD5
Encryption-algorithm: 3DES-CBC
Life duration(sec): 86400
Remaining key duration(sec): 85847
Exchange-mode: Main
Diffie-Hellman group: Group 1
NAT traversal: Not detected
但在IPsec策略中引用了IKE profile profile1:
[Sysname] display ipsec policy
-------------------------------------------
IPsec Policy: policy1
Interface: Vlan-interface1
-------------------------------------------
-----------------------------
Sequence number: 1
Mode: isakmp
-----------------------------
Description:
Security data flow: 3000
Selector mode: aggregation
Local address: 192.168.222.5
Remote address: 192.168.222.71
Transform set: transform1
IKE profile: profile1
SA duration(time based):
SA duration(traffic based):
SA idle time:
(2) 查看IPsec安全策略中引用的ACL配置是否正确。
例如,如发起方ACL流范围为网段到网段:
[Sysname] display acl 3000
Advanced ACL 3000, named -none-, 2 rules,
ACL's step is 5
rule 0 permit ip source 192.168.222.0 0.0.0.255 destination 192.168.222.0 0.0.0.255
响应方ACL流范围为主机到主机:
[Sysname] display acl 3000
Advanced ACL 3000, named -none-, 2 rules,
ACL's step is 5
rule 0 permit ip source 192.168.222.71 0 destination 192.168.222.5 0
以上配置中,响应方ACL规则定义的流范围小于发起方ACL规则定义的流范围,这会导致IPsec SA协商失败。
(3) IPsec 安全策略配置不完整。具体包括:没有配置对端地址、没有配置IPsec提议、IPsec提议配置不完整。
例如,如下IPsec安全策略中没有配置隧道的对端IP地址,因此IPsec安全策略是不完整的:
[Sysname] display ipsec policy
-------------------------------------------
IPsec Policy: policy1
Interface: Vlan-interface1
-------------------------------------------
-----------------------------
Sequence number: 1
Mode: isakmp
-----------------------------
Description:
Security data flow: 3000
Selector mode: aggregation
Local address: 192.168.222.5
Remote address:
Transform set: transform1
IKE profile: profile1
SA duration(time based):
SA duration(traffic based):
SA idle time:
(1) 若在IKE第一阶段协商过程中没有找到IKE profile,在响应方IPsec安全策略中去掉对IKE profile的引用。以故障分析(1)中的配置为例,需要去掉IPsec策略中对IKE profile profile1的引用。
(2) 若响应方ACL规则定义的流范围小于发起方ACL规则定义的流范围,建议修改响应方ACL的流范围大于或等于发起方ACL的流范围。以故障分析(2)中的配置为例,可以将响应方ACL流范围修改为:
[Sysname] display acl 3000
Advanced ACL 3000, named -none-, 2 rules,
ACL's step is 5
rule 0 permit ip source 192.168.222.0 0.0.0.255 destination 192.168.222.0 0.0.0.255
(3) 将IPsec安全策略配置完整。以故障分析中的(3)中的配置为例,需要在IPsec安全策略中配置隧道的对端IP地址。
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!