IPsec 全称 IP Security,顾名思义它是一个用于保证通信安全的协议,并且多半是在 IP frame 上做的手脚。下面我们来了解一下它。
什么是 IPsec
IPsec 不是一个单独的协议,它是一个协议组。它的目的是为网络层安全提供一个稳定,持久的基础,可用于设备之间的加密连接。它可以保证数据在公网上传输的安全,并且常用于 VPN。它的工作原理是加密 IP 数据包,同时验证数据包的来源。IPsec 通常使用 500 端口。
并非所有 VPN 都是通过 IPsec 实现的,有些 VPN 使用的是 SSL/TLS 协议,它们之间的区别在于它们作用在不同的协议层上。SSL/TLS 作用在传输层。
IPsec 工作流程
IPsec 连接经历以下步骤:
- Key exchange,交换密钥;要保证数据的安全,则需要为数据包进行加密,在为数据包加密之前,需要保证通信双方拥有对应的密钥,交换密钥就是一件很重要的事情;在这一步会使用到
IKE
协议; - Packet headers and trailers,修改报文;IPsec 在报文头部或尾部增加了一些用于验证和加密的信息;
- Authentication,验证,IPsec 为每个数据包都提供了验证机制,保证该数据包来自可信的设备;可以使用
AH
或者ESP
协议; - Encyption,加密,IPsec 使用密钥为载荷进行加密,保证数据安全;可以使用
ESP
协议; - Transmission,转发,主要使用 UDP 协议而非 TCP 协议;
- Decryption,解密,与加密相对应;
对比 SSL/TLS 协议,SSL/TLS 使用的是非对称加密,在握手时服务端需要向客户端发送公钥,而为了保证公钥不被篡改,又需要通过证书机制来保证。
协议族
- Authentication Headers(AH),为 IP 数据报提供无连接数据完整性和数据源身份验证,并提供针对重放攻击的保护
- Encapsulating Security Payloads(ESP),提供机密性、无连接数据完整性、数据源身份验证、抗重播服务(部分序列完整性的一种形式)和有限的流量流机密性
- Internet Security Association and Key Management Protocol(ISAKMP),提供验证与密钥交换,IKE 与 IKEv2 协议。
AH
(有空再看)https://en.wikipedia.org/wiki/IPsec
ESP
(有空再看)https://en.wikipedia.org/wiki/IPsec
SA
(有空再看)https://en.wikipedia.org/wiki/IPsec https://sc1.checkpoint.com/documents/R76/CP_R76_VPN_AdminGuide/13847.htm
算法
-
对称加密算法
- HMAC-SHA1/SHA2
- TripleDes-CBC
- AES-CBC AES-CTR
- AES-GCM ChaCha20-Poly1305
-
密钥交换算法
- Diffie-Hellman
- ECDH
-
验证算法
- RSA
- ECDSA
- PSK
tunnel 和 transport 模式
- tunnel:
在 tunnel 模式用于两个专用的路由器之间,两个路由器分别充当隧道的两端,起始端路由器会加密 IP 报文头以及载荷部分,同时会添加一个新的 IP 报文头,用来告诉中继路由器如何转发报文,在 tunnel 的终端,终端路由器会解密出原始的 IP 报文头,并发送到最终的目标机上。
- transport:
transport 模式只加密载荷部分,不加密 IP 报文头,中继路由器可以直接看到每个包的目标机(除非你又用了其他的隧道协议,比如 GRE)。
MSS 和 MTU
MSS 用于描述数据包的载荷大小,MTU 描述整个数据包的大小(包括报文头)。IPsec 添加了额外的报文头和报文尾。使用了 IPsec 的网络,要么需要调整 MSS 和 MTU 的大小,要么数据包将被分割且增加延迟。通常来说 MTU 大小为 1500 bytes,通常一个 IP header 大小在 20 bytes,TCP header 20 bytes,这意味着载荷大小为 1460 bytes。而 IPsec 增加了一个验证头,一个 ESP 头,以及相关的 trailers。这些加起来大概有 50-60 bytes,甚至更多。