গত সপ্তাহে যেসব VPN প্রোফাইল কাজ করত, Ubuntu রিলিজ আপগ্রেডের পরে সেগুলো ভেঙে যায়, অথচ লগ আপগ্রেডের কথা প্রায়ই বলে না। লগ যা বলে তা হলো ব্যর্থ স্তরটি: TLS হ্যান্ডশেক, ডেটা চ্যানেলের জন্য আলাপ করা সাইফার, ইনস্টল হওয়া প্যাকেজ, বা প্রোগ্রামটি চালুর সময় যে OpenSSL কপি লোড করে। প্রতিটি স্তরের নিজস্ব ত্রুটির রূপ ও নিজস্ব মেরামত আছে, তাই শ্রেণিবিন্যাস প্রথম কাজ আর সম্পাদনা দ্বিতীয়। লগ প্রোফাইলের নাম না বলা পর্যন্ত এটিকে নির্দোষ ধরে নিন।

কোন স্তর ব্যর্থ হলো: হ্যান্ডশেক, সাইফার, প্যাকেজ নাকি লাইব্রেরি

প্রোফাইলে হাত দেওয়ার আগে ক্লায়েন্টের লগ পড়ুন। আউটপুটের প্রথম ত্রুটিটি ই সেইটি যা স্তর চিহ্নিত করে; এর পরে যা ছাপা হয় তা সাধারণত ওই প্রথম ব্যর্থতার পরিণতি। যখন ক্লায়েন্ট একেবারেই শুরু হয় না, তখন VPN লগ খোলার ভুল ফাইল।

সার্টিফিকেট ও স্বাক্ষরের অভিযোগ, বা কী-এর দৈর্ঘ্য নিয়ে বার্তা, নিয়ন্ত্রণ চ্যানেল ও তা পরিচালনকারী লাইব্রেরির নীতি থেকে আসে। যে সতর্কবার্তা DEPRECATED OPTION দিয়ে শুরু হয়, সেটি বরং ডেটা-চ্যানেল আলাপের অন্তর্গত।

এই ধরনের একটি লাইন Unrecognized option তৃতীয় শ্রেণি: নতুন বাইনারি আর এমন নির্দেশ গ্রহণ করে না যা পুরোনোটি সহ্য করত, তাই লাইব্রেরি শিথিল করার বদলে প্রোফাইল নতুন করে লিখতে হয়। প্যাকেজ ব্যর্থতা আবার আলাদা দেখায়, কারণ সেগুলো কোনো টানেল কোড চলার আগেই ঘটে। হারানো বাইনারি, যে প্লাগইন লোড হয় না, বা ভুল কোডনেমে নির্দেশ করা রিপোজিটরি সবই ওই রূপ তৈরি করে। চারটি লক্ষণ, দেখার চারটি জায়গা, আর মেরামতগুলোর মধ্যে প্রায় কোনো ওভারল্যাপ নেই।

হ্যান্ডশেক ব্যর্থ হলে TLS নীতি সার্টিফিকেট প্রত্যাখ্যান করছে

Ubuntu 22.04 সিস্টেমটিকে OpenSSL 3-এ নিয়ে গেছে, আর সেই শাখার ডিফল্ট নিরাপত্তা স্তর সার্টিফিকেট স্বাক্ষর ও কী-এর আকার নিয়ে 20.04-এর চেয়ে কঠোর। পুরোনো ডাইজেস্টে স্বাক্ষরিত CA সার্টিফিকেট, বা বর্তমান সীমার নিচের কী, এখন হ্যান্ডশেকের সময় ব্যর্থ হয়। যেহেতু এখনো কিছুই প্রমাণিত হয়নি, ত্রুটিটি ভুল পাসওয়ার্ড বা মৃত সার্ভারের মতো শোনায়।

সংকীর্ণ মেরামতটি কেবল এই সংযোগে একটি সাইফার স্ট্রিং যোগ করে। ডেস্কটপ এডিটরে প্রোফাইলটি খুলুন, উন্নত সেটিংসে যান এবং DEFAULT:@SECLEVEL=0 লিখুন TLS সাইফার ঘরে। NetworkManager কীফাইল একই মান নেয় [vpn] এর অধীনে:

[vpn]
tls-cipher=DEFAULT:@SECLEVEL=0

NetworkManager পুনরায় চালু করুন এবং আবার সংযোগ করুন, কারণ ডেমনটি পার্স করা প্রোফাইল ক্যাশে রাখে এবং নাহলে আগে থেকে ধরে রাখা কপিটিই ব্যবহার করতে থাকবে। লাইনটি রেখে দেওয়ার আগে জানুন এটি কী করে: এই সেটিংটি সাইফারের নাম নয়, বরং কয়েকটি সার্টিফিকেট ও কী প্যারামিটার জুড়ে একটি সীমা, তাই এটি নামানো একক প্রোফাইল যা গ্রহণ করে তার পরিধি বাড়ায়। কোন সার্ভার এটি দরকার করেছিল তা লিখে রাখুন এবং অপারেটর হালনাগাদ উপাদান পুনরায় ইস্যু করলে সেটিংটি বাদ দিন। আর /etc/ssl/openssl.cnf বদলালে সেই ফাইল পড়ে এমন প্রতিটি প্রোগ্রামের জন্য একই সীমায় পৌঁছায়, যা VPN-এর অনেক বাইরে।

OpenVPN 2.6-এ আলাপের জন্য সাইফার তালিকাভুক্ত থাকা দরকার

Ubuntu 22.10 OpenVPN 2.6 দিয়েছে, এবং সেই সংস্করণে --cipher আর নিজে থেকে ডেটা চ্যানেল বেছে নেয় না। সাইফারটি আলাপ করা data-ciphers তালিকাতেও থাকতে হবে, নাহলে ক্লায়েন্ট অপ্রচলিততার সতর্কবার্তা ছাপিয়ে তারপর টানেল তোলাতে ব্যর্থ হয়।

একই সময়ের NetworkManager প্লাগইন এখনো কেবল পুরোনো নির্দেশটিই লিখত। এই বিষয়টি রোগনির্ণয়কে ভাগ করে, কারণ হাতে সংশোধিত প্রোফাইল শেল থেকে সংযোগ করতে পারে অথচ ডেস্কটপ অ্যাপলেট থেকে ব্যর্থ হয়। তালিকাটি সংযোগ ফাইলে [vpn] এর অধীনে যোগ করুন:

data-ciphers=AES-256-CBC

আপনার মনে থাকা মানটি নয়, সার্ভার যে মান ঘোষণা করে সেটিই ব্যবহার করুন; AES-256-GCM প্রেরণ করা সার্ভার কেবল CBC নামানো ক্লায়েন্ট তালিকার সঙ্গে আলাপ করবে না। ম্যানেজার পুনরায় চালু করে আবার সংযোগ করুন, তারপর শেল থেকে চেষ্টাটি আবার করুন সাইফার স্পষ্টভাবে আলাপ ও ফলব্যাক দুইয়ের জন্যই দিয়ে:

sudo openvpn --config client.ovpn --data-ciphers AES-256-CBC --data-ciphers-fallback AES-256-CBC

যদি ওই কমান্ড টানেল তোলে, তবে সার্ভার, সার্টিফিকেট ও শংসাপত্র সবই ঠিক, আর কেবল ম্যানেজারের সংরক্ষিত অপশনটিই ত্রুটি হিসেবে থাকে। keysize নির্দেশ নিয়ে সতর্কবার্তা একই পরিষ্কারের অন্তর্গত: এটি কমেন্ট করে দিন এবং মূল ফাইলটি প্রোফাইলের পাশে রাখুন।

প্যাকেজ ও প্লাগইন ত্রুটি VPN ত্রুটির মতো দেখায়

আপগ্রেডের পরে প্রতিটি ব্যর্থতা ক্রিপ্টোগ্রাফিক নয়। যে কোডনেমে রিলিজ ব্যবহার করে না, সেখানে যোগ করা OpenVPN রিপোজিটরি এমন প্যাকেজ দেয় যা কখনো ইনস্টল হয় না, তাই lsb_release -a কী জানায় তা আপনার যোগ করা তালিকা ফাইলের সঙ্গে মিলিয়ে দেখুন। অনুপস্থিত universe উপাদান বা নিরাপত্তা পকেট এমন প্যাকেজ দেয় যা একেবারেই খুঁজে পাওয়া যায় না। দুই ক্ষেত্রেই প্রোফাইল অক্ষত থাকে আর টানেল অসম্ভব হয়ে পড়ে।

VPN লগের আগে প্যাকেজ ম্যানেজারের ত্রুটি পড়ুন। যদি ক্লায়েন্ট কখনো ইনস্টলই না হয়ে থাকে, তবে প্রোফাইল সম্পাদনার কোনো পরিমাণই হ্যান্ডশেক তৈরি করবে না।

দুই-ফ্যাক্টর প্রোফাইল যা জিজ্ঞাসা করা বন্ধ করে, তা একই গল্পের প্লাগইন সংস্করণ। চ্যালেঞ্জ আসে একটি প্রমাণীকরণ প্লাগইন থেকে, আর যে আপগ্রেড সেটি বাদ দিয়েছে বা বদলেছে তা প্রোফাইল অক্ষত রেখে প্রম্পটটিকে সরিয়ে দেয়। সংযোগ কাজ করাতে দ্বিতীয় ফ্যাক্টর মুছে না ফেলে সমর্থিত প্লাগইনটি পুনরায় ইনস্টল করুন।

ভেন্ডর লাইব্রেরি নীতির ত্রুটির আড়ালে লুকাতে পারে

একটি নমুনা চেনা দরকার, কারণ এটি প্রতিটি নীতি-মেরামতকে হারিয়ে দেয়। হার্ডওয়্যার ভেন্ডরের কনফিগারেশন টুল নিজের OpenSSL লাইব্রেরি ইনস্টল করে সেগুলোকে লোডারের অনুসন্ধান পথে সিস্টেম কপিগুলোর আগে রাখতে পারে। তখন ক্লায়েন্ট এমন লাইব্রেরির বিরুদ্ধে শুরু হয় যা কেউ আপগ্রেড করেনি, আর চালুর ব্যর্থতা দেখতে ঠিক প্রত্যাখ্যাত সার্টিফিকেটের মতো।

VPN প্যাকেজ পুনরায় ইনস্টল করলে কোন লাইব্রেরি আগে পাওয়া যায় তা বদলায় না, আর TLS স্তর নামালে এমন লাইব্রেরিতে পৌঁছায় না যা কখনো সিস্টেম থেকে আসেনি। লোডারকে জিজ্ঞাসা করুন বাইনারি আসলে কোন ক্রিপ্টো অবজেক্ট রিজলভ করে:

ldd /usr/sbin/openvpn | grep -i -E 'ssl|crypto'

ভেন্ডর কপিটি সরান বা পুনর্নির্দেশ করুন, তারপর একই পরীক্ষা আবার চালান। প্রোফাইলে ফেরার আগে প্রত্যাশিত সংস্করণটিই ব্যবহারে থাকা উচিত।

পুরোনো ক্লায়েন্ট পিন করা সময় কেনে, সমাধান নয়

আগের ক্লায়েন্ট সংস্করণ ধরে রাখা যতদিন ধরে রাখা চলে ততদিন টানেল ফিরিয়ে দেয়। এটি ওই প্যাকেজের নিরাপত্তা হালনাগাদ জমাটও করে এবং পরের আপগ্রেডের জন্য একই ভাঙন নির্ধারণ করে, তাই এটিকে সমাধান নয়, তারিখযুক্ত সাময়িক ব্যবস্থা হিসেবে দেখুন।

যদি সত্যিই পিন করেন, প্যাকেজটি স্পষ্টভাবে ধরে রাখুন যাতে অনিয়ন্ত্রিত আপগ্রেড পিনটি বাতিল করতে না পারে, কারণ ও পুনর্বিবেচনার তারিখ লিখে রাখুন, এবং প্রদানকারীর পরের প্রোফাইল রিলিজের জন্য একটি অনুস্মারক দিন। যে অবস্থাটি নজরে রাখা দরকার তা হলো এমন সার্ভার প্রোফাইল যা হালনাগাদ সাইফার আলাপ করে; সেটি থাকলে পিনের আর কোনো যৌক্তিকতা থাকে না। বিপরীতে, অনথিভুক্ত পিন ছয় মাস পরে এমন বিভ্রাট হয়ে দাঁড়ায় যা কেউ ব্যাখ্যা করতে পারে না, কারণ যে এটি প্রয়োগ করেছিল সে চলে গেছে আর ফাইল কিছুই লিপিবদ্ধ করে না।

পরের বার যখন কোনো VPN রিলিজ আপগ্রেডের পরে মারা যায়, পাঁচটি প্রশ্ন ক্রমান্বয়ে করুন: কোন স্তর প্রথম ত্রুটি দিল, TLS নীতি সার্টিফিকেট প্রত্যাখ্যান করল কি, সাইফার দুই দিকেই আলাপযোগ্য কি, প্যাকেজ ও তার প্লাগইন সত্যিই ইনস্টল হলো কি, এবং প্রসেসটি কোন লাইব্রেরি লোড করে। পাঁচটিই পরিষ্কার ফিরে আসার পরেই ডাউনগ্রেড অর্থবহ।

সম্পর্কিত নিবন্ধ