stunnel vpnstream量,并确保它看起来像端口443上的SSLstream量

我试图使我的传出和传入stream量看起来尽可能接近SSLstream量合法。 有没有办法DPI我自己的stream量,以确保它看起来像SSLstream量,而不是OpenVPNstream量? 并根据我的configuration设置所有的stream量使用端口443这是SSL端口?

我的configuration如下:

笔记本电脑上的STUNNEL:

[openvpn] # Set sTunnel to be in client mode (defaults to server) client = yes # Port to locally connect to accept = 127.0.0.1:1194 # Remote server for sTunnel to connect to connect = REMOTE_SERVER_IP:443 

OPENVPN CONFIG ON笔记本电脑:

 client dev tun proto tcp remote 127.0.0.1 1194 resolv-retry infinite nobind tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 persist-key persist-tun 

STUNNELconfiguration服务器:

 sslVersion = all options = NO_SSLv2 ;chroot = /var/lib/stunnel4/ ; PID is created inside the chroot jail pid = /stunnel4.pid ; Debugging stuff (may useful for troubleshooting) debug = 7 output = /var/log/stunnel4/stunnel4.log setuid = root setgid = root socket = l:TCP_NODELAY=1 socket = r:TCP_NODELAY=1 compression = zlib [openvpn] accept = REMOTE_SERVER_IP:443 connect = REMOTE_SERVER_IP:11440 cert=/etc/stunnel/server.pem key=/etc/stunnel/server.key 

服务器上的OPENVPN CONFIG:

 local REMOTE_SERVER_IP port 11440 proto tcp 

OpenVPN的TLS

您的VPN使用TCP作为传输协议。 stunnel实例用于在TLS / TCP中封装TCPstream的内容。 你得到这个协议栈:

 [IP] <------------------------> [IP]
 [OpenVPN的<------------------------> [OpenVPN的]
             [TLS] <~~~~~> [TLS]
 [TCP] < - > [TCP] <-----> [TCP] < - > [TCP]
 [IP] < - > [IP] <-----> [IP] < - > [IP]
 [] [] [] []
 服务器stunnel stunnel客户端

在stunnel实例之间你有这个协议栈在电线上:

 [IP]
 [OpenVPN]
 [TLS]
 [TCP(443)]
 [IP]
 [...]

当TLSencryption其有效负载时,攻击者只能看到:

 [???  ]
 [TLS]
 [TCP(443)]
 [IP]
 [...]

所以是的,这是简单的TLSstream量(可能是HTTP / TLS,SMTP / TLS,POP / TLS或其他任何人查看stream量,但看起来很像HTTP / TLS,因为使用TCP端口443)。 你可以使用wireshark检查这个:loggingstunnel实例之间的stream量。 在wireshark用户界面(stream的一个包的右键),你可以要求wireshark把stream量解释为TLS:它将把它识别为TLSstream量(你会看到不同的TLS消息,但不是TLS会话的有效载荷) 。 您可能想要在客户端使用SNI,以便看起来像现代浏览器会做什么。

OpenVPN与内置的TLS

相比之下,如果您使用的是OpenVPN,您将拥有如下所示的内容:

 [IP]
 [OpenVPN]
 [TCP]
 [IP]
 [...]

看起来像这样:

 [???  ]
 [OpenVPN]
 [TCP]
 [IP]
 [...]

内置的TLS层不包围(IP,以太网)数据包,但仅用于build立会话和validation:

 [TLS]
 [OpenVPN]
 [TCP]
 [IP]
 [...]

在这种情况下,你的stream量看起来不像普通的TLSstream量,但显然是OpenVPN。 如果您在wireshark中将此stream量解释为OpenVPN,则您将识别OpenVPN消息,并在其中识别TLS消息 (但不包含有效内容)。

警告

你应该知道,如果一个被动的攻击者不能够告诉你的远程服务器实际上是一个OpenVPN服务器,那么攻击者就能够发现这一点:只要通过TLS连接到你的服务器,他就可以确认它不是 HTTP / TLS服务器。 通过尝试说出OpenVPN协议,他将能够检测到您的服务器是OpenVPN / TLS服务器。

带有客户端身份validation的TLS上的OpenVPN

您担心这个问题,您可以启用TLS客户端身份validation:攻击者将无法启动正在运行的TLS会话,并且无法猜测哪个有效内容通过TLS进行了封装。

多路复用的OpenVPN / TLS和HTTP / TLS

另一个解决scheme是在TLS会话上同时提供HTTP和OpenVPN。 sslh可用于自动检测协议的有效负载,并将其分派到普通的HTTP / TCP服务器或OpenVPN / TCP服务器。 服务器看起来像标准的HTTP / TLS服务器,但有人试图说服OpenVPN / TLS与这台服务器将能够检测到它实际上是一个OpenVPN / TLS服务器以及。

         OpenVPN / TCP
          或HTTP / TCP       
 [1] ---------。  ------。HTTP / TCP .-------------。
 - > |  stunnel | ----> |  sslh | -------> |  HTTP服务器|
    '---------''------'|  '-------------'
                            |  .----------------。
                            “------> |  OpenVPN服务器|
                         OpenVPN的/ TCP '----------------'

 [1] = OpenVPN / TLS / TCP或HTTP / TLS / TCP

基于HTTP的OpenVPN通过TLS连接

另一个解决scheme是使用标准的HTTP / TLS服务器,并使用HTTP CONNECT / TLS连接到OpenVPN服务器:它看起来像一个标准的HTTP服务器。 你甚至可以要求authentication客户端,以授权HTTP CONNECT请求(鱿鱼应该能够做到这一点)。

ysdx的答案很好,并很好地描述了stream量在networking上的显示方式。

然而,没有提到的是,stream量分析对于识别应用程序可能有很长的路要走。

假设您的OpenVPN连接看起来就像是一个https连接,攻击者无法读取字节stream并知道它是什么types的连接。

一个典型的https连接不会活得太长。 也许你的浏览器保持连接打开你的邮件服务器,我不知道。 一般来说,与很多不同的远程服务器会有很多相对较短的连接。

OTOH,OpenVPN连接可能会活几个小时或几天,并将大量的数据来回openvpn服务器。

您可以通过定期删除并重新启动连接来缓解长期连接。 这大概会影响您的应用程序stream量,但可能是可行的。 然而,你和openvpn服务器之间的很多很多stream量的模式将变得难以伪装。