टीएलएस पर ओपनवीपीएन
आपका वीपीएन ट्रांसपोर्ट प्रोटोकॉल के रूप में टीसीपी का उपयोग कर रहा है। टीएसएस / टीसीपी में टीसीपी स्ट्रीम की सामग्री को एनकैप्सुलेट करने के लिए स्टनलाइन इंस्टेंस का उपयोग किया जाता है। आपको यह प्रोटोकॉल स्टैक मिलता है:
[आईपी] <------------------------> [आईपी]
[OpenVPN] <------------------------> [OpenVPN]
[TLS] <~~~~~> [TLS]
[टीसीपी] <-> [टीसीपी] <-----> [टीसीपी] <-> [टीसीपी]
[आईपी] <-> [आईपी] <-----> [आईपी] <-> [आईपी]
[] [] [] []
सर्वर stunnel stunnel क्लाइंट
Stunnel उदाहरणों के बीच आपके पास वायर पर यह प्रोटोकॉल स्टैक होता है:
[आईपी]
[ओपनवीपीएन]
[टीएलएस]
[टीसीपी (443)]
[आईपी]
[...]
जैसा कि टीएलएस अपने पेलोड को एन्क्रिप्ट करता है, एक हमलावर केवल देख सकता है:
[??? ]
[टीएलएस]
[टीसीपी (443)]
[आईपी]
[...]
तो हाँ, यह सादा टीएलएस ट्रैफ़िक है (यह ट्रैफ़िक देखने वाले किसी व्यक्ति के लिए HTTP / TLS, SMTP / TLS, POP / TLS या कुछ और भी हो सकता है लेकिन यह HTTP / TLS की तरह ही दिखता है क्योंकि TCP पोर्ट 443 का उपयोग किया जाता है)। आप वायरशार्क का उपयोग करके इसकी जांच कर सकते हैं: स्टनलाइन उदाहरणों के बीच ट्रैफ़िक रिकॉर्ड करें। वायरशर्क यूआई (स्ट्रीम के एक पैकेट पर राइट बटन) में, आप वायरशर्क को टीएलएस के रूप में ट्रैफ़िक की व्याख्या करने के लिए कह सकते हैं: इसे टीएलएस ट्रैफ़िक के रूप में पहचाना जाएगा (आपको अलग-अलग टीएलएस संदेश दिखाई देंगे, लेकिन टीएलएस सत्र का पेलोड नहीं) ।
आप एक आधुनिक ब्राउज़र क्या करेंगे जैसे देखने के लिए ग्राहक में एसएनआई का उपयोग करना चाह सकते हैं । आप भले ही ALPN का उपयोग करना चाहते हों, लेकिन stunnel वर्तमान में ऐसा नहीं करता है।
ओपन वीपीएन बिल्डिन टीएलएस के साथ
इसकी तुलना में, यदि आप OpenVPN का उपयोग कर रहे हैं, तो आपके पास कुछ इस तरह होगा:
[आईपी]
[ओपनवीपीएन]
[टीसीपी]
[आईपी]
[...]
जो इस तरह दिखता है:
[??? ]
[ओपनवीपीएन]
[टीसीपी]
[आईपी]
[...]
बिल्ट टीएलएस परत आईपी (आईपी, ईथरनेट) पैकेट को एनकैप्सुलेट नहीं करता है, लेकिन इसका उपयोग केवल सत्र और प्रामाणिक विवरण सेट करने के लिए किया जाता है:
[टीएलएस]
[ओपनवीपीएन]
[टीसीपी]
[आईपी]
[...]
इस मामले में, आपका ट्रैफ़िक एक सादा टीएलएस ट्रैफ़िक की तरह नहीं दिखता है, लेकिन स्पष्ट रूप से ओपनवीपीएन है। यदि आप इस ट्रैफ़िक को ओपेन वीपीएन के रूप में वायरशार्क में व्याख्या करते हैं, तो आप ओपनवीपीएन संदेशों और उनके अंदर टीएलएस संदेशों (लेकिन पेलोड नहीं) को पहचान लेंगे ।
चेतावनी
आपको पता होना चाहिए कि अगर कोई निष्क्रिय हमलावर यह नहीं बता पाएगा कि आपका रिमोट सर्वर वास्तव में एक OpenVPN सर्वर है, तो एक सक्रिय हमलावर यह पता लगा सकेगा: बस TLS पर आपके सर्वर से जुड़ने से, वह सक्षम हो जाएगा पुष्टि करने के लिए यह है कि नहीं एक HTTP / TLS सर्वर। OpenVPN प्रोटोकॉल बोलने की कोशिश करने से, वह यह पता लगा सकेगा कि आपका सर्वर OpenVPN / TLS सर्वर है।
ग्राहक प्रमाणीकरण के साथ TLS पर OpenVPN
यह आप इस बात से चिंतित हैं कि आप टीएलएस क्लाइंट प्रमाणीकरण को सक्षम कर सकते हैं: एक हमलावर कार्यशील टीएलएस सत्र शुरू करने में सक्षम नहीं होगा और यह अनुमान लगाने में सक्षम नहीं होगा कि टीएलएस पर कौन सा पेलोड संलग्न है।
* चेतावनी: ** मैं ओपन वीपीएन में बिलिन टीएलएस समर्थन के बारे में बात नहीं कर रहा हूं (ऊपर एन स्पष्टीकरण के लिए देखें कि यह आपकी मदद क्यों नहीं करेगा)।
Multiplexed OpenVPN / TLS और HTTP / TLS
एक और उपाय टीएलएस सत्र में HTTP और OpenVPN दोनों की सेवा करना है। sslh का उपयोग प्रोटोकॉल के पेलोड का स्वचालित रूप से पता लगाने और या तो एक सादे HTTP / TCP सर्वर या आपको OpenVPN / TCP सर्वर पर भेजने के लिए किया जा सकता है। सर्वर मानक HTTP / TLS सर्वर की तरह दिखेगा, लेकिन इस सर्वर के साथ OpenVPN / TLS बोलने की कोशिश करने वाला कोई व्यक्ति यह पता लगा सकेगा कि यह वास्तव में OpenVPN / TLS सर्वर है।
या तो OpenVPN / TCP
या HTTP / टीसीपी
[1] .---------। .------। HTTP / टीसीपी .-------------।
-> | stunnel | ----> | sslh | -------> | HTTP सर्वर |
'---------' '------' | '-------------'
| .----------------।
'------> | OpenVPN सर्वर |
OpenVPN / टीसीपी '----------------'
[१] = या तो ओपनवीपीएन / टीएलएस / टीसीपी या एचटीटीपी / टीएलएस / टीसीपी
TLS पर HTTP कनेक्ट पर OpenVPN
एक अन्य समाधान एक मानक HTTP / TLS सर्वर का उपयोग करना और OpenVPN सर्वर से कनेक्ट करने के लिए HTTP CONNECT / TLS का उपयोग करना है: यह एक मानक HTTP सर्वर की तरह दिखेगा। यहां तक कि HTTP कनेक्शन अनुरोध को अधिकृत करने के लिए आपको क्लाइंट के प्रमाणीकरण की आवश्यकता हो सकती है (स्क्विड यह करने में सक्षम होना चाहिए)।
OpenVPN के पास HTTP प्रॉक्सी का उपयोग करने का एक विकल्प है:
http-proxy proxy.example.com
आपको दूरस्थ HTTPS PROXY से कनेक्ट होने वाले स्टनलाइन उदाहरण के साथ इसे संयोजित करने में सक्षम होना चाहिए:
http-proxy 127.0.0.1 8443
remote vpn.example.com
जो इस प्रोटोकॉल स्टैक को लागू करेगा:
[आईपी] <------------------------> [आईपी]
[OpenVPN] <------------------------> [OpenVPN]
[HTTP] <-------------> [HTTP]
[TLS] <~~~~~> [TLS]
[टीसीपी] <-> [टीसीपी] <-----> [टीसीपी] <-> [टीसीपी]
[आईपी] <-> [आईपी] <-----> [आईपी] <-> [आईपी]
[] [] [] []
सर्वर HTTPS PROXY stunnel क्लाइंट