OpenVPN qua TLS
VPN của bạn đang sử dụng TCP làm giao thức vận chuyển. Ví dụ stunnel được sử dụng để đóng gói nội dung của luồng TCP trong TLS / TCP. Bạn nhận được ngăn xếp giao thức này:
[IP] <------------------------> [IP]
[OpenVPN] <------------------------> [OpenVPN]
[TLS] <~~~~~> [TLS]
[TCP] <-> [TCP] <-----> [TCP] <-> [TCP]
[IP] <-> [IP] <-----> [IP] <-> [IP]
[] [] [] []
Máy chủ stunnel Máy khách
Giữa các trường hợp stunnel bạn có ngăn xếp giao thức này trên dây:
[IP]
[OpenVPN]
[TLS]
[TCP (443)]
[IP]
[...]
Khi TLS mã hóa tải trọng của nó, kẻ tấn công chỉ có thể thấy:
[??? ]
[TLS]
[TCP (443)]
[IP]
[...]
Vì vậy, có, đó là lưu lượng TLS đơn giản (có thể là HTTP / TLS, SMTP / TLS, POP / TLS hoặc bất cứ thứ gì khác cho ai đó đang xem lưu lượng nhưng nó trông rất giống HTTP / TLS khi cổng TCP 443 được sử dụng). Bạn có thể kiểm tra điều này bằng cách sử dụng wireshark: ghi lại lưu lượng giữa các trường hợp stunnel. Trong UI của wireshark (nút bên phải trên một gói của luồng), bạn có thể yêu cầu wireshark diễn giải lưu lượng là TLS: nó sẽ nhận ra đó là lưu lượng TLS (bạn sẽ thấy các thông báo TLS khác nhau nhưng không phải là tải trọng của phiên TLS) .
Bạn có thể muốn sử dụng SNI trong máy khách để trông giống như những gì một trình duyệt hiện đại sẽ làm. Bạn cũng có thể muốn sử dụng ALPN nhưng stunnel hiện không xử lý được điều đó.
OpenVPN với TLS dựng sẵn
So sánh, nếu bạn đang sử dụng OpenVPN, bạn sẽ có một cái gì đó như thế này:
[IP]
[OpenVPN]
[TCP]
[IP]
[...]
Trông như thế này:
[??? ]
[OpenVPN]
[TCP]
[IP]
[...]
Lớp TLS dựng sẵn không gói gọn các gói (IP, Ethernet) mà chỉ được sử dụng để thiết lập phiên và xác thực:
[TLS]
[OpenVPN]
[TCP]
[IP]
[...]
Trong trường hợp này, lưu lượng truy cập của bạn không giống như lưu lượng TLS đơn giản nhưng rõ ràng là OpenVPN. Nếu bạn diễn giải lưu lượng này là OpenVPN trong wireshark, bạn sẽ nhận ra các thông điệp OpenVPN và bên trong chúng là các thông báo TLS (nhưng không phải là tải trọng).
Cảnh báo
Bạn nên lưu ý rằng nếu kẻ tấn công thụ động sẽ không thể nói rằng máy chủ từ xa của bạn thực tế là máy chủ OpenVPN, kẻ tấn công đang hoạt động sẽ có thể tìm ra điều này: chỉ cần kết nối với máy chủ của bạn qua TLS, anh ta sẽ có thể để xác nhận rằng đó không phải là máy chủ HTTP / TLS. Bằng cách cố gắng nói giao thức OpenVPN, anh ta sẽ có thể phát hiện ra rằng máy chủ của bạn là máy chủ OpenVPN / TLS.
OpenVPN qua TLS với xác thực ứng dụng khách
Bạn lo lắng về điều này, bạn có thể kích hoạt xác thực ứng dụng khách TLS: kẻ tấn công sẽ không thể bắt đầu phiên TLS hoạt động và sẽ không thể đoán được tải trọng nào được gói trong TLS.
* Cảnh báo: ** Tôi không nói về hỗ trợ TLS dựng sẵn trong OpenVPN (xem bên trên để biết giải thích về lý do tại sao nó không giúp bạn).
OpenVPN / TLS và HTTP / TLS đa kênh
Một giải pháp khác là phục vụ cả HTTP và OpenVPN qua phiên TLS. sslh có thể được sử dụng để tự động phát hiện tải trọng của giao thức và gửi đến máy chủ HTTP / TCP đơn giản hoặc máy chủ OpenVPN / TCP của bạn. Máy chủ sẽ trông giống như máy chủ HTTP / TLS tiêu chuẩn nhưng ai đó đang cố gắng nói OpenVPN / TLS với máy chủ này sẽ có thể phát hiện ra rằng trên thực tế nó cũng là máy chủ OpenVPN / TLS.
hoặc OpenVPN / TCP
hoặc HTTP / TCP
[1] .---------. .------. HTTP / TCP .-------------.
-> | choáng | ----> | sslh | -------> | Máy chủ HTTP |
'---------' '------' | '-------------'
| .----------------.
'------> | Máy chủ OpenVPN |
OpenVPN / TCP '----------------'
[1] = Hoặc OpenVPN / TLS / TCP hoặc HTTP / TLS / TCP
OpenVPN qua HTTP KẾT NỐI qua TLS
Một giải pháp khác là sử dụng máy chủ HTTP / TLS tiêu chuẩn và sử dụng HTTP CONNECT / TLS để kết nối với máy chủ OpenVPN: nó sẽ trông giống như một máy chủ HTTP tiêu chuẩn. Bạn thậm chí có thể yêu cầu xác thực ứng dụng khách để ủy quyền cho yêu cầu HTTP CONNECT (mực sẽ có thể thực hiện việc này).
OpenVPN có một tùy chọn để sử dụng Proxy HTTP:
http-proxy proxy.example.com
Bạn sẽ có thể kết hợp điều này với một cá thể stunnel kết nối với HTTPS PROXY từ xa:
http-proxy 127.0.0.1 8443
remote vpn.example.com
Mà sẽ thực hiện ngăn xếp giao thức này:
[IP] <------------------------> [IP]
[OpenVPN] <------------------------> [OpenVPN]
[HTTP] <-------------> [HTTP]
[TLS] <~~~~~> [TLS]
[TCP] <-> [TCP] <-----> [TCP] <-> [TCP]
[IP] <-> [IP] <-----> [IP] <-> [IP]
[] [] [] []
Máy chủ stunnel HTTPS PROXY