IPSec以及GRE原理
企业对网络安全性的需求日益提升,而传统的TCP/IP协议缺乏有效的安全认证和保密机制。IPSec(Internet Protocol Security)作为一种开放标准的安全框架结构,可以用来保证IP数据报文在网络上传输的机密性、完整性和防重放。
机密性(Confidentiality)指对数据进行加密保护,用密文的形式传送数据。
完整性(Data integrity)指对接收的数据进行认证,以判定报文是否被篡改。
防重放(Anti-replay)指防止恶意用户通过重复发送捕获到的数据包所进行的攻击,即接收方会拒绝旧的或重复的数据包。
企业远程分支机构可以通过使用IPSec VPN建立安全传输通道,接入到企业总部网络
IPSec是网络层加密
SSL是应用层加密(web服务器)SSL更安全、容易实现、控制更精细,但是对C/S结构支持度不高,通常在B/S结构使用.
IPSec由三个协议组成
AH ESP IKE
AH协议:主要提供的功能有数据源验证、数据完整性校验和防报文重放功能。然而,AH并不加密所保护的数据报。
ESP协议:提供AH协议的所有功能外(但其数据完整性校验不包括IP头),还可提供对IP报文的加密功能。
IKE协议:用于自动协商AH和ESP所使用的密码算法。(不一定用到,可以手工指定)
SA安全联盟定义了IPSec通信对等体间将使用的数据封装模式、认证和加密算法、秘钥等参数。SA是单向的,两个对等体之间的双向通信,至少需要两个SA。如果两个对等体希望同时使用AH和ESP安全协议来进行通信,则对等体针对每一种安全协议都需要协商一对SA。
SA由一个三元组来唯一标识,这个三元组包括安全参数索引SPI(Security Parameter Index)、目的IP地址、安全协议(AH或ESP)。
建立SA的方式有以下两种:
手工方式:安全联盟所需的全部信息都必须手工配置。手工方式建立安全联盟比较复杂,但优点是可以不依赖IKE而单独实现IPSec功能。当对等体设备数量较少时,或是在小型静态环境中,手工配置SA是可行的。
IKE动态协商方式:只需要通信对等体间配置好IKE协商参数,由IKE自动协商来创建和维护SA。动态协商方式建立安全联盟相对简单些。对于中、大型的动态网络环境中,推荐使用IKE协商建立SA。
IKE协议提供密钥协商,建立和维护安全联盟SA等服务。
IPSec协议有两种封装模式:传输模式和隧道模式
IPSec传输模式的IP头部是不加密的,数据是隐藏的
AH必定在高层协议前面,ESP头部在高层协议前,尾部及认证字段在数据后
传输模式中,在IP报文头和高层协议之间插入AH或ESP头。传输模式中的AH或ESP主要对上层协议数据提供保护。
传输模式中的AH:在IP头部之后插入AH头,对整个IP数据包进行完整性校验。
传输模式中的ESP:在IP头部之后插入ESP头,在数据字段后插入尾部以及认证字段。对高层数据和ESP尾部进行加密,对IP数据包中的ESP报文头,高层数据和ESP尾部进行完整性校验。
传输模式中的AH+ESP:在IP头部之后插入AH和ESP头,在数据字段后插入尾部以及认证字段。
IPSec岁的模式是生成一个新的IP头部
AH与ESP头部在原IP头部前面,ESP尾部及认证字段在数据后
隧道模式中,AH或ESP头封装在原始IP报文头之前,并另外生成一个新的IP头封装到AH或ESP之前。隧道模式可以完全地对原始IP数据报进行认证和加密,而且,可以使用IPSec对等体的IP地址来隐藏客户机的IP地址。
隧道模式中的AH:对整个原始IP报文提供完整性检查和认证,认证功能优于ESP。但AH不提供加密功能,所以通常和ESP联合使用。
隧道模式中的ESP:对整个原始IP报文和ESP尾部进行加密,对ESP报文头、原始IP报文和ESP尾部进行完整性校验。
隧道模式中的AH+ESP:对整个原始IP报文和ESP尾部进行加密,AH、ESP分别会对不同部分进行完整性校验。
上面这段建议看ppt的图
兴趣流:特定用户的数据流
配置的步骤
1、配置网络通畅
2、定义数据流 可以通过配置ACL来定义和区分不同的数据流
3、创建IPSec安全提议 IPSec提议定义了保护数据流所用的安全协议、认证算法、加密算法和封装模式
4、配置IPSec安全策略 IPSec策略中会应用IPSec提议中定义的安全协议、认证算法、加密算法和封装模式。每一个IPSec安全策略都使用唯一的名称和序号来标识。IPSec策略可分成两类:手工建立SA的策略和IKE协商建立SA的策略。
5、在接口上应用
IPSec VPN用于在两个端点之间提供安全的IP通信,但只能加密并传播单播数据,无法加密和传输语音、视频、动态路由协议信息等组播数据流量。
通用路由封装协议GRE(Generic Routing Encapsulation)提供了将一种协议的报文封装在另一种协议报文中的机制,是一种隧道封装技术。GRE可以封装组播数据,并可以和IPSec结合使用,从而保证语音、视频等组播业务的安全。
GRE本身不能加密所以常常与IPSec一起使用
GRE支持将一种协议的报文封装在另一种协议报文中。GRE用来对某些网络层协议如IPX(Internet Packet Exchange)的报文进行封装,使这些被封装的报文能够在另一网络层协议(如IP)中传输。GRE可以解决异种网络的传输问题。
GRE可以解决异种网络的传输问题。IPSec VPN技术可以创建一条跨越共享公网的隧道,从而实现私网互联。IPSec VPN能够安全传输IP报文,但是无法在隧道的两个端点之间运行RIP和OSPF等路由协议。GRE可以将路由协议信息封装在另一种协议报文(例如IP)中进行传输。
GRE隧道扩展了受跳数限制的路由协议(最多十五个,第十六个就学不到了)的工作范围,支持企业灵活设计网络拓扑。使用GRE可以克服IGP协议的一些局限性。例如,RIP路由协议是一种距离矢量路由协议,最大跳数为15。如果网络直径超过15,设备将无法通信。这种情况下,可以使用GRE技术在两个网络节点之间搭建隧道,隐藏它们之间的跳数,扩大网络的工作范围。
报文结构:
净荷:封装前的报文称为净荷
乘客协议:封装前的报文协议称为乘客协议
GRE封装协议/运载协议:以上两者封装后会封装GRE头部,GRE成为封装协议,也叫运载协议
传输协议:最后负责对封装后的报文进行转发的协议称为传输协议。
封装和解封装过程:
设备从连接私网的接口接收到报文后,检查报文头中的目的IP地址字段,在路由表查找出接口,如果发现出接口是隧道接口,则将报文发送给隧道模块进行处理。
隧道模块接收到报文后首先根据乘客协议的类型和当前GRE隧道配置的校验和参数,对报文进行GRE封装,即添加GRE报文头。
然后,设备给报文添加传输协议报文头,即IP报文头。该IP报文头的源地址就是隧道源地址,目的地址就是隧道目的地址。(这里配完后就会自动去找目标IP地址,是直连网段然后直接传输)
最后,设备根据新添加的IP报文头目的地址,在路由表中查找相应的出接口,并发送报文。之后,封装后的报文将在公网中传输。
接收端设备从连接公网的接口收到报文后,首先分析IP报文头,如果发现协议类型字段的值为47,表示协议为GRE,于是出接口将报文交给GRE模块处理。GRE模块去掉IP报文头和GRE报文头,并根据GRE报文头的协议类型字段,发现此报文的乘客协议为私网中运行的协议,于是将报文交给该协议处理。
C:校验和验证,发送方用GRE头和payload进行校验计算,并把值发送给接收方,接收方同样进行计算并进行对比校验和。启用该功能则进行校验,不启动则不进行校验,不要求双方校验状态必须一致。
Recursion:记录对报文进行GRE封装次数,一个数据报文最多封装3次,3次以上则丢弃,防止报文被无限封装。
关键字(Key)验证是指对隧道接口进行校验,这种安全机制可以防止错误接收到来自其他设备的报文。关键字字段是一个四字节长的数值,若GRE报文头中的K位为1,则在GRE报文头中会插入关键字字段。只有隧道两端设置的关键字完全一致时才能通过验证,否则报文将被丢弃。
Keepalive
GRE协议本身不具备检测链路状态功能
Keepalive检测功能用于检测隧道对端是否可达
我们要明确我们谈的是TCP的 KeepAlive 还是HTTP的 Keep-Alive。TCP的KeepAlive和HTTP的Keep-Alive是完全不同的概念,不能混为一谈。实际上HTTP的KeepAlive写法是Keep-Alive,跟TCP的KeepAlive写法上也有不同。
Keepalive检测功能用于在任意时刻检测隧道链路是否处于Keepalive状态,即检测隧道对端是否可达。如果对端不可达,隧道连接就会及时关闭,避免形成数据空洞。使能Keepalive检测功能后,GRE隧道本端会定期向对端发送Keepalive探测报文。若对端可达,则本端会收到对端的回应报文;若对端不可达,则收不到对端的回应报文。如果在隧道一端配置了Keepalive功能,无论对端是否配置Keepalive,配置的Keepalive功能在该端都生效。隧道对端收到Keepalive探测报文,无论是否配置Keepalive,都会给源端发送一个回应报文。(心跳包)
使能Keepalive检测功能后,GRE隧道的源端会创建一个计数器,并周期性地发送Keepalive探测报文,同时进行不可达计数。每发送一个探测报文,不可达计数加1。
如果源端在计数器值达到预先设置的值之前收到回应报文,则表明对端可达。如果计数器值达到预先设置的重试次数,源端还是没有收到回应报文,则认为对端不可达。此时,源端将关闭隧道连接。