VPN与非VPN流量

VPN流量与非VPN流量定义

  • VPN流量:VPN流量通过IPSec、PPTP或SSL/TLS等协议进行加密,确保数据在传输过程中的隐私和安全。因此,VPN流量的内容是加密的,无法直接通过分析数据包的内容来识别具体的应用。
  • 非VPN流量:非VPN流量可能包含未加密的数据,也可能使用其他加密方式(如HTTPS),但其加密方式和目的与VPN不同。

OpenVPN

OpenVPN是一个基于OpenSSL库的开源虚拟专用网络(VPN)协议,它允许企业或个人安全地通过公共网络(如互联网)传输数据。OpenVPN支持多种操作系统,包括Windows、Linux、macOS等,并且提供了多种身份验证方式和加密选项,确保数据传输的安全性。

基于主被动结合的 OpenVPN 识别与检测论文

本文通过深入分析OpenVPN的网络通信协议和数据报文,发现即使是在已经采取混淆策略的基础上,运营商和网络管理者依然具备检测并阻断VPN流量的能力。本文提出了一个检测系统,结合被动监测和主动探测方法,可以有效地在现网环境中检测OpenVPN流量。

OpenVPN 的工作模式

OpenVPN 基于加密隧道协议实现通信,将原始 IP 数据包封装在 OpenVPN 协议数据包中,通过隧道发送或接受封装后的数据包。为了实现安全通信,OpenVPN 利用OpenSSL 库 [3] 对数据包进行加密,并提供两种认证和密钥交换的方法以建立通信双方的信任:

(1) 通信双方预先共享静态密钥;

(2)基于 TLS 的协商机制进行密钥交换。

其中,后者已被大多数商业 VPN 服务所采用,这种方式在连接建立时会使用 TLS 握手协议进行协商,协商的部分也同样作为载荷封装在 OpenVPN 的协议包内部。

OpenVPN 的格式

OpenVPN 可以分为TCP和UDP两种传输模式,这两种传输模式的数据包头格式如图表1所示。每个 OpenVPN 的数据包会在数据包头中设置消息类型的操作码(Opcode)和本次会话使用的TLS会话密钥。如图表2所示,操作码对应了客户端和服务器端不同通信阶段传输的消息类型,如操作码1代表客户端发起的重置请求。

OpenVPN 的检测方法

作为一种最流行的商业VPN软件/协议,目前已有一些工作研究OpenVPN的检测方法。一类工作[4]参考WHOIS,rDNS等信息,提取TCP协议中的option等字段作为VPN的指纹进行指纹识别。另一类工作[5, 6]则是使用机器学习模型利用连接时长、时间间隔等特征进行的流级别被动检测,不过这类工作通常只是在实验环境下(如使用实验数据集ISCXVPN2016[7])进行测试。

OpenVPN 的混淆技术

同时,为了绕过现有的检测机制,越来越多软件开始使用 OpenVPN 的混淆技术,常用的混淆策略包括:(1) XOR 补丁(使用预共享的密钥对数据包中的某些字节进行异或操作,颠倒字节顺序);(2) 使用加密隧道(采用 Obfsproxy等混淆隧道逃逸深度包检测机制);(3)使用专有协议(开发专有的混淆协议,在 OpenVPN 协议的基础上添加专有的混淆层,如Astrill[8])。

针对 OpenVPN 的检测架构概述

基于 OpenVPN 的通信特征,本文提出一种主被动结合的、实时识别 OpenVPN 流量的检测框架,架构如图表3所示,主要包括过滤器(Filter)和探测器(Prober)[9]两部分。首先,过滤器实时检测通过的网络流量,检测依据是本文发现的 OpenVPN 独特的网络通信特征。过滤器标记疑似为 OpenVPN 服务器的目的地址,并将这部分信息传递给探测器。然后,探测器针对疑似服务器执行主动探测,通过发送精心设计的探测数据包,引起 OpenVPN 协议特定的行为以确认服务器信息,最终完成 OpenVPN 服务器的识别确认。

IPSEC

对数据包进行加密,只能看到ESP信息

VPN与非VPN流量分类

流超时值(Flow Timeout Value)是指在流量分类中,用于确定一个网络流何时结束的时间阈值。具体来说,当一个网络流中的数据包在指定的时间内没有新的数据包到达时,该流被认为是已经结束的。这个时间阈值可以根据具体的应用场景和需求进行调整。

流超时值的选择

  • 较短的流超时值可能导致流被过早地截断,从而丢失一些重要的数据包信息,这可能会影响特征的提取和分类的准确性。
  • 较长的流超时值可能会导致流被延迟终止,从而包含更多不必要的数据包,这可能会引入噪声和不相关的信息,降低分类的准确性
  1. 活跃时间(active):指一个流在开始传输数据包之前处于空闲状态的时间。也就是说,从流开始到第一个数据包发送出去之间的时间间隔。

  2. 空闲时间(idle):指一个流在停止传输数据包之后再次开始传输数据包之前的时间。也就是说,从流的最后一个数据包发送出去到下一个数据包发送出去之间的时间间隔

空闲时间产生的原因:

数据传输间隙:在网络通信中,数据传输并不是连续的。发送方和接收方可能在某些时间段内没有数据要传输,从而导致流在一段时间内处于空闲状态。

流开始到发送第一个数据包之间的时间延迟

  1. 连接建立过程:在许多网络协议中,数据传输之前需要进行连接建立。例如,在TCP协议中,客户端和服务器之间需要进行三次握手(SYN-SYN-ACK)来建立连接。这个过程会消耗一定的时间。

  2. 应用层延迟:应用程序在决定发送数据之前可能需要一些时间来准备数据。例如,用户在浏览器中输入URL并按下回车键后,浏览器需要解析URL、发起DNS查询、建立TCP连接等步骤,这些步骤都会产生延迟。

  3. 网络延迟:数据包在网络中传输时也会受到网络延迟的影响。例如,数据包在路由器之间的传输时间、交换机的处理时间等都会导致延迟。

  4. 系统调度:操作系统和其他正在运行的进程可能会影响数据包的发送时间。例如,操作系统可能需要调度其他任务,导致数据包的发送被延迟。

  5. 随机性:网络环境中存在一定的随机性,例如网络拥塞、丢包重传等,这些都可能导致数据包的发送时间不确定。

空闲时间的重要性

流量模式的差异:加密流量和非加密流量在传输模式上存在显著差异。非加密流量通常具有更规律和可预测的传输间隔,因为它们遵循标准的协议和通信模式。而加密流量由于使用了加密技术,可能会引入更多的随机性和不规则性,导致空闲时间的分布也更加复杂和不可预测。

VPN 可以使用多种安全协议,包括 IPsec、PPTP(点对点隧道协议)、L2TP(层2隧道协议)和 SSL/TLS。

### 安装和配置OpenVPN #### 准备工作 为了顺利安装并配置OpenVPN,在Ubuntu 22.04系统环境下,需准备如下资源[^1]: - 至少拥有一台带有sudo权限非root用户的Ubuntu 22.04服务器; - 配置好防火墙规则以允许必要的网络流量; - 另外设置一台独立运行的Ubuntu 22.04机器充当私人证书授权中心(CA)。 #### OpenVPN安装过程 执行以下命令来更新软件包列表以及安装OpenVPN及其依赖项: ```bash sudo apt update && sudo apt install openvpn easy-rsa -y ``` #### 创建私钥基础设施(PKI) 进入`/usr/share/easy-rsa`目录,并初始化PKI环境: ```bash cd /usr/share/easy-rsa/ cp vars.example vars vi vars ``` 编辑vars文件中的参数以匹配个人需求。之后构建CA及生成服务器密钥对: ```bash ./easyrsa init-pki ./easyrsa build-ca ./easyrsa gen-req server nopass ./easyrsa sign-req server server ``` #### 设置DH参数与TLS认证 生成Diffie-Hellman参数文件和静态 HMAC 文件用于增强安全性: ```bash ./easyrsa gen-dh openvpn --genkey --secret pki/private/tls-auth.key ``` #### 编辑Server Configuration File 创建或修改位于 `/etc/openvpn/server/server.conf` 的配置文件[^3]: ```bash port 1194 proto udp dev tun ca /usr/share/easy-rsa/pki/ca.crt cert /usr/share/easy-rsa/pki/issued/server.crt key /usr/share/easy-rsa/pki/private/server.key dh /usr/share/easy-rsa/pki/dh.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" keepalive 10 120 tls-auth /usr/share/easy-rsa/pki/private/tls-auth.key 0 cipher AES-256-CBC auth SHA256 comp-lzo user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3 ``` #### 启动服务并启用开机自启 完成上述步骤后启动OpenVPN服务并将其实现随系统自动加载: ```bash systemctl start openvpn@server.service systemctl enable openvpn@server.service ``` #### 开放防火墙端口 最后一步是调整防火墙设置以便让外部设备能够访问此OpenVPN服务: ```bash ufw allow 1194/udp echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf sysctl -p ``` 以上即是在Ubuntu平台上部署OpenVPN所需的主要操作流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值