![深度数据包检测速记](https://linux22.com/image/679537/%E6%B7%B1%E5%BA%A6%E6%95%B0%E6%8D%AE%E5%8C%85%E6%A3%80%E6%B5%8B%E9%80%9F%E8%AE%B0%20.png)
我正在尝试开发一种可以绕过深度数据包检测的东西,这样我就可以把所有这些内容作为额外信息或其他协议放入 HTTP 数据包中,而不是看起来像 OpenVPN 流量等。我将控制客户端和服务器计算机,并可以像在 OpenVPN 中一样安全地进行通信,但数据包将被伪装成合法的 HTTP 流量,其中隐藏了额外的 OpenVPN 流量。
我理解,如果有人知道这种情况正在发生,那么数据包的完整性就会出现问题,而且通过隐蔽性来实现安全性并不是最佳做法。
我的问题实际上是想问你对实施有什么想法。你会怎么做?
我相信它会起到如下的作用:
- 通过 iptables 强制 NIC 或通过我自己的虚拟接口进行静态路由。
- 嗅探我的接口并进行修改,以便可以更改数据包并将相关的其他流量(voip,SSL)等添加到 HTTP 流量中,然后通过 eth0 泵送到互联网。
- 当到达目标服务器时,它会执行相反的操作来解密流量。
- 通过服务器处理流量并报告。
到目前为止我发现了 stunnel 和 obfsproxy,但我不认为这是相同的概念。
这是一个尚未完成的想法。您能告诉我您的想法吗?欢迎提供任何反馈。
谢谢,truex0r
答案1
出于可靠性和性能方面的考虑,在 TCP 上运行 IP 不是一个好主意。这并不意味着您不能将 VPN 流量伪装成 TCP 流量,而是意味着您需要以创新的方式处理 TCP 层。
最好将 VPN 流量伪装成某些已加密的协议,例如 HTTPS。首先设置一个真正的 HTTPS 连接,并让客户端与服务器进行身份验证。通过身份验证后,您的 VPN 层将接管 TCP 下方 IP 层的通信,并开始使用加密的 HTTPS 有效负载发送 VPN 数据包。
通过 TCP 运行 VPN 的主要问题是,当数据包丢失时,接收端会将所有后续数据包排队,直到丢失的数据包被重新传输。解决该问题的最简单方法是使用普通的未修改的 TCP 发送数据包,但让连接的每一端在 IP 层接收原始加密数据包并将其交给 VPN 层。同时,接收到的数据包也将传送到 TCP 层,因此您还需要一个普通的 TCP 接收器来接收流量。这样,您将解决通过 TCP 运行 IP 的主要问题,同时仍保留对任何中间人来说看起来像真实 TCP 流量的流量,因为它将由真实的 TCP 堆栈生成。
这种方法无法完全避免在 TCP 上运行 IP 时出现的问题。如果发送端由于接收窗口或拥塞窗口填满而导致流量停滞,VPN 层将无法再向该方向传输流量。但是,任何允许您绕过此限制的方法都会以中间人可检测到的方式改变 TCP 连接的特性,因此此时您必须权衡 VPN 的可靠性与可检测性。