OpenVPN melalui TLS
VPN Anda menggunakan TCP sebagai protokol transport. Instans stunnel digunakan untuk merangkum konten aliran TCP dalam TLS / TCP. Anda mendapatkan tumpukan protokol ini:
[IP] <------------------------> [IP]
[OpenVPN] <------------------------> [OpenVPN]
[TLS] <~~~~~> [TLS]
[TCP] <-> [TCP] <-----> [TCP] <-> [TCP]
[IP] <-> [IP] <-----> [IP] <-> [IP]
[] [] [] []
Server setrum klien setrum
Di antara instance stunnel Anda memiliki tumpukan protokol ini di kabel:
[AKU P ]
[OpenVPN]
[TLS]
[TCP (443)]
[AKU P ]
[...]
Saat TLS mengenkripsi muatannya, penyerang hanya dapat melihat:
[??? ]
[TLS]
[TCP (443)]
[AKU P ]
[...]
Jadi ya, itu adalah lalu lintas TLS biasa (itu bisa HTTP / TLS, SMTP / TLS, POP / TLS atau apa pun untuk seseorang yang melihat lalu lintas tetapi terlihat sangat mirip HTTP / TLS ketika port TCP 443 digunakan). Anda dapat memeriksanya dengan menggunakan wireshark: merekam lalu lintas di antara instance stunnel. Di UI wireshark (tombol kanan pada paket stream), Anda dapat meminta wireshark untuk mengartikan lalu lintas sebagai TLS: ia akan mengenalinya sebagai lalu lintas TLS (Anda akan melihat pesan TLS yang berbeda tetapi bukan muatan sesi TLS) .
Anda mungkin ingin menggunakan SNI di klien agar terlihat seperti apa yang dilakukan peramban modern. Anda mungkin ingin menggunakan ALPN juga tetapi stunnel saat ini tidak mengatasinya.
OpenVPN dengan built-in TLS
Sebagai perbandingan, jika Anda menggunakan OpenVPN, Anda akan memiliki sesuatu seperti ini:
[AKU P ]
[OpenVPN]
[TCP]
[AKU P ]
[...]
Yang terlihat seperti ini:
[??? ]
[OpenVPN]
[TCP]
[AKU P ]
[...]
Lapisan TLS bawaan tidak merangkum paket (IP, Ethernet) tetapi hanya digunakan untuk menyiapkan sesi dan mengautentikasi:
[TLS]
[OpenVPN]
[TCP]
[AKU P ]
[...]
Dalam hal ini, lalu lintas Anda tidak terlihat seperti lalu lintas TLS biasa tetapi jelas merupakan OpenVPN. Jika Anda menginterpretasikan traffic ini sebagai OpenVPN di wireshark, Anda akan mengenali pesan OpenVPN dan di dalamnya pesan-pesan TLS (tetapi bukan payload).
Peringatan
Anda harus menyadari bahwa jika penyerang pasif tidak dapat memberi tahu bahwa server jarak jauh Anda sebenarnya adalah server OpenVPN, penyerang aktif akan dapat mengetahuinya: cukup dengan menghubungkan ke server Anda melalui TLS, ia akan dapat untuk mengonfirmasi bahwa itu bukan server HTTP / TLS. Dengan mencoba berbicara protokol OpenVPN, ia akan dapat mendeteksi bahwa server Anda adalah server OpenVPN / TLS.
OpenVPN melalui TLS dengan otentikasi klien
Jika Anda khawatir tentang hal ini, Anda dapat mengaktifkan otentikasi klien TLS: penyerang tidak akan dapat memulai sesi TLS yang berfungsi dan tidak akan dapat menebak muatan mana yang dienkapsulasi melalui TLS.
* Peringatan: ** Saya tidak berbicara tentang dukungan TLS bawaan di OpenVPN (lihat di atas untuk penjelasan mengapa itu tidak membantu Anda).
OpenVPN / TLS dan HTTP / TLS multipleks
Solusi lain adalah melayani HTTP dan OpenVPN selama sesi TLS. sslh dapat digunakan untuk secara otomatis mendeteksi payload protokol dan mengirim baik ke server HTTP / TCP biasa atau Anda OpenVPN / server TCP. Server akan terlihat seperti server HTTP / TLS standar tetapi seseorang yang mencoba berbicara OpenVPN / TLS dengan server ini akan dapat mendeteksi bahwa itu sebenarnya adalah server OpenVPN / TLS juga.
baik OpenVPN / TCP
atau HTTP / TCP
[1] .---------. .------. HTTP / TCP .-------------.
-> | stunnel | ----> | sslh | -------> | Server HTTP |
'---------' '------' | '-------------'
| .----------------.
'------> | Server OpenVPN |
OpenVPN / TCP '----------------'
[1] = Baik OpenVPN / TLS / TCP atau HTTP / TLS / TCP
OpenVPN melalui HTTP CONNECT melalui TLS
Solusi lain adalah dengan menggunakan server HTTP / TLS standar dan menggunakan HTTP CONNECT / TLS untuk terhubung ke server OpenVPN: itu akan terlihat seperti server HTTP standar. Anda bahkan dapat meminta otentikasi klien untuk mengesahkan permintaan HTTP CONNECT (squid harus dapat melakukan ini).
OpenVPN memiliki opsi untuk menggunakan HTTP Proxy:
http-proxy proxy.example.com
Anda harus dapat menggabungkan ini dengan instance stunnel yang terhubung ke HTTPS PROXY jarak jauh:
http-proxy 127.0.0.1 8443
remote vpn.example.com
Yang akan mengimplementasikan tumpukan protokol ini:
[IP] <------------------------> [IP]
[OpenVPN] <------------------------> [OpenVPN]
[HTTP] <-------------> [HTTP]
[TLS] <~~~~~> [TLS]
[TCP] <-> [TCP] <-----> [TCP] <-> [TCP]
[IP] <-> [IP] <-----> [IP] <-> [IP]
[] [] [] []
Server HTTPS PROXY stunnel Client