শুধু পোর্ট 25 টানেলে পাঠান, হোস্ট নয়
পোর্ট-নির্ভর নিয়ম শুধু বহির্গামী SMTP টানেল দিয়ে পাঠায়। টেবিল, সোর্স ঠিকানা ও ফেরত পথ সবগুলোরই মিলতে হবে, নইলে কিছুই কাজ করবে না।
লিনাক্স হোস্ট যেন শুধু নিজের SMTP একটি টানেল দিয়ে পাঠায়, তার আগে চারটি জিনিস মিলতে হবে: একটি নির্দিষ্ট টেবিলে রুট, ট্রাফিক বাছাই করা একটি নীতি-নিয়ম, পিয়ার যে সোর্স ঠিকানা গ্রহণ করবে, এবং অসামঞ্জস্য সহ্য করা একটি ফেরত পথ। প্রত্যেকটি আলাদা কনফিগারেশন, প্রত্যেকটির নিজস্ব ব্যর্থতার ধরন আছে। নিচের ক্রমটিই ব্যর্থতাকে সত্যিই ভুল অংশটির দিকে দেখায়। এটি পোর্ট-নির্দিষ্ট রাউটিংয়ের কাজ, VPN ডিফল্ট রুটের অনুরোধ নয়।
পোর্ট নিয়ম ডিফল্ট রুট নয়
স্থানীয়ভাবে তৈরি TCP-কে গন্তব্য পোর্ট 25 দিয়ে মেলানো একটি নিয়ম সেই ট্রাফিককে আপনার নাম দেওয়া টেবিলে পাঠায়। নিয়ম নিজে থেকে কিছু তৈরি করে না: এটি বাছাই করে, আর টেবিলে এমন রুট থাকতে হবে যা প্যাকেট বহন করতে পারে। দুটো একসাথে কেবল একটি প্রোটোকলের বাহ্যিক দিকটি ঢাকে, তাই অন্য হোস্টের জন্য ফরওয়ার্ডিং, আগত মেইল সংযোগ ও IPv6 এই ব্যবস্থার বাইরে থাকে। এটিকে VPN ডিফল্ট নয় বরং পোর্ট-নির্দিষ্ট নীতি বলা সেই সীমাটিকে সৎ রাখে।
wg-quick-এর দুটি সেটিং নীতির অংশ নয়, পূর্বশর্ত। AllowedIPs = 0.0.0.0/0 পিয়ারকে যেকোনো IPv4 গন্তব্য বহন করতে দেয়, এবং Table = off সেই প্রিফিক্সের জন্য wg-quick-কে নিজের ডিফল্ট রুট বসানো থেকে বিরত রাখে। এই নির্দেশনাগুলো এমন ম্যানেজারের সাথে মেশাবেন না যা নিজের রুট নীতি প্রয়োগ করে, কারণ মূল টেবিল কার মালিক তা নিয়ে দুটি একমত হবে না।
রুট, সিলেক্টর ও গার্ড লিখুন
এমন একটি টেবিল নম্বর আর দুটি প্রায়োরিটি বাছুন যা অন্য কিছু ব্যবহার করে না, তারপর রুট, সিলেক্টর ও গার্ড এই ক্রমে প্রয়োগ করুন। নিচের নম্বরগুলো উদাহরণ, সংরক্ষিত মান নয়:
ip -4 route add default dev wg0 src 10.77.0.2 table 51825
ip -4 rule add priority 10000 iif lo ipproto tcp dport 25 lookup 51825
ip -4 rule add priority 10001 iif lo ipproto tcp dport 25 unreachableiif lo নিয়মটিকে স্থানীয় উৎসের ট্রাফিকে সীমিত করে, আর ipproto tcp dport 25 সংযোগের দিক চিহ্নিত করে; ip-rule রেফারেন্স দুটি সিলেক্টরই নথিভুক্ত করে। এগুলো বর্তমান কার্নেল ও iproute2 সংস্করণে আছে, আর পুরোনো সিস্টেমে নিয়মটি সম্পূর্ণভাবে প্রত্যাখ্যাত হয়, যা লোড হয়ে কিছু না মেলানো নিয়মের চেয়ে স্পষ্ট ব্যর্থতা।
পরবর্তী প্রায়োরিটির unreachable নিয়মটিই গার্ড। এটি ছাড়া 51825 টেবিলে অনুপস্থিত রুট সাধারণ ডিফল্টে গড়িয়ে পড়ে, আর টানেল বিচ্ছিন্ন হলে মেইল ফিজিক্যাল লিংক দিয়ে বেরিয়ে যায়, যা ঠিক সেই পরিস্থিতি যেটি প্রতিরোধ করতে নীতিটি বানানো হয়েছিল।
সোর্স ঠিকানাকে মিলতে হবে
রুটের src পছন্দ কেবল সেই সংযোগগুলোর জন্য সোর্স ভরে যারা নিজের সোর্স বাঁধেনি। এটি অনুবাদ নয়, এবং স্পষ্ট বাইন্ডিংকে অগ্রাহ্য করে না, তাই ফিজিক্যাল ঠিকানায় বাঁধা ডেমন সেই ঠিকানা থেকেই পাঠাতে থাকে। আপনি যদি ঠিক এটাই দেখেন, তবে ডেমনটির নিজের সেটিং বদলান বা সচেতনভাবে একটি অনুবাদ নীতি ডিজাইন করুন, কারণ দেরিতে করা সর্বব্যাপী masquerade ভিন্ন পরিণতিসহ ভিন্ন সমাধান।
গেটওয়েতে ক্লায়েন্টের পিয়ারকে যে সোর্সটি সে সত্যিই পায় তা অনুমোদন করতে হবে, সেটি প্রশস্ত গন্তব্য প্রিফিক্স নয় বরং 10.77.0.2/32। ক্লায়েন্টের 0.0.0.0/0 প্রতিটি গেটওয়ে পিয়ারে কপি করলে কোন পিয়ার কোন ট্রাফিকের মালিক তা গুলিয়ে যায়। গেটওয়ের আরও দরকার ফরওয়ার্ডিং, প্রবাহ অনুমোদনকারী ফায়ারওয়াল নীতি, এবং ফেরত পথ, যার মধ্যে আপস্ট্রিম ব্যক্তিগত টানেল ঠিকানা রুট করতে না পারলে ইগ্রেস অনুবাদও অন্তর্ভুক্ত।
ফেরত পথ দেখুন, তারপর স্থায়িত্ব
কিছু বিশ্বাস করার আগে লুকআপগুলো পড়ুন, কারণ তারা দেখায় কোন দিক কোন টেবিল ও কোন সোর্স পায়। পোর্ট 25-এ একটি গন্তব্য এবং পোর্ট 443-এ একই গন্তব্য যথেষ্ট:
ip -4 route get 198.51.100.25 ipproto tcp dport 25
ip -4 route get 198.51.100.25 ipproto tcp dport 443প্রথম লুকআপে wg0 ও অভীষ্ট সোর্স থাকা উচিত, আর দ্বিতীয়টিতে সাধারণ আপলিংক থাকা উচিত। অ্যাপ্লিকেশন নিজের ঠিকানা বাঁধলে লুকআপে সেই ঠিকানাসহ from যোগ করুন। যে উত্তর-দিক wg0 পর্যন্ত পৌঁছে তারপর স্থানীয়ভাবে বাদ পড়ে, সেটি IPv4 রিভার্স-পাথ ফিল্টারিংয়ের দিকে ইঙ্গিত করে, কারণ শুধু বাহ্যিক পোর্টের নিয়ম রিভার্স লুকআপকে টানেল বাছাই করতে বাধ্য করে না।
যেখানে অসমমিত রাউটিং অনুমোদিত, সেখানে net.ipv4.conf.wg0.rp_filter=2 দিয়ে ইন্টারফেস-সীমিত শিথিল মোড উপযুক্ত হতে পারে, এবং আগে all ও ইন্টারফেস মানের কার্যকর সর্বোচ্চ যাচাই করা উচিত। শর্টকাট হিসেবে বৈধতা বিশ্বব্যাপী বন্ধ করবেন না। তারপর টেবিল, প্রায়োরিটি ও গার্ড কনফিগারেশনের মালিকের হাতে দিন, এবং পুনঃসংযোগের পর নতুন সংযোগ খুলে নিশ্চিত করুন বাছাই এখনও টিকে আছে। মনে রাখবেন, স্থানীয় SMTP শ্রোতার উত্তর সোর্স পোর্ট 25 বহন করে, গন্তব্য পোর্ট 25 নয়, যা আলাদা নীতি প্রশ্ন।