虚拟专用网实验

目标

了解什么是虚拟专用网(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

  1. 在 WindowsXP 下打开 “控制面板→管理工具→本地安全策略”,找到 “IP 安全策略,在本地计算机”。双击进入。然后右击 “安全服务器”,点击指派规则。

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

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

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

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

    当然,也可以配置专用的 IPSec 安全策略,不使用系统默认值。过程类似,不再赘述。

OpenVPN 配置

本部分实验使用 WindowsXP 和 Windows2000 共同完成,WindowsXP 充当服务端,Windows2000 充当客户端。

事先下载安装好 openssl 库,否则会报 “命令不存在” 的错误。

  1. 首先安装 OpenVPN。安装过程一路下一步即可。

  2. 将安装目录 easy-rsa 下vars.bat.sample文件换成自己的信息,然后更名为vars.bat

    vars.bat
    1
    2
    ...
    set <KEY>=<VALUE>
  3. openssl.cnf.sample更名为openssl.cnf

  4. 在 easy-rsa 文件夹下,先后运行varsclean-all.bat命令,以进行初始化。

  5. 生成 CA 根证书。

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

  7. 生成服务端和客户端证书并签发十年有效期。

    build-server-key.bat server

    build-key.bat client

  8. 生成 ta key

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

  10. 配置server.ovpn文件,将它们连同服务器证书一起复制到 config 文件夹下。

  11. 客户端配置 client.ovpn 文件。然后将客户端证书复制到 config 目录下。

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

数据和分析

IPSec 相关数据包分析

  1. 在只配置了其中一端的 IPSec 时,服务器发回的包都是 Identity Protection(Main Mode)的 ISAKMP 包,其中每一段 payload 都有一个 next payload 字段,指定下一个载荷包的内容。在 Vendor ID 中,存在一个MS NT5 ISAKMPOAKLEY字段,这里是目标操作系统的信息(所以可能有泄露 os 的利用!)。
  2. 在 SA 段中,信息被以 IPSec 的方式来解析,Identity Only 被设为True,Payload 中的 Transform 段是协商的密钥信息。
  3. 双方交互还用到了 informational 包,包的信息如下。
  4. 在双方都配置了 IPsec 的情况下,连接抓包情况如下。
  5. 一开始是 quick mode,包的信息如下。这时信息已经是加密的了。
  6. 后面双方的数据都以 ESP 包的形式来传送了,由于双方有了约定,后面的传输都使用相同的 SPI。

OpenVPN 连接过程日志分析

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

收获

通过配置虚拟专用网和抓包分析,我理解了 VPN 相对于普通连接的安全性,明白了 IPSec 在其中扮演的重要角色。

但是,其中的 IKE 密钥协商过程还是有一些安全缺陷的。由于响应方需要时间计算模幂参数,占用大量 cpu 和内存空间,这是一个瓶颈,很容易受到拒绝服务攻击。主模式下无法提供身份隐藏保护,攻击方可以伪造响应方地址,并与发起方协商 D-H 公开值。

Packet-tracer 实验重要截图

  • 注意交换机需要连接到 PC 的快速以太网口上(需要关机→修改物理设置(添加端口)→开机)

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

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


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