দুই পিয়ারের OpenVPN লিংকের জন্য স্ট্যাটিক কী, নাকি TLS?
OpenVPN-এর স্ট্যাটিক-কী মোড তার ট্রাফিক কী রোটেট করতে পারে না। দুই পিয়ারের যদি স্বয়ংক্রিয় নবায়ন দরকার হয়, TLS মোডে যান এবং পয়েন্ট-টু-পয়েন্ট লেআউট অপরিবর্তিত রাখুন।
শুধু পরস্পরের সঙ্গে কথা বলে এমন দুটি মেশিন সেই টপোলজি ধরে রেখেও নেগোশিয়েট করা ট্রাফিক কী পেতে পারে। নেটওয়ার্কের আকৃতি আর সুরক্ষার মোড স্বাধীন পছন্দ, আর এই দুটিকে মিশিয়ে ফেলার কারণেই মানুষ দুই ডেমন চলমান রেখে ফাইল বদলে স্ট্যাটিক গোপন তথ্য রোটেট করার চেষ্টা করে। চলমান জোড়ার অধীনে কী ফাইল বদলালে কিছুই রোটেট হয় না। স্ট্যাটিক-কী মোড, যাকে OpenVPN 2.6 অপ্রচলিত হিসেবে চিহ্নিত করে, টানেলের পুরো জীবৎকাল একটি কী ধরে রাখে, তাই ডিস্কের ফাইল আর মেমোরির কী কেবল দুই প্রান্ত পুনরায় চালু হওয়ার পরেই আবার মিলে যায়। যদি স্বয়ংক্রিয় নবায়নই প্রয়োজন হয়, তাহলে সুরক্ষার মোড বদলাতেই হবে।
স্ট্যাটিক-কী মোড যা করতে পারে না
সিক্রেট মোডে দুই পিয়ার একটি পূর্ব-শেয়ারড কী শেয়ার করে, যা সরাসরি টানেল এনক্রিপ্ট ও প্রমাণীকরণ করে। কোনো হ্যান্ডশেক নেই, তাই কোনো পক্ষের নতুন কী উপাদান প্রস্তাব করার, পরিচয় প্রমাণ করার বা অপারেটরের হস্তক্ষেপ ছাড়া অমিল থেকে ফিরে আসার কোনো ব্যবস্থা নেই। দুই বৈশিষ্ট্যই কোনো অনুপস্থিত অপশন থেকে নয়, বরং নিয়ন্ত্রণ চ্যানেলের অনুপস্থিতি থেকে আসে, এবং কোনো কনফিগারেশন ফ্ল্যাগ এই মোডে সেটি যোগ করে না।
OpenVPN 2.6 ম্যানুয়াল স্পষ্টভাবে বলে যে নতুন কী তৈরি না হওয়া পর্যন্ত কী টিকে থাকে। এটি ল্যাব লিংক বা নথিভুক্ত রোটেশন পদ্ধতিসহ নির্দিষ্ট যন্ত্রজোড়ার জন্য গ্রহণযোগ্য, আর যেখানে দীর্ঘস্থায়ী গোপন তথ্য বাস্তব ঝুঁকি সেখানে এটি অগ্রহণযোগ্য। ফাইল বদল চলমান জোড়ার জন্য নতুন কী তৈরি করে না; এটি দুই অসহমত পিয়ার তৈরি করে। তাই ফাইল প্রতিস্থাপন রোটেশন না বাড়িয়ে একটি বিভ্রাট যোগ করে।
ফাইল ধারণের বাইরে পিয়ারের পরিচয়ের কোনো ধারণাও নেই। যে কেউ কী ধরে আছে সে-ই পিয়ার, আর টানেলে কিছুই লিপিবদ্ধ করে না কোন পক্ষ কোনটি, তাই বাতিলকরণ সব-অথবা-কিছুই নয়।
লিংকের নকশা না বদলে TLS-এ যাওয়া
TLS মোড একটি নিয়ন্ত্রণ চ্যানেল যোগ করে, আর তার সঙ্গে ডেটা-চ্যানেলের কী নেগোশিয়েট করার ক্ষমতা। পয়েন্ট-টু-পয়েন্ট স্থাপনায় এক পক্ষ সার্ভারের ভূমিকা নেয় আর অন্য পক্ষ ক্লায়েন্টের, কিন্তু টপোলজি দুই পিয়ারের লিংকই থাকে: প্রতিটি পক্ষ অন্যটির এন্ডপয়েন্ট জানে, এবং কোনো পুল বা বহু-ব্যবহারকারী সেবা দেখা যায় না। ভূমিকাগুলো হ্যান্ডশেকের খুঁটিনাটি, নতুন স্থাপত্য নয়।
প্রতিটি মেশিনকে তার নিজের পরিচয় দিন। প্রতিটি পক্ষের দরকার একটি সার্টিফিকেট ও ব্যক্তিগত কী, অন্যটিকে যাচাই করা বিশ্বাস-অ্যাঙ্কর, এবং কে প্রত্যাশিত তা উল্লেখ করা পিয়ার-যাচাইয়ের নিয়ম। সময় বাঁচাতে এক পিয়ারের ব্যক্তিগত কী অন্যটিতে পুনর্ব্যবহার করবেন না; তা দুই পরিচয়কে এক করে ফেলে এবং যেকোনো পক্ষকে আলাদাভাবে বাতিল করার ক্ষমতা সরিয়ে দেয়। নিবন্ধনই এটি সঠিকভাবে করার জায়গা, কারণ পরে ঠিক করার অর্থ সার্টিফিকেট পুনরায় ইস্যু করা।
সুরক্ষা বদলালেও নেটওয়ার্কের চুক্তি অপরিবর্তিত রাখুন। একই টানেল ঠিকানা, রুট ও অনুমোদিত সেবা আগে ও পরে প্রযোজ্য হওয়া উচিত, যাতে মাইগ্রেশন চলাকালীন ব্যর্থতা ছদ্মবেশী রাউটিং বিস্ময় নয়, বরং সুরক্ষার সমস্যা হয়। পরিবর্তনের আগে ঠিকানা ও রুট লিখে রাখুন; পরে সেগুলো তুলনা করা স্মৃতি থেকে পুনর্গঠনের চেয়ে দ্রুত।
কিছু স্থাপনা নিয়ন্ত্রণ চ্যানেলকেও নিজস্ব স্ট্যাটিক কী দিয়ে সুরক্ষিত রাখে, যা ডেটা চ্যানেলের সঙ্গে রোটেট হয় না। সেই কী পেলোড নয়, হ্যান্ডশেক পাহারা দেয়, তাই তা ফাঁস হলে ট্রাফিক নয়, নেগোশিয়েশন প্রকাশ পায়। এটি ডেটা-চ্যানেলের উপাদান থেকে আলাদা রাখুন, এবং এমন প্রতিস্থাপন তারিখ দিন যার মালিক একজন নির্দিষ্ট ব্যক্তি। এটি রোটেট করার অর্থ সমন্বিত সময়-জানালায় দুই পিয়ার পুনরায় চালু করা, তাই এটি স্মৃতির চেয়ে ক্যালেন্ডার এন্ট্রির যোগ্য।
কে কী নবায়ন করে, আর কখন
TLS মোডে নবায়ন চলে কনফিগার করা সীমার মাধ্যমে: একটি সময়ের ব্যবধান, বাইট গণনা বা প্যাকেট গণনা। নথিভুক্ত সময়-নিয়ন্ত্রণই বেশিরভাগ স্থাপনা নির্ভর করে, আর দুই পিয়ারের মধ্যে কম কার্যকর মান প্রতিস্থাপন শুরু করতে পারে, তাই কেবল এক পাশে তা বাড়ালে ঘটনাটি আটকে থাকবে না। আয়তনভিত্তিক সীমা আছে কারণ ব্যস্ত লিংক ঘড়ির আগেই কী শেষ করে ফেলতে পারে। কোনো সীমাই স্বাস্থ্য-পরীক্ষা নয়, আর কোনোটিই আপনাকে বলে না যে নবায়ন সফল হয়েছে।
এই কারণেই একটিমাত্র কনফিগারেশন ফাইল থেকে বারবার ঘটা পুনর্নেগোশিয়েশন নির্ণয় করা বিভ্রান্তিকর। দুই পিয়ারের সেটিংস পড়ুন, তারপর ত্রুটি ধরে নেওয়ার বদলে লগের রূপান্তর দেখুন। যে নবায়ন পরিষ্কারভাবে সম্পন্ন হয় তা নিয়ন্ত্রণ-চ্যানেল ট্রাফিকের ছোট বিস্ফোরণের মতো দেখায়, সংযোগ বিচ্ছেদের মতো নয়।
বস্তুগুলো মাথায় আলাদা রাখুন। সার্টিফিকেট দীর্ঘমেয়াদি পরিচয় প্রমাণ করে এবং আপনার নিয়ন্ত্রিত সময়সূচিতে প্রতিস্থাপিত হয়। ডেটা-চ্যানেলের কী স্বয়ংক্রিয়ভাবে রিফ্রেশ হয়, আর আলাদা প্রমাণীকরণ বিনিময়, যদি স্থাপনার তা দরকার হয়, অ্যাকাউন্ট নীতি অনুসরণ করে এবং পরবর্তী বিনিময়ের জন্য নিজস্ব ব্যবস্থা লাগতে পারে।
ব্যবধান শূন্য করে নবায়ন সম্পূর্ণ বন্ধ করা কোলাহলপূর্ণ লগের সমাধান নয়। এটি একটি সুস্থ জীবনচক্রের ঘটনাকে স্থায়ী কী-তে পরিণত করে, যা আপনাকে যে বৈশিষ্ট্য ছাড়তে চাইছিলেন সেখানেই ফিরিয়ে দেয়।
পরিবর্তন গ্রহণ করা
স্থাপিত রিলিজের সমর্থিত উদাহরণ থেকে নতুন কনফিগারেশন তৈরি করুন, এমন পুরোনো ন্যূনতম স্নিপেট থেকে নয় যার অ্যালগরিদম ও ফাইল পথ অন্য জায়গা থেকে উত্তরাধিকারসূত্রে পাওয়া। সুইচটি সমন্বয় করুন যাতে দুই পিয়ার একসঙ্গে বদলায়, এবং এক পক্ষ চালু হতে ব্যর্থ হলে অনুমোদিত পুনরুদ্ধার পথ রাখুন। রোলব্যাক পরীক্ষা করতে বিভ্রাটের জন্য অপেক্ষা না করে সচেতনভাবে লিংক নামিয়ে দিন। যে রোলব্যাক আপনি অনুশীলন করেছেন তা বর্ণনা করা রোলব্যাকের চেয়ে বেশি মূল্যবান।
তিনটি জিনিস পরীক্ষা করুন: প্রাথমিক পরিচয় যাচাই সফল হয়, অভিপ্রেত অ্যাপ্লিকেশন প্রবাহ কাজ করে, এবং নিয়ন্ত্রিত নবায়ন ট্রাফিক না হারিয়ে ঘটে। তারপর লগের রূপান্তরটি পড়ুন এটি আসলে কী প্রমাণ করে: নতুন কী শনাক্তকারী মানে পিয়াররা প্রতিস্থাপন সম্পন্ন করেছে, টানেল পুনরায় সংযুক্ত হয়েছে তা নয়। এটিকে এক ধাপের প্রমাণ হিসেবে ধরুন, এবং মাইগ্রেশন শেষ ঘোষণা করার আগে ট্রাফিক কাউন্টার দেখুন।
শূন্য-বিভ্রাটের প্রতিশ্রুতি যা লুকিয়ে রাখবে তা হলো যে ব্যর্থতা আপনি এখনো দেখেননি। ব্যর্থ নবায়ন, মেয়াদোত্তীর্ণ সার্টিফিকেট বা পথের ত্রুটি লিংককে এখনও বিঘ্নিত করতে পারে, এবং পরিষ্কার পরীক্ষায় কোনোটিই বাদ পড়ে না। যে বৈশিষ্ট্যের জন্য নকশা করা সার্থক তা আরও সংকীর্ণ ও উপযোগী: রুটিন কী প্রতিস্থাপন আর হাতে ফাইল বদল নয়।