iptables: VPN ক্লায়েন্টদের শুধু একটি হোস্টে পৌঁছাতে দিন, আর কোথাও নয়
আপনার প্রয়োজনীয় নিয়মটি FORWARD-এ, INPUT-এ নয়। VPN পুলের জন্য একটি গন্তব্য অনুমোদন করুন, বাকিগুলো প্রত্যাখ্যান করুন, তারপর কাউন্টার ও রোলব্যাক কমান্ড দিয়ে তা প্রমাণ করুন।
সম্পর্কহীন দেখতে দুটি সাপোর্ট টিকিট আসলে একই কারণ ভাগ করে। প্রথমটিতে একজন প্রশাসক চান সার্ভার কেবল টানেল থেকে সংযোগ গ্রহণ করুক; দ্বিতীয়টিতে VPN ব্যবহারকারীদের একটি অভ্যন্তরীণ হোস্ট পর্যন্ত পৌঁছানো উচিত, তার বেশি নয়। দুটি নীতিই FORWARD-এর, আর দুটিই সাধারণত INPUT-এ প্রয়োগ করার চেষ্টা হয়। ফলাফলটি ফায়ারওয়ালের মতো দেখায়, কিন্তু প্লেসহোল্ডারের মতো আচরণ করে।
কোন চেইন আপনার প্রশ্নের উত্তর দেয়
একটি VPN ক্লায়েন্ট যে প্যাকেট LAN হোস্টে বা এরপর ইন্টারনেটে পাঠায়, কার্নেল সেগুলো ফরওয়ার্ড করে এবং FORWARD-এ মূল্যায়ন করা হয়। INPUT ও OUTPUT কেবল সেই ট্রাফিক দেখে যা সার্ভারেই শেষ হয় বা সার্ভার থেকেই শুরু হয়। তাই tun0-এ না আসা সবকিছুর জন্য প্রত্যাখ্যান সার্ভারের নিজস্ব লিসেনার রক্ষা করে, আর এটি আপনার SSH সেশনও শেষ করবে, যদি আগে প্রতিষ্ঠিত ফ্লো অনুমোদিত না হয়। ক্লায়েন্টরা কোথায় যেতে পারবে তা নিয়ে এটি কিছুই বদলায় না।
প্রথমে প্রশ্নটির নাম দিন: কে সার্ভারে পৌঁছাতে পারবে, নাকি ক্লায়েন্টরা কোথায় যেতে পারবে। বেশিরভাগ নেটওয়ার্কে দুটি উত্তরই দরকার, ভিন্ন ভিন্ন চেইনে।
আগে স্টেট, তারপর অনুমতি, তারপর প্রত্যাখ্যান
একটি অনুমোদন-তালিকা তখনই কাজ করে যখন নির্দিষ্ট অনুমতিটি সাধারণ প্রত্যাখ্যানের ওপরে থাকে, এবং ফেরত ট্রাফিক দুটির ওপরে অনুমোদিত হয়। নির্দিষ্ট অবস্থানে নিয়ম ঢোকান, তারপর iptables -S FORWARD দিয়ে চেইনটি ডাম্প করুন, যাতে ক্রমটি অনুমান নয়, দৃশ্যমান হয়।
POOL=10.99.0.0/24
iptables -I FORWARD 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD 2 -s "$POOL" -d 172.31.20.15 -p tcp -m multiport --dports 443,3389 -j ACCEPT
iptables -I FORWARD 3 -s "$POOL" -j REJECTদুটি বিবরণ ঠিক করে এটি বাস্তব ট্রাফিকের সঙ্গে টিকবে কি না। স্টেট নিয়ম ছাড়া, আপনি এইমাত্র অনুমোদিত সংযোগগুলোর উত্তর নিজেই প্রত্যাখ্যানের বিপরীতে মূল্যায়িত হয়ে ফেলে দেওয়া হয়। সীমাহীন LOG নিয়ম প্রথম স্ক্যানেই একটি ছোট পার্টিশন শেষ করে ফেলতে পারে, তাই লগিং চালু রাখার আগে -m limit --limit 10/min যোগ করুন। REJECT সঙ্গে সঙ্গে ত্রুটি ফেরত দেয়, যা তালিকা সাজানোর সময় বেশি বন্ধুত্বপূর্ণ; DROP নিঃশব্দে ফেলে দেয়, তাই প্রতিটি ভুল টাইমআউটের মতো দেখায়। সচেতনভাবে একটি বেছে নিন এবং পছন্দটি পরিবর্তনের রেকর্ডে লিখুন।
ফরওয়ার্ডিং ও NAT আগেই কাজ করতে হবে
ফিল্টারিং প্রমাণ করতে পারে না যে পথ আছে। আগে নিশ্চিত করুন কার্নেল আদৌ ফরওয়ার্ড করে, এবং এই সেটিংটি শেলের এককালীন আদেশ নয়, স্থায়ী করুন। ফিল্টার শেষ স্তর, প্রথম নয়।
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s "$POOL" -o eth0 -j MASQUERADEমাসকারেড কোথায় থাকবে তা নির্ভর করে ক্লায়েন্টরা কোথা দিয়ে বেরোয় তার ওপর। যদি তারা টানেল দিয়ে দূরবর্তী নেটওয়ার্কে যায়, NAT নিয়মটি WAN ইন্টারফেসে নয়, ওই ইন্টারফেসে বসে। তারপর কাউন্টার দেখুন: POSTROUTING কাউন্টার যদি কখনো না নড়ে, অথচ FORWARD গ্রহণের সংখ্যা বাড়ে, তাহলে ফেরত পথ ভাঙা এবং ফিল্টার ঠিক আছে। এই পাঠ একটি দুপুর নষ্ট করে সেই নিয়মগুলো নতুন করে লেখা থেকে বাঁচায়, যেগুলো কখনোই সমস্যা ছিল না।
মেইল ব্লকটি এক চেইন ওপরে
INPUT-এ পোর্ট 25 ব্লক করা কেবল VPN সার্ভারে ঠিকানাকৃত মেইল থামায়। টানেল দিয়ে মেইল পাঠানো একটি আক্রান্ত ক্লায়েন্ট ফরওয়ার্ড হয়, তাই ব্লকটি 465 ও 587-এর পাশে FORWARD-এ থাকতে হবে। যদি কোনো অ্যাপ্লিকেশন বৈধভাবে মেইল রিলে করে, তার গন্তব্য ও পোর্ট ওই নিয়মের ওপরে রাখুন।
iptables -I FORWARD 2 -s "$POOL" -p tcp -m multiport --dports 25,465,587 -j REJECTঅন্য কিছু কঠোর করার আগে প্রত্যাখ্যান কাউন্টারটি এক সপ্তাহ চলতে দিন। যে সংখ্যাটি বাড়া থামায়, সেটিই সেই বৈধ প্রবাহ যা আপনি এইমাত্র ভেঙেছেন।
আবার পড়ুন, তারপর একজন ক্লায়েন্ট থেকে প্রমাণ করুন
নিয়মসমষ্টি কার্নেল যেমন রিপোর্ট করে তেমনভাবে পড়ুন, আপনার স্ক্রিপ্ট যেমন লিখেছে তেমনভাবে নয়। iptables -S FORWARD দিয়ে শুরু করুন, তারপর iptables -t nat -L POSTROUTING -n -v দিয়ে NAT টেবিল, তারপর আপনি যে প্রবাহ পরীক্ষা করছেন তার conntrack এন্ট্রি। কাজ চলার সময় একটি রোলব্যাক কমান্ড বা নির্ধারিত ফ্লাশ রাখুন। প্রতিটি আহ্বানে -w দরকার, নইলে দুই প্রশাসক xtables লক-এ সংঘর্ষ করবেন। পরিবর্তন উইন্ডোতে এর কোনোটিই ঐচ্ছিক নয়।
পুলের ভেতরের একটি ক্লায়েন্ট এবং বাইরের একটি ক্লায়েন্ট থেকে পরীক্ষা করে শেষ করুন। যে নিয়ম কেবল আপনি যে মেশিনে টাইপ করেছেন সেখান থেকেই কাজ করে, তা নীতি নয়।