IPSEC VPN

IPSecVPN

1.什么是IPSEC?

互联网安全协议(Internet Protocol Security)是一个协议包,透过对IP协议的分组进行加密和认证的网络传输协议族(一些相互关联的协议的集合)

IPsec主要由以下协议组成[1][2]

  1. 认证头(AH),为IP数据报提供无连接数据完整性消息认证以及防重放攻击保护[3][4]

  2. 封装安全载荷(ESP),提供机密性、数据源认证、无连接完整性、防重放和有限的传输流(traffic-flow)机密性[5]

  3. 因特网密钥交换(英语: Internet Key Exchange ,简称IKE或IKEv2),为 AH、ESP 操作所需的 安全关联(SA) 提供算法、数据包和密钥参数[6]

    IPsec协议工作在OSI模型的第三层,使其在单独使用时适于保护基于TCPUDP的协议(如安全套接子层SSL)就不能保护UDP层的通信流)。这就意味着,与传输层或更高层的协议相比,IPsec协议必须处理可靠性和分片的问题,这同时也增加了它的复杂性和处理开销。相对而言,SSL/TLS依靠更高层的TCP(OSI的第四层)来管理可靠性和分片。

2.认证头(AH(Authentication Header))(协议号51)

认证头(Authentication Header,AH)被用来保证被传输分组的完整性和可靠性。此外,它还保护不受重放攻击。认证头试图保护IP数据报的所有字段,那些在传输IP分组的过程中要发生变化的字段就只能被排除在外。当认证头使用非对称数字签名算法(如RSA)时,可以提供不可否认性
认证头字段含义:

  • 下一个头:标识被传送数据所属的协议。
  • 载荷长度:认证头包的大小。
  • 保留:为将来的应用保留(目前都置为0)。
  • 安全参数索引:与IP地址一同用来标识安全参数。
  • 串行号:单调递增的数值,用来防止重放攻击。
  • 认证数据:包含了认证当前包所必须的数据。

AH协议会对数据和ip包头进行校验,因此AH协议不能穿透NAT,并且AH协议不会对数据进行加密,只会对数据进行校验

3.封装载荷(协议号50)

封装安全载荷(Encapsulating Security Payload,ESP)协议对分组提供了源可靠性、完整性和保密性的支持。与AH头不同的是,IP分组头部不被包括在内。

封装载荷

  • 安全参数索引:与IP地址一同用来标识安全参数
  • 串行号:单调递增的数值,用来防止重放攻击。
  • 载荷数据:如果没使用ESP的加密功能,则载荷数据域的内容是“下一个头”所指示的数据;如果使用了ESP的加密功能,则使用加密载荷数据和ESP尾部数据所得的密文作为payload data.
  • 填充:某些块加密算法用此将数据填充至块的长度。
  • 填充长度:以位为单位的填充数据的长度。
  • 下一个头:标识载荷中封装的数据所属的协议。
  • 认证数据:又叫做完整性校验值(ICV)。包含了认证当前包所必须的数据。

ESP协议不校验ip包头,并且提供数据包的加密和校验。

4.IPsecVPN搭建

ipsecvpn实现有很多软件包的实现,这里基于archlinux使用strongswan实现ipsecvpn的搭建
1.安装ipsecvpn

1
sudo pacman -S strongswan

IPSEC VPN
https://dreamaccount.github.io/2022/04/27/IPSecVPN/
作者
404NotFound
发布于
2022年4月27日
许可协议