ডাউন স্ক্রিপ্ট নাকি ফায়ারওয়াল নিয়ম: কোনটি লিক থামায়?
সংযোগ বিচ্ছিন্ন হলে ইন্টারফেস নামানো ভোঁতা পদ্ধতি এবং প্রায়ই বিশেষাধিকার ছাড়াই চলে। এটি এমন ফায়ারওয়াল নিয়মের সঙ্গে তুলনা করুন যা বিচ্ছিন্নতার পরেও টিকে থাকে এবং ফাঁক বন্ধ করে।
দুটি নকশা একই কথা দেয়: টানেল পড়ে গেলে কিছুই খোলাখুলি বাইরে যায় না. একটি টিয়ারডাউনে স্ক্রিপ্ট চালিয়ে ইন্টারফেস কেটে দেয়। অন্যটি ফায়ারওয়াল নিয়ম চালু রাখে এবং VPN ক্লায়েন্টের কাছে কিছুই চায় না। তারা আলাদা হয় কে পদক্ষেপ নেওয়ার বিশেষাধিকার রাখে, ফাঁকের সময় কী ঘটে এবং পরে মেশিনটি কীভাবে আবার অনলাইনে আসে তা নিয়ে। এই তিনটি বিষয়ে তাদের তুলনা করা কোনটি কঠোরতর তা নিয়ে তর্ক করার চেয়ে বেশি কাজে দেয়।
একই কাজ, দুটি পদ্ধতি
ক্লায়েন্ট টানেল ওঠার সময় ও নামার সময় হুক চালাতে পারে, যদি প্রোফাইল স্ক্রিপ্ট চালানোর অনুমতি দেয়। সেই হুক ক্লায়েন্টের জীবনচক্রের ভেতরে, সংযোগ বন্ধ হওয়ার মুহূর্তে চলে। ফায়ারওয়াল নিয়ম বিপরীতে সিস্টেমের মালিকানাধীন এবং ক্লায়েন্ট চলছে, ভেঙে পড়েছে বা মারা গেছে কিনা তা নিয়ে ভাবে না।
| Property | Teardown script | Firewall unit |
|---|---|---|
| Runs when the client is killed | No | Yes |
| Needs privilege at teardown time | Usually yes | Configured once, at boot |
| Acts on the whole machine | Often, including recovery paths | Only on the flows it matches |
এই টেবিলটাই পুরো যুক্তি। যে স্ক্রিপ্ট কেবল পরিষ্কারভাবে বন্ধ হওয়ার সময় চলে, তা সেই ক্ষেত্রটি ঢাকে যা নিয়ে আপনার সবচেয়ে কম দুশ্চিন্তা ছিল; আসল ক্ষেত্র হলো ক্র্যাশ বা নেটওয়ার্কের অদৃশ্য হওয়া, এবং কোনোটিই পরিচ্ছন্ন টিয়ারডাউন দেয় না।
টিয়ারডাউন হুক কী করতে পারে আর কী পারে না
নথিভুক্ত প্যাটার্নটি নেটওয়ার্ক ইন্টারফেসগুলো ঘুরে loopback ছাড়া সবকিছু নামিয়ে দেয়। ফিজিক্যাল ডিভাইস নামানো থাকলে টানেলের বাইরে কিছুই পালাতে পারে না, যা ঠিক অভিপ্রায়।
#!/bin/sh
for dev in /sys/class/net/*; do
name=$(basename "$dev")
[ "$name" = lo ] || ip link set dev "$name" down
done
এটি স্থানীয় নেটওয়ার্ক, মেশিন যে সেবা হোস্ট করে এবং সমস্যা সারাতে আপনি যে পথ ব্যবহার করতেন সেটিও নামিয়ে দেয়। ল্যাপটপে ওয়্যারলেস ডিভাইসকে পরে কখনও কখনও হাতে টগল করতে হয়, তাই সংক্ষিপ্ত বিভ্রাট একটি মেরামত সেশনে পরিণত হয়। আরও খারাপ, হুককে এসবের কিছু করতে অনুমতি নাও দেওয়া হতে পারে: ক্লায়েন্ট বিশেষাধিকার ছাড়লে টিয়ারডাউন স্ক্রিপ্টটি অননুমোদিত অ্যাকাউন্টে চলে, আর প্রতিটি ইন্টারফেস পরিবর্তন ব্যর্থ হয় একটি অনুমতি ত্রুটিতে যা ঠিক সেই মুহূর্তে লেখা হয় যখন কেউ লগ পড়ে না।
হুককে ভরসা করার আগে ক্লায়েন্ট কীভাবে চালু হয় তা দেখুন। root হিসেবে হাতে চালালে যে স্ক্রিপ্ট কাজ করে, তা বুটে শুরু হওয়া সেবা সম্পর্কে কিছুই প্রমাণ করে না।
ফায়ারওয়াল নিয়ম কী আলাদা করে
যে নিয়ম কেবল টানেল ট্রাফিকের অনুমতি দেয় তা ক্লায়েন্ট প্রসেস চলে গেলেও কাজ করতে থাকে, কারণ কার্নেল সেই প্রসেসের উপর নির্ভর করে না। নিয়মটি আরও সংকীর্ণ: এটি ঠিক যে ফ্লো মেলে সেগুলোই ব্লক করে এবং loopback, স্থানীয় সাবনেট ও পুনরুদ্ধারের পথকে একা ছেড়ে দেয়, তাই এটি মেশিনকে আটকে রাখে না।
বিনিময়টি হলো, নিয়মটি হোস্ট ফায়ারওয়ালের মালিককে লিখতে ও সংরক্ষণ করতে হবে, এবং এটিকে ক্লায়েন্ট আসলে যে টানেল ডিভাইস তৈরি করে তার নাম বলতে হবে. এর মানে নিয়ম ও প্রোফাইল একসঙ্গে রক্ষণাবেক্ষণ করতে হবে; নাম বদলানো ইন্টারফেস একটি ফায়ারওয়াল রেখে যায় যা সব ব্লক করে আর কিছু ব্যাখ্যা করে না।
কোনো পদ্ধতিই অন্যটিকে অপ্রয়োজনীয় করে না। সম্পাদনার পর যে ফায়ারওয়াল নিয়ম কখনও পুনরায় লোড হয় না, তা কখনও না চলা স্ক্রিপ্টের মতোই কাল্পনিক।
persist-tun ঠিক করে ফাঁক আছে কি না
টানেল ডিভাইস বিচ্ছিন্নতা কাটিয়ে টিকে থাকলে তার দিকে যাওয়া রুটগুলোও টেকে। তখন ট্রাফিক পুনর্নির্দেশনার বদলে ফেলে দেওয়া হয়, তাই ডিফল্ট রুট ফিজিক্যাল গেটওয়েতে ফিরে যায় না। এই আচরণই কোনো ফায়ারওয়াল নিয়ম জড়িত হওয়ার আগেই লিককে অসম্ভাব্য করে তোলে।
এই সেটিং ছাড়া ডিভাইসটি সরানো হয় এবং তার সঙ্গে রুটগুলোও, আর ডিফল্ট রুট আবার ফিজিক্যাল গেটওয়ের দিকে মিলতে পারে। তা হবে কি না তা প্ল্যাটফর্ম ও ক্লায়েন্টের উপর নির্ভর করে, আর ঠিক এজন্যই অবস্থাটি অনুমান না করে পর্যবেক্ষণ করতে হবে। সেটিংটিকে kill switch-এর অংশ হিসেবে দেখুন, পারফরম্যান্স অপশন হিসেবে নয়।
পুনঃসংযোগের পথ সচল রাখুন, তারপর চারটি অবস্থা পরীক্ষা করুন
কঠোর ব্লক ক্লায়েন্টকে আবার সংযোগ করতেও বাধা দিতে পারে, কারণ ক্লায়েন্টের এখনও ফিজিক্যাল গেটওয়ে দিয়ে সার্ভারে একটি রুট দরকার, যখন বাকি সবকিছু নিষিদ্ধ। টানেল ওঠার আগে সেই একটি ঠিকানার জন্য হোস্ট রুট বসান, আর আগে নামটি রিজলভ করুন, কারণ আপনার দরকার হওয়ার সময়ে DNS ব্লক থাকতে পারে।
ip route add 198.51.100.20/32 via 192.168.0.1 dev wlan0
তারপর লেবেল নয়, অবস্থাগুলো যাচাই করুন। ইচ্ছাকৃতভাবে চারটি মুহূর্ত অনুশীলন করুন: টানেল ছাড়া ঠান্ডা শুরু, সুস্থ সেশন, কেউ না চাওয়া বিচ্ছিন্নতা, এবং পুনরুদ্ধারের পরের সেশন। প্রতিটি মুহূর্তে ডিফল্ট রুট পড়ুন এবং একটি অনুরোধ করুন যার নির্গমন ঠিকানা দৃশ্যমান। টানেল নামা অবস্থায় যে অ্যাপ্লিকেশন হাল ছেড়ে দেয়, তা মেইল ক্লায়েন্ট বা আপডেটার সম্পর্কে কিছু বলে না, তাই শেষ পরীক্ষাটি একটি ব্যাকগ্রাউন্ড অ্যাপ্লিকেশন দিয়ে পুনরাবৃত্তি করুন। নিয়ম, ইন্টারফেসের নাম ও পুনরুদ্ধারের ধাপ লিখে রাখুন, কারণ যে kill switch কেউ যাচাই করতে পারে না তা গুজব।