什么是IPsec与VPN?
IPsec(Internet Protocol Security)是为IP网络提供安全性的协议和服务的集合,它是VPN(Virtual Private Network,虚拟专用网)中常用的一种技术。 由于IP报文本身没有集成任何安全特性,IP数据包在公用网络如Internet中传输可能会面临被伪造、窃取或篡改的风险。通信双方通过IPsec建立一条IPsec隧道,IP数据包通过IPsec隧道进行加密传输,有效保证了数据在不安全的网络环境如Internet中传输的安全性。
那么VPN(Virtual Private Network,虚拟专用网)是一种在公用网络上建立专用网络的技术。它之所以称之为虚拟网,主要是因为VPN的两个节点之间并没有像传统专用网那样使用端到端的物理链路,而是架构在公用网络如Internet之上的逻辑网络,用户数据通过逻辑链路传输。
按照VPN协议分,常见的VPN种类有:IPsec、SSL、GRE、PPTP和L2TP等。其中IPsec是通用性较强的一种VPN技术,适用于多种网络互访的场景。
IPsec VPN是指采用IPsec实现远程接入的一种VPN技术,通过在公网上为两个或多个私有网络之间建立IPsec隧道,并通过加密和验证算法保证VPN连接的安全。
IPsec VPN保护的是点对点之间的通信,通过IPsec VPN可以在主机和主机之间、主机和网络安全网关之间或网络安全网关(如路由器、防火墙)之间建立安全的隧道连接。其协议主要工作在IP层,在IP层对数据包进行加密和验证。
相对于其他VPN技术,IPsec VPN安全性更高,数据在IPsec隧道中都是加密传输,但相应的IPsec VPN在配置和组网部署上更复杂。
IPsec加密通讯过程
IPsec的工作原理大致可以分为4个阶段:
1、识别“感兴趣流”。网络设备接收到报文后,通常会将报文的五元组等信息和IPsec策略进行匹配来判断报文是否要通过IPsec隧道传输,需要通过IPsec隧道传输的流量通常被称为“感兴趣流”。
协商安全联盟(Security Association,以下简称SA)。SA是通信双方对某些协商要素的约定,比如双方使用的安全协议、数据传输采用的封装模式、协议采用的加密和验证算法、用于数据传输的密钥等,通信双方之间只有建立了SA,才能进行安全的数据传输。
识别出感兴趣流后,本端网络设备会向对端网络设备发起SA协商。在这一阶段,通信双方之间通过IKE协议先协商建立IKE SA(用于身份验证和密钥信息交换),然后在IKE SA的基础上协商建立IPsec SA(用于数据安全传输)。
2、数据传输。IPsec SA建立成功后,双方就可以通过IPsec隧道传输数据了。
IPsec为了保证数据传输的安全性,在这一阶段需要通过AH或ESP协议对数据进行加密和验证。加密机制保证了数据的机密性,防止数据在传输过程中被窃取;验证机制保证了数据的真实可靠,防止数据在传输过程中被仿冒和篡改。
3、IPsec发送方会使用加密算法和加密密钥对报文进行加密,即将原始数据“乔装打扮”封装起来。然后发送方和接收方分别通过相同的验证算法和验证密钥对加密后的报文进行处理得到完整性校验值ICV。如果两端计算的ICV相同则表示该报文在传输过程中没有被篡改,接收方对验证通过的报文进行解密处理;如果ICV不相同则直接丢弃报文。
4、隧道拆除。通常情况下,通信双方之间的会话老化(连接断开)即代表通信双方数据交换已经完成,因此为了节省系统资源,通信双方之间的隧道在空闲时间达到一定值后会自动删除。
IPsec的3个重要协议- IKE/AH/ESP
IKE(Internet Key Exchange,因特网密钥交换)
IKE协议是一种基于UDP的应用层协议,它主要用于SA协商和密钥管理。
IKE协议分IKEv1和IKEv2两个版本,IKEv2与IKEv1相比,修复了多处公认的密码学方面的安全漏洞,提高了安全性能,同时简化了安全联盟的协商过程,提高了协商效率。
IKE协议属于一种混合型协议,它综合了ISAKMP(Internet Security Association and Key Management Protocol)、Oakley协议和SKEME协议这三个协议。其中,ISAKMP定义了IKE SA的建立过程,Oakley和SKEME协议的核心是DH(Diffie-Hellman)算法,主要用于在Internet上安全地分发密钥、验证身份,以保证数据传输的安全性。IKE SA和IPSec SA需要的加密密钥和验证密钥都是通过DH算法生成的,它还支持密钥动态刷新。
AH(Authentication Header,认证头)
AH协议用来对IP报文进行数据源认证和完整性校验,即用来保证传输的IP报文的来源可信和数据不被篡改,但它并不提供加密功能。AH协议在每个数据包的标准IP报文头后面添加一个AH报文头,AH协议对报文的完整性校验的范围是整个IP报文。
ESP(Encapsulating Security Payload,封装安全载荷)
ESP协议除了对IP报文进行数据源认证和完整性校验以外,还能对数据进行加密。ESP协议在每一个数据包的标准IP报头后方添加一个ESP报文头,并在数据包后方追加一个ESP尾(ESP Trailer和ESP Auth data)。ESP协议在传输模式下的数据完整性校验范围不包括IP头,因此它不能保证IP报文头不被篡改。
AH和ESP可以单独使用,也可以同时使用。AH和ESP同时使用时,报文会先进行ESP封装,再进行AH封装;IPsec解封装时,先进行AH解封装,再进行ESP解封装。
IPsec使用的端口
IPsec中IKE协议采用UDP 500端口发起和响应协商,因此为了使IKE协商报文顺利通过网关设备,通常要在网关设备上配置安全策略放开UDP 500端口。另外,在IPsec NAT穿越场景下,还需要放开UDP 4500端口。
而AH和ESP属于网络层协议,不涉及端口。为了使IPsec隧道能正常建立,通常还要在网关设备上配置安全策略放开AH(IP协议号是51)和ESP(IP协议号是50)服务。
centos搭建ipsec vpn过程
我们以google的strongswan为例来单间一个基于ipsec的vpn网络。
strongSwan是Linux/Unix上基于IPSec的VPN开源解决方案,支持iKEV1和iKEV2, 并且能完美地与Kernel space的NETKEY IPsec协议栈协同工作。
strongSwan最大的优势是安全等级高,兼容性好。现在主流的OS,例如Android, iOS, Mac OS X和Windows 7/8, 其自带的IPsec的软件就能直接连接strongSwan VPN。
安装环境:
系统:CentOS 7.4
内存:1G
软件版本:strongSwan5.6.1
1. 安装strongSwan
大家可以到官网去下载最新版本,下载地址为:https://www.strongswan.org/download.html 接下来是根据官网的文档进行安装。
# 首先,需要下载最新的epel-release,下载地址:http://dl.fedoraproject.org/pub/epel/7/x86_64/e/
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
# 其次,安装epel-release
rpm -Uvh epel-release-7-11.noarch.rpm
# 最后,安装strongSwan
yum install strongswan -y
# 特殊说明,如果没有安装openssl 还要进行安装
yum install openssl -y
2. 创建证书
# 进入证书目录
cd /etc/strongswan/ipsec.d/
# 下载证书(服务器证书)
wget https://raw.githubusercontent.com/michael-loo/strongswan_config/8c6721a4a49ac0382ee9d48ed99abce676bde1c0/server_key.sh
# 对下载的证书添加执行权限
chmod a+x server_key.sh
# YOUR_SERVER_IP为你服务器的IP地址
./server_key.sh YOUR_SERVER_IP
# 下载证书(客户端证书)
wget https://github.com/michael-loo/strongswan_config/raw/8c6721a4a49ac0382ee9d48ed99abce676bde1c0/client_key.sh
# 对下载的证书添加执行权限
chmod a+x client_key.sh
# NAME 为你的用户名,使用英文名称,更换“USER@MAIL.COM”为你自己的电子邮箱
./client_key.sh NAME USER@MAIL.COM
此时会提示你输入两次密码,密码输入成功后,会生成你刚刚输入的“用户名称.p12”文件。
3. 配置strongSwan
# 修改 ipsec.conf 文件
vi /etc/strongswan/ipsec.conf
# 文件内容按如下修改,也可以将内容删除后,复制如下内容。
config setup
uniqueids=never
charondebug="cfg 2, dmn 2, ike 2, net 0"
conn %default
left=%defaultroute
leftsubnet=0.0.0.0/0
leftcert=vpnHostCert.pem
right=%any
rightsourceip=172.16.1.100/16conn
CiscoIPSec
keyexchange=ikev1
fragmentation=yes
rightauth=pubkey
rightauth2=xauth
leftsendcert=always
rekey=no
auto=addconn
XauthPsk
keyexchange=ikev1
leftauth=psk
rightauth=psk
rightauth2=xauth
auto=addconn
IpsecIKEv2
keyexchange=ikev2
leftauth=pubkey
rightauth=pubkey
leftsendcert=always
auto=addconn
IpsecIKEv2-EAP
keyexchange=ikev2
ike=aes256-sha1-modp1024!
rekey=no
leftauth=pubkey
leftsendcert=always
rightauth=eap-mschapv2
eap_identity=%any
auto=add
# 修改 strongSwan的配置文件
vi /etc/strongswan/strongswan.conf
# 将文件内容按如下修改,也可以将内容删除后,复制如下内容。
charon {
load_modular = yes
duplicheck.enable = no
compress = yes
plugins {
include strongswan.d/charon/*.conf
}
dns1 = 8.8.8.8
dns2 = 8.8.4.4
nbns1 = 8.8.8.8
nbns2 = 8.8.4.4
}
include strongswan.d/*.conf
4. 创建VPN用户
# 编辑/etc/strongswan/ipsec.secrets
vi /etc/strongswan/ipsec.secrets
# 修改文件内容,此内容为用户名与密码,USER为你添加的用户名;PASSWORD为你设置的密码,如果多个用户,可以分行写,EAP与XAUTH为认证模式,需要注意的是“:”两边是空格。
: RSA vpnHostKey.pem
: PSK "PSK_KEY"
USER %any : EAP "PASSWORD"
USER1 %any : XAUTH "PASSWORD"
5. 配置防火墙
# 修改IP转发
vi /etc/sysctl.conf
# 文件内容加入如下
net.ipv4.ip_forward=1
# 让配置生效
sysctl -p
# 输入如下四条命令
firewall-cmd --permanent --add-service="ipsec"
firewall-cmd --permanent --add-port=4500/udp
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
6. 开启VPN服务
# 开启服务,并设置为开机自启动。
systemctl start strongswan
systemctl enable strongswan
7. 客户端设置说明
将证书拷贝到本地将服务器上的文件etc/strongswan/ipsec.d/用户名.p12和/etc/strongswan/ipsec.d/cacerts/strongswanCert.pem拷贝到本地。
在客户端安装上述两个证书如果你是使用iPhone, 可以通过邮件将这个两个证书发送到iPhone上然后安装。iPhone, Android, Windows PC都可以通过证书加密码的方式登录VPN;
Mac OS X可以通过PSK key加密码的方式登录。
参考https://info.support.huawei.com/info-finder/encyclopedia/zh/IPsec.html
网友回复