TLS üzerinden OpenVPN
VPN'niz aktarım protokolü olarak TCP kullanıyor. Stunnel örneği, TLS / TCP'deki TCP akışının içeriğini kapsüllemek için kullanılır. Bu protokol yığını alırsınız:
[IP] <------------------------> [IP]
[OpenVPN] <------------------------> [OpenVPN]
[TLS] <~~~~~> [TLS]
[TCP] <-> [TCP] <-----> [TCP] <-> [TCP]
[IP] <-> [IP] <-----> [IP] <-> [IP]
[] [] [] []
Sunucu stunnel stunnel İstemcisi
Stunnel örnekleri arasında tel üzerinde bu protokol yığını vardır:
[IP]
[OpenVPN]
[TLS]
[TCP (443)]
[IP]
[...]
TLS yükünü şifrelediğinde, bir saldırgan yalnızca şunları görebilir:
[??? ]
[TLS]
[TCP (443)]
[IP]
[...]
Yani evet, düz TLS trafiği (HTTP / TLS, SMTP / TLS, POP / TLS veya trafiğe bakan biri için başka bir şey olabilir, ancak 443 TCP bağlantı noktası kullanıldıkça HTTP / TLS'ye çok benziyor). Bunu wireshark kullanarak kontrol edebilirsiniz: stunnel örnekleri arasındaki trafiği kaydedin. Wireshark kullanıcı arayüzünde (akışın bir paketindeki sağ düğme) wireshark'tan trafiği TLS olarak yorumlamasını isteyebilirsiniz: TLS trafiği olarak tanıyacaktır (farklı TLS mesajlarını göreceksiniz, ancak TLS oturumunun yükünü görmeyeceksiniz) .
Modern bir tarayıcının ne yapacağına bakmak için istemcide SNI kullanmak isteyebilirsiniz . ALPN'yi de kullanmak isteyebilirsiniz , ancak stunnel şu anda bunu yapmıyor.
Yerleşik TLS'li OpenVPN
Buna karşılık, OpenVPN kullanıyorsanız, böyle bir şeye sahip olacaksınız:
[IP]
[OpenVPN]
[TCP]
[IP]
[...]
Bu şöyle görünür:
[??? ]
[OpenVPN]
[TCP]
[IP]
[...]
Yerleşik TLS katmanı (IP, Ethernet) paketlerini kapsamaz, ancak yalnızca oturumu ayarlamak ve kimlik doğrulaması için kullanılır:
[TLS]
[OpenVPN]
[TCP]
[IP]
[...]
Bu durumda, trafik yok değil düz bir TLS trafiği gibi bakmak ama besbelli OpenVPN. Bu trafiği wireshark'ta OpenVPN olarak yorumlarsanız, OpenVPN mesajlarını ve bunların içindeki TLS mesajlarını (ancak yükü değil) tanırsınız .
Uyarı
Pasif bir saldırgan, uzak sunucunuzun aslında bir OpenVPN sunucusu olduğunu söyleyemezse, aktif bir saldırganın bunu bulabileceğini bilmelidir: sadece sunucunuza TLS üzerinden bağlanarak, HTTP / TLS sunucusu olmadığını doğrulamak için . OpenVPN protokolünü konuşmaya çalışarak, sunucunuzun bir OpenVPN / TLS sunucusu olduğunu tespit edebilecektir.
İstemci kimlik doğrulaması ile TLS üzerinden OpenVPN
TLS istemci kimlik doğrulamasını etkinleştirebileceğinizden endişe duyuyorsunuz: Bir saldırgan çalışan bir TLS oturumu başlatamayacak ve TLS üzerinden hangi yükün kapsüllendiğini tahmin edemeyecektir.
* Uyarı: ** OpenVPN'deki yerleşik TLS desteğinden bahsetmiyorum (neden size yardımcı olmayacağına dair açıklama için yukarıya bakın).
Çoğullamalı OpenVPN / TLS ve HTTP / TLS
Diğer bir çözüm TLS oturumu üzerinden hem HTTP hem de OpenVPN sunmaktır. sslh , protokolün yükünü otomatik olarak algılamak ve düz bir HTTP / TCP sunucusuna veya OpenVPN / TCP sunucusuna göndermek için kullanılabilir. Sunucu standart HTTP / TLS sunucusu gibi görünecektir, ancak bu sunucuyla OpenVPN / TLS konuşmaya çalışan biri, aslında bir OpenVPN / TLS sunucusu olduğunu algılayabilecektir.
ya OpenVPN / TCP
veya HTTP / TCP
[1] .---------. .------. HTTP / TCP .-------------.
-> | stunnel | ----> | sslh | -------> | HTTP sunucusu |
'---------' '------' | '-------------'
| .----------------.
'------> | OpenVPN sunucusu |
OpenVPN / TCP '----------------'
[1] = OpenVPN / TLS / TCP veya HTTP / TLS / TCP
HTTP üzerinden OpenVPN TLS üzerinden CONNECT
Başka bir çözüm, standart bir HTTP / TLS sunucusu kullanmak ve OpenVPN sunucusuna bağlanmak için HTTP CONNECT / TLS kullanmaktır: standart bir HTTP sunucusu gibi görünecektir. HTTP CONNECT isteğini yetkilendirmek için istemcinin kimlik doğrulaması bile gerekebilir (kalamar bunu yapabilmelidir).
OpenVPN'de bir HTTP Proxy kullanma seçeneği vardır:
http-proxy proxy.example.com
Bunu, uzak bir HTTPS PROXY'ye bağlanan bir stunnel örneği ile birleştirebilmelisiniz:
http-proxy 127.0.0.1 8443
remote vpn.example.com
Bu protokol yığınını uygulayan:
[IP] <------------------------> [IP]
[OpenVPN] <------------------------> [OpenVPN]
[HTTP] <-------------> [HTTP]
[TLS] <~~~~~> [TLS]
[TCP] <-> [TCP] <-----> [TCP] <-> [TCP]
[IP] <-> [IP] <-----> [IP] <-> [IP]
[] [] [] []
Sunucu HTTPS PROXY stunnel İstemcisi