एक OpenVPN क्लाइंट को रोकना: निरसन गलत लीवर क्यों है
सत्र को मारना उलटा जा सकता है; प्रमाणपत्र का निरसन नहीं। तय करें कि मामले को कौन सा लीवर चाहिए, और CRL तभी फिर से बनाएं जब वह ठीक बैठे।
एक क्लाइंट की पहुँच को रोकना और उसे हमेशा के लिए हटाना तब तक एक ही काम लगते हैं जब तक आप इनमें से एक को पलटने की कोशिश न करें। प्रमाणपत्र का निरसन ऐसा रिकॉर्ड लिखता है जिसे सर्वर अंतिम मानता है, और उसे उलटने का अर्थ है जारीकर्ता का डेटाबेस हाथ से संपादित करना। चालू सुरंग को गिरा देना एक प्रबंधन आदेश है जो भरोसे में कुछ नहीं बदलता। लीवर इस सवाल से चुनें कि क्या कुंजी अब भी भरोसेमंद है, इस सवाल से नहीं कि अनुरोध कितना ज़रूरी लगता है।
यह विश्वास: निरस्त और निलंबित एक ही चीज़ हैं
ठेकेदार को एक सप्ताह के लिए रोका जाता है और प्रतिक्रिया निरसन की होती है, क्योंकि निरसन कुछ बंद करने जैसा सुनाई देता है। यह साफ-सुथरा लगता है, दस सेकंड लेता है, और वापसी का एकमात्र रास्ता डेटाबेस संपादन छोड़ जाता है। यह प्रतिक्रिया समझी जा सकती है और यह दरवाज़ा बंद करने से ज़्यादा पासपोर्ट जलाने के करीब है। रोका गया उपकरण और जोखिम में पड़ी कुंजी अलग व्यवहार चाहते हैं, और इनमें से सिर्फ़ एक को सस्ते में पलटा जा सकता है।
अंतर क्रेडेंशियल का है, व्यक्ति का नहीं। जो कुंजी अभी भी सही हाथों में है उसे बिना किसी भरोसे की हानि के रोका और फिर शुरू किया जा सकता है। जो कुंजी कॉपी की गई हो सकती है उसे कभी बहाल नहीं करना चाहिए, क्योंकि बहाली यह दावा करती है कि प्रतिलिपि मौजूद नहीं है।
दोनों में से किसी भी सिस्टम को छूने से पहले जवाब लिख लें। अगर आप नहीं बता सकते कि कुंजी उजागर हुई है या नहीं, तो रूढ़िवादी जवाब बदलना है।
प्रबंधन इंटरफ़ेस से चालू सत्र गिरा दें
OpenVPN एक प्रबंधन इंटरफ़ेस देता है जो सत्रों की सूची बना सकता है और सामान्य नाम से उनमें से एक को मार सकता है। इसे localhost पर सक्षम करें, सार्वजनिक इंटरफ़ेस से दूर रखें, और जब किसी सत्र को अभी गायब होना हो तो मारने का आदेश भेजें। यह आदेश सिर्फ़ उसी सुरंग को बंद करता है, और हर दूसरा क्लाइंट काम करता रहता है।
यह किसी सक्रिय समस्या का जवाब है, निलंबन नीति नहीं। वही प्रोफ़ाइल एक मिनट में फिर जुड़ सकती है, क्योंकि उसके क्रेडेंशियल में कुछ नहीं बदला। इसका उपयोग तब करें जब सत्र को जाना ही हो और स्थायी फ़ैसला अभी लिया जा रहा हो।
मारने से पहले पुष्टि करें कि सत्र जुड़ा हुआ था, ताकि आप ऐसे क्लाइंट का पीछा न करें जो कभी जुड़ा ही नहीं। नीचे दिया गया स्थिति आदेश छापता है कि अभी क्या जुड़ा है।
printf 'status 2\nquit\n' | nc 127.0.0.1 7506
printf 'kill kiosk-14\nquit\n' | nc 127.0.0.1 7506अगर मारने का आदेश कहता है कि ऐसा कोई क्लाइंट नहीं है, तो प्रमाणपत्र में दिया गया सामान्य नाम वह स्ट्रिंग नहीं है जो आपने टाइप किया। प्रोफ़ाइल फ़ाइल के नाम की जगह स्थिति आउटपुट पढ़ें।
CRL असल में क्या नियंत्रित करता है
सर्वर प्रमाणपत्र पर संग्रहीत किसी निरसन ध्वज को नहीं देखता। वह crl-verify में नामित प्रमाणपत्र निरसन सूची को हर नए कनेक्शन पर पढ़ता है और ऐसे प्रमाणपत्र को अस्वीकार करता है जिसका क्रमांक उस सूची में दिखता है। इससे दो परिणाम निकलते हैं, और दोनों परिचालन की दृष्टि से महत्वपूर्ण हैं। फ़ाइल उस खाते के लिए पठनीय होनी चाहिए जिसे सर्वर अपने विशेषाधिकार सौंपता है, और पहले से जुड़ा क्लाइंट तब तक चलता रहता है जब तक वह फिर से न जुड़े।
दूसरा परिणाम घटनाओं के दौरान लोगों को चौंकाता है। प्रमाणपत्र का निरसन उस सुरंग को नहीं बंद करता जो अभी उसका उपयोग कर रही है। अगर सत्र तुरंत खत्म होना चाहिए तो निरसन को प्रबंधन मार के साथ जोड़ें, और दोनों क्रियाओं को मार्गदर्शिका में अलग चरण मानें।
सूची की जाँच करें कि सर्वर असल में क्या लागू करेगा, आपके द्वारा कॉपी की गई अंतिम फ़ाइल के समय-चिह्न पर भरोसा करने के बजाय। महत्वपूर्ण हिस्सा क्रमांकों की गिनती है।
openssl crl -in /etc/openvpn/server/crl.pem -noout -text | sed -n '1,14p'
ls -l /etc/openvpn/server/crl.pemबिना प्रविष्टियों वाली सूची और सही प्रविष्टियों वाली सूची डायरेक्टरी सूची में एक जैसी दिखती हैं, इसलिए क्रमांकों की गिनती छापना सार्थक है। अनुमति वाली पंक्ति भी उतनी ही महत्वपूर्ण है, क्योंकि जिस फ़ाइल को डेमन पढ़ नहीं सकता वह अस्वीकृत क्लाइंट जैसी विफलता पैदा करती है।
एक रिकॉर्ड बहाल करना, सावधानी से
प्रमाणपत्र बहाल करने का अर्थ है जारी डेटाबेस में एक रिकॉर्ड को उलटना और नई सूची प्रकाशित करना। easy-rsa 3 उस डेटाबेस को PKI निर्देशिका के अंतर्गत index.txt के रूप में रखता है, जबकि पुरानी व्यवस्थाएँ अलग ढाँचा इस्तेमाल करती थीं। पंक्ति स्थिति अक्षर और समाप्ति तिथि से शुरू होती है। निरस्त पंक्ति क्रमांक, प्रमाणपत्र फ़ाइल का नाम और विशिष्ट नाम के साथ आगे बढ़ने से पहले निरसन के लिए समय-चिह्न डालती है। पंक्ति को वापस रखने का अर्थ है उस समय-चिह्न को मिटाना और अक्षर को उलटना, जबकि बाकी सब कुछ अछूता छोड़ना।
पहले फ़ाइल का बैकअप लें, और टेक्स्ट एडिटर में टाइप करने के बजाय संपादन को स्क्रिप्ट के रूप में लिखें। ऐसी टाइपो जो बदल देती है कि पंक्ति में कितने फ़ील्ड हैं, बाद में जोड़े गए हर प्रमाणपत्र के लिए जारी करना तोड़ देती है। यही कारण है कि बदलाव को स्वचालित करें और छूने से पहले फ़ाइल की प्रतिलिपि बनाएँ।
उसी नाम का दूसरा निरसन भी अक्सर विफल होता है, क्योंकि पहला रन उस प्रमाणपत्र और उसकी कुंजी को उन निर्देशिकाओं से बाहर ले गया जहाँ उपकरण उन्हें पाने की उम्मीद करता है। तब उपकरण वह नहीं ढूँढ पाता जिसे निरस्त करने को कहा गया था, और त्रुटि संदेश हमेशा स्पष्ट नहीं बताता कि क्यों।
cp /etc/easy-rsa/pki/index.txt /root/index.txt.$(date +%F-%H%M)
grep -c '^R' /etc/easy-rsa/pki/index.txt
easyrsa gen-crlनई सूची प्रकाशित करें, उसका स्वामित्व ठीक करें, और सर्वर से उसे पढ़वाएँ। अधिकांश इंस्टॉलेशन पर रीलोड काफ़ी है, लेकिन पुष्टि नए कनेक्शन से आनी चाहिए, क्योंकि मौजूदा सत्र ने कुछ भी दोबारा जाँचा नहीं।
जाँचें कि मामला किस लीवर के योग्य है
वह एक सवाल पूछें जो पूरी मार्गदर्शिका तय करता है: क्या निजी कुंजी अब भी सिर्फ़ वहीं है जहाँ उसे होना चाहिए। अगर हाँ, तो सत्र को मारना और प्रलेखित विराम मामले को ढक देते हैं और कोई स्थायी रिकॉर्ड पीछे नहीं छोड़ते। अगर नहीं, तो एकमात्र सुरक्षित जवाब नई कुंजी है और पुराना प्रमाणपत्र निरस्त छोड़ा जाता है।
फिर परिणाम को कनेक्शन के प्रयास से सत्यापित करें, कॉन्फ़िगरेशन के अंतर से नहीं। अंतर आपको बताता है कि आपका इरादा क्या था, और कनेक्शन बताता है कि सर्वर क्या लागू करता है।
openssl crl -in /etc/openvpn/server/crl.pem -noout -text | grep -c 'Serial Number'
printf 'status 2\nquit\n' | nc 127.0.0.1 7506जब बहाल किया गया क्लाइंट जुड़ता है और स्थिति आउटपुट में दिखता है, तो रिकॉर्ड संपादन काम कर गया। जब निरस्त क्लाइंट अस्वीकार होता है और लॉग CRL का नाम लेता है, तो निरसन काम कर गया। इनके बीच का हर मामला अनुमति या रीलोड की समस्या है, और अगला अनुरोध आने से पहले उसे ठीक करना सार्थक है।