虚拟专用网实验
目标
了解什么是虚拟专用网(VPN),知道 VPN 的原理和应用。通过实验理解 IPSec 和 VPN 的关系和必要性。
本篇文章为实验记录,仅供交流学习使用,切勿违法应用,所有文中提到的工具不提供下载。
原理
虚拟专用网 (VPN)[1]
虚拟专用网(Virtual Private Network,VPN)是利用 Internet 等公共网络的基础设施,通过隧道技术,为用户提供的与专用网络具有相同通信功能的安全数据通道。“虚拟” 是指用户无需建立各自专用的物理线路,而利用 Internet 等公共网络资源和设备建立一条逻辑上的专用数据通道,并实现与专用数据通道相同的通信功能。“专用网络” 是指虚拟出来的网络并非任何连接在公共网络上的用户都能使用,只有经过授权的用户才可使用。
该通道内传输数据经过加密和认证,可保证传输内容的完整性和机密性。
IPSec
互联网安全协议(英语:Internet Protocol Security,缩写为 IPsec),是一个协议包,通过对 IP 协议的分组进行加密和认证来保护 IP 协议的网络传输协议族(一些相互关联的协议的集合)。由认证头(AH)、封装安全载荷(ESP)、安全关联(SA)组成。
IPSec 被设计用来提供入口之间和端到端之间的通信安全,无论哪一种模式都可以用来构建虚拟专用网(VPN)。
步骤和关键技术
IPSec 协议配置
Windows XP 端的 IP 为 192.168.235.136,Windows 2000 端的 IP 为 192.168.235.141
-
在 WindowsXP 下打开 “控制面板→管理工具→本地安全策略”,找到 “IP 安全策略,在本地计算机”。双击进入。然后右击 “安全服务器”,点击指派规则。

-
双击 “安全服务器” 进入其设置,双击 “所有 ICMP 通讯量” 进入规则设置。

-
在 “筛选器操作” 选项卡中,选择 “需要安全”。

-
在 “身份验证方法” 选项卡中,添加一个共享密钥。记住此密钥,在另一端要做同样的设置。



-
只在一端配置时,ping 端会直接显示 Request timed out。双端配置时,会显示 Negotiating IP Security。正确配置时,会先显示 Negotiating IP Security,然后才会显示 ping 的 reply,代表双端成功建立了连接。可以在 win2000 端的 IP 安全监视器中看到连过来的 xp 设备。



当然,也可以配置专用的 IPSec 安全策略,不使用系统默认值。过程类似,不再赘述。
OpenVPN 配置
本部分实验使用 WindowsXP 和 Windows2000 共同完成,WindowsXP 充当服务端,Windows2000 充当客户端。
事先下载安装好 openssl 库,否则会报 “命令不存在” 的错误。
-
首先安装 OpenVPN。安装过程一路下一步即可。
-
将安装目录 easy-rsa 下
vars.bat.sample文件换成自己的信息,然后更名为vars.bat。vars.bat 1
2...
set <KEY>=<VALUE>
-
将
openssl.cnf.sample更名为openssl.cnf。
-
在 easy-rsa 文件夹下,先后运行
vars和clean-all.bat命令,以进行初始化。
-
生成 CA 根证书。

-
生成密钥交换协议算法参数。

-
生成服务端和客户端证书并签发十年有效期。
build-server-key.bat server

build-key.bat client

-
生成 ta key
openvpn --genkey --secret keys/ta.key
-
以上步骤完成后,keys 中包含了这么多文件

-
配置
server.ovpn文件,将它们连同服务器证书一起复制到 config 文件夹下。
-
客户端配置 client.ovpn 文件。然后将客户端证书复制到 config 目录下。

-
然后就可以右击任务栏的图标,点击 Connect 进行连接了。


数据和分析
IPSec 相关数据包分析
- 在只配置了其中一端的 IPSec 时,服务器发回的包都是 Identity Protection(Main Mode)的 ISAKMP 包,其中每一段 payload 都有一个 next payload 字段,指定下一个载荷包的内容。在 Vendor ID 中,存在一个
MS NT5 ISAKMPOAKLEY字段,这里是目标操作系统的信息(所以可能有泄露 os 的利用!)。

- 在 SA 段中,信息被以 IPSec 的方式来解析,Identity Only 被设为
True,Payload 中的 Transform 段是协商的密钥信息。
- 双方交互还用到了 informational 包,包的信息如下。

- 在双方都配置了 IPsec 的情况下,连接抓包情况如下。

- 一开始是 quick mode,包的信息如下。这时信息已经是加密的了。

- 后面双方的数据都以 ESP 包的形式来传送了,由于双方有了约定,后面的传输都使用相同的 SPI。


OpenVPN 连接过程日志分析
- 在建立连接时,双方使用了 UDP 连接(我服务器端配置的是 udp 服务器),可以看出其中的数据是加密的。
- 观察生成的 log 文件,发现 client 端使用了 1040 以上的端口与服务器端建立了连接,在连接时,双方走了个人信息的认证。还商讨了有关密码算法的信息,比对了 options hash。


收获
通过配置虚拟专用网和抓包分析,我理解了 VPN 相对于普通连接的安全性,明白了 IPSec 在其中扮演的重要角色。
但是,其中的 IKE 密钥协商过程还是有一些安全缺陷的。由于响应方需要时间计算模幂参数,占用大量 cpu 和内存空间,这是一个瓶颈,很容易受到拒绝服务攻击。主模式下无法提供身份隐藏保护,攻击方可以伪造响应方地址,并与发起方协商 D-H 公开值。
Packet-tracer 实验重要截图
-
注意交换机需要连接到 PC 的快速以太网口上(需要关机→修改物理设置(添加端口)→开机)

-
IPSec 相关设置(router0 端,另一端当然是相同的,除了 address 为 10.0.0.1)

-
Ping 连接效果,可以抓到 ISAKMP 类型的数据包,其中数据为加密状态。


https://blog.csdn.net/weixin_41924879/article/details/101365257 ↩︎