FORWARD, OUTPUT ও IPv6 কভার করা রাউটার কিল সুইচ
শুধু FORWARD-এ কিল সুইচ রাউটারকে অবাধে ফাঁস হতে দেয়, আর শুধু IPv4 নিয়ম IPv6 খোলা রাখে। চেইনগুলো সাজান এবং টানেল বন্ধ থাকা অবস্থায় পরীক্ষা করুন।
আপনি রাউটারে লগ ইন করেন, একটি ফোরাম পোস্ট থেকে কিল সুইচ নিয়মের সেট পেস্ট করেন, এবং টানেল পড়ার মুহূর্তেই LAN ব্রাউজ করা বন্ধ করে দেয়। দুই দিন পরেও রাউটার সাধারণ WAN দিয়ে তার ডায়নামিক DNS রেকর্ড হালনাগাদ করে, এবং অতিথি ল্যাপটপ এখনও IPv6 সাইটে পৌঁছায়। দুটি আচরণই স্বাভাবিক, কারণ পেস্ট করা নিয়মগুলো একটি চেইন ও একটি ঠিকানা পরিবার কভার করেছিল, এবং এর কোনোটিই পুরো রাউটার নয়। প্যাকেটের পথগুলো ক্রমানুসারে দেখলে ঠিক যা বাদ পড়েছে তা বোঝা যায়।
রাউটার থেকে শুরু করুন, ল্যাপটপ থেকে নয়
রাউটার স্তরের নীতি ছোট অফিসের জন্য আকর্ষণীয় কারণ এর পেছনের প্রতিটি ডিভাইস একই আচরণ উত্তরাধিকারসূত্রে পায় এবং কেউ ক্লায়েন্টে সুইচ চালু করতে ভুলতে পারে না। এটি প্রতিটি ফার্মওয়্যার হালনাগাদের পর পরীক্ষার জন্য একটি জায়গাও দেয়। যা দেয় না তা হলো রাউটারের নিজের ট্রাফিক বা দ্বিতীয় ঠিকানা পরিবারের স্বয়ংক্রিয় কভারেজ, এবং এগুলোই বেশিরভাগ ব্যর্থ স্থাপনার পেছনের দুই ফাঁক।
কিছু বদলানোর আগে কাগজে তিনটি তথ্য লিখুন: WAN ইন্টারফেসের নাম, LAN ব্রিজের নাম, এবং VPN এন্ডপয়েন্টের ঠিকানা ও পোর্ট। তিনটিই নিয়মে লাগবে, এবং ইন্টারফেসের নাম অনুমান করা হলো সঠিক দেখতে হওয়া নিয়ম-সেটের কিছু না করার সবচেয়ে সাধারণ কারণ।
একটি প্যাকেট যে তিনটি পথ নিতে পারে সেগুলো দেখুন
ল্যাপটপ থেকে ইন্টারনেটের দিকে ট্রাফিক ফরওয়ার্ড হয়, তাই এটি FORWARD চেইন দিয়ে যায়। রাউটার নিজে যে ট্রাফিক তৈরি করে, যেমন DNS ফরওয়ার্ডিং, NTP কোয়েরি, DDNS হালনাগাদ এবং VPN-এর নিয়ন্ত্রণ চ্যানেল, তা OUTPUT দিয়ে যায়। রাউটারকে সম্বোধন করা ব্যবস্থাপনা ট্রাফিক INPUT দিয়ে আসে।
তাই শুধু FORWARD-এ তৈরি কিল সুইচ ক্লায়েন্টদের রক্ষা করে আর কিছুই না। সারণি দেখায় কেন শুরুর দৃশ্যের ফাঁস রহস্যময় নয়, অনুমানযোগ্য।
| Packet path | Example | Chain that sees it |
|---|---|---|
| LAN client to WAN or tunnel | Browser request | FORWARD |
| Router-originated | DDNS update, NTP | OUTPUT |
| Addressed to the router | SSH from the LAN | INPUT |
বেশিরভাগ নকশায় আপনার INPUT-এ কিল সুইচ লাগে না, কিন্তু টানেল বন্ধ থাকার সময় ব্যবস্থাপনা প্রবেশাধিকার চালু রাখতে হয়। নাহলে VPN-এর প্রথম ব্যর্থতায় আপনি কনসোল কেবল নিয়ে অফিসে যাবেন।
নিয়মগুলো এমনভাবে সাজান যাতে টানেল তবুও উঠতে পারে
কাজ করা কিল সুইচ হলো অনুমতির সেই তালিকা যা প্রত্যাখ্যানে শেষ হয়, এবং ক্রমই এটিকে কিল সুইচ বানায়, ইট নয়। প্রথমে loopback, VPN এন্ডপয়েন্ট, প্রতিষ্ঠিত ফ্লোয়ের উত্তর এবং টানেল ইন্টারফেসের অনুমতি দিন; বাকিটা শেষে প্রত্যাখ্যান করুন।
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 198.51.100.7 -p udp --dport 51820 -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o wg0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j REJECT
এই পর্যায়ে এন্ডপয়েন্ট একটি ঠিকানা হওয়া উচিত, হোস্টনেম নয়। চূড়ান্ত প্রত্যাখ্যান DNS ব্লক করলে, প্রদানকারীর হোস্টনেম উল্লেখ করা নিয়ম আর সমাধান করা যায় না, এবং টানেল পুনরায় চালু হওয়ার পর আর কখনও ওঠে না. প্রদানকারী এন্ডপয়েন্ট বদলালে নীতি প্রয়োগের আগে নাম সমাধান করুন এবং সেই নিয়মটি একই স্ক্রিপ্ট থেকে সতেজ করুন।
ক্লায়েন্ট ট্রাফিকের জন্য একই আকৃতি FORWARD-এ পুনরাবৃত্তি করুন, এবং প্রত্যাখ্যানের উপরে একটি স্পষ্ট ব্যবস্থাপনা নিয়ম রাখুন। সেই ব্যবস্থাপনা নিয়ম সংকীর্ণ কিন্তু নাগালের মধ্যে রাখুন, এবং প্রথম SSH সেশন বন্ধ করার আগে দ্বিতীয় সেশন খুলে তা নিশ্চিত করুন। কিল সুইচ বদলানোর সময় নিজেকে বাইরে তালাবন্ধ করা যথেষ্ট সাধারণ, তাই পরিকল্পনা করুন। WireGuard চালানো রাউটারে পিয়ারের allowed-ips ঠিক করে টানেলে কী ঢোকে, আর এই নিয়মগুলো ঠিক করে এটি ছাড়া কী বেরোতে পারে।
IPv6-এর নিজের দরজা দরকার
উপরের সব IPv4। আপনার LAN-এ কার্যকর IPv6 থাকলে এবং টানেল শুধু IPv4 বহন করলে, প্রতিটি আচ্ছাদিত ডিভাইসের ইন্টারনেটে সরাসরি পথ এখনও আছে যা আপনার নতুন নিয়ম কখনও দেখে না। দ্বৈত স্ট্যাকের ল্যাপটপ সেটি সানন্দে বেছে নেবে, আর কিল সুইচ শুধু IPv4 দিয়ে পরীক্ষা করা ব্যক্তির কাছে নষ্ট দেখাবে।
ip6tables -A FORWARD -i br-lan -j REJECT
ip6tables -A OUTPUT -o eth0 -j REJECT
ip6tables -A OUTPUT -o lo -j ACCEPT
এখানেও ক্রম গুরুত্বপূর্ণ: loopback-এর অনুমতি WAN-এর প্রত্যাখ্যানের আগে আসতে হবে, নাহলে রাউটারের স্থানীয় সেবাগুলো অদ্ভুতভাবে ব্যর্থ হতে শুরু করে। যদি নেটওয়ার্ক IPv6 একেবারেই ব্যবহার না করে, তবে WAN ও LAN-এ এটি বন্ধ করা সহজ এবং ভুলে যাওয়ার কিছু থাকে না।
কিছু VPN ক্লায়েন্ট শুধু IPv4-এর জন্য ডিফল্ট রুট ইনস্টল করে এবং বিদ্যমান IPv6 ডিফল্ট রুট অক্ষত রাখে। টানেল সংযুক্ত হওয়ার পর রাউটিং টেবিল দেখুন, ক্লায়েন্ট সামলে নিয়েছে ভেবে নেওয়ার বদলে।
টানেল বন্ধ থাকা অবস্থায় এটি প্রমাণ করুন
রাউটার থেকে টানেল থামান এবং তিন জায়গা থেকে এই ক্রমে পরীক্ষা করুন:
# systemctl stop wg-quick@wg0
# ip route get 203.0.113.1
# curl -m 5 -sS http://example.com || echo blocked
# iptables -vnL OUTPUT | head
# ip6tables -vnL OUTPUT | head
রুট অনুসন্ধান বলে প্যাকেট কোথায় যাবে, আর কাউন্টার বলে আপনার নিয়ম কখনও মিলেছিল কি না। ব্যর্থ পরীক্ষার পর শূন্য প্যাকেটের নিয়ম কিছুই বাঁচায় না, এবং সাধারণ কারণ হলো আপনার টাইপ করা থেকে ভিন্ন ইন্টারফেস নাম। রাউটার যে ট্রাফিক তৈরি করে তা স্পষ্টভাবে পরীক্ষা করুন, কারণ LAN পাশ থেকে পরীক্ষা OUTPUT চালাতে পারে না।
প্রয়োজনের আগেই ব্যর্থতার মোড ঠিক করুন। fail-closed টানেল ফেরার আগ পর্যন্ত ক্লায়েন্টদের অফলাইন রাখে; fail-open সাধারণ WAN প্রবেশাধিকার ফিরিয়ে দেয় এবং আপনার গুরুত্বপূর্ণ ট্রাফিকের উদ্দেশ্য নষ্ট করে। উচ্চ মেট্রিকসহ VPN পুলের দিকে blackhole রুট fail-closed নকশার জন্য উপকারী দ্বিতীয় স্তর, কারণ টানেল রুট হারিয়ে গেলে এটি ডিফল্টে পড়ে যাওয়ার বদলে টিকে থাকে।
LAN ক্লায়েন্ট, রাউটারের তৈরি অনুরোধ এবং IPv6 অনুরোধ তিনটিই টানেল বন্ধ থাকা অবস্থায় ব্যর্থ হলে, এবং টানেল উঠলে তিনটিই আবার কাজ করলে তবেই সেটআপ গ্রহণ করুন।