এক banaction, দুই ট্রান্সপোর্ট: fail2ban-VPN-jail সারানো
ব্যান তার অ্যাকশনের প্রোটোকল পর্যন্তই বিস্তৃত। চেইন কাউন্টারগুলো লিসেনারদের সঙ্গে মিলিয়ে দেখুন, তারপর jail-এর ভেতরেই দুই ট্রান্সপোর্ট ঢাকুন।
fail2ban-এ কিছুই নিজে থেকে প্যাকেট ফেলে না: এটি একটি অ্যাকশন ডাকে, এবং সেই অ্যাকশনই প্রোটোকল ও পোর্ট নির্ধারণ করে। যখন jail ব্যান রিপোর্ট করে অথচ ডেমন লগইন গ্রহণ চালিয়ে যায়, তখন ব্যানটি সাধারণত সত্যি এবং লগ যা বোঝায় তার চেয়ে সংকীর্ণ। অন্য ট্রান্সপোর্ট দিয়ে পুনরায় সংযোগ করা ক্লায়েন্ট কখনও ইনস্টল করা নিয়মটির মুখোমুখি হয় না। কিছু বদলানোর আগে অ্যাকশন যা ইনস্টল করেছে তা ডেমন যা শোনে তার সঙ্গে মিলিয়ে দেখুন, কারণ প্রমাণ আছে অ্যাকশনের লেখা ফায়ারওয়াল চেইনে, jail-এর তালিকায় নয়।
চেইন পড়ুন, jail-এর সারসংক্ষেপ নয়
fail2ban পরিষেবার চেইনের আগে নিজের চেইন ঢোকায়, তাই কাউন্টার তালিকা ঠিক যা আছে তা দেখায়। jail-এর নামে গঠিত একটি চেইন, যাতে একটি নিয়ম আছে যার প্রোটোকল কলামে udp লেখা, আসতে থাকা TCP লগইনগুলোর সম্পূর্ণ ব্যাখ্যা দেয়। শুধু নিষিদ্ধ উৎসের UDP প্যাকেট প্রত্যাখ্যাত হচ্ছে। পরিষেবার একটি TCP লিসেনার আছে, আর সেই চেইনে কিছুই তাকে স্পর্শ করে না।
পাশের jail-এর প্রভাবও লক্ষ্য করুন। একটি হোস্ট নিখুঁতভাবে কনফিগার করা দেখাতে পারে শুধু এই কারণে যে অন্য একটি jail অনুপস্থিত অর্ধেকটি জোগায়, আর ওই jail যেখানে ইনস্টল নেই সেখানে একই বিল্ড কিছুই করে না।
অ্যাকশন একটি প্রোটোকলের নাম দেয়, আর ঠিক সেখানেই ভাঙে
প্রতিটি banaction একটি ফায়ারওয়াল কমান্ড টেমপ্লেট, এবং প্রোটোকল তার একটি প্লেসহোল্ডারে থাকে। সংকীর্ণতা ইচ্ছাকৃত, কারণ একটি ওয়েব jail ও একটি DNS jail-এর একই পোর্ট ব্লক করার কোনো কাজ নেই। এটি ফাঁদে পরিণত হয় যখন পরিষেবা একাধিক ট্রান্সপোর্টে শোনে, যা VPN ডেমনরা নিয়মিত করে। ফিল্টার দুই ট্রান্সপোর্টের ব্যর্থ লগইন দেখতে পারে, অথচ অ্যাকশন একটি ঢাকে।
SoftEther ও OpenVPN ডিপ্লয়মেন্ট সাধারণত একসঙ্গে UDP ও TCP-তে শোনে, এবং লগ লাইন দুই ক্ষেত্রেই একই দেখায় বলে ফিল্টার দুটিই দেখে। অসামঞ্জস্য jail-এর নিজের রিপোর্টে কখনও দেখা যায় না। fail2ban ব্যর্থতাগুলো সঠিকভাবে গুনেছে এবং তারপর এমন নিয়ম ইনস্টল করেছে যা সেই ব্যর্থতাগুলো যে ট্রাফিকের ওপর এসেছিল তার অর্ধেকে প্রযোজ্য।
ব্যান যেন দুই ট্রান্সপোর্ট ঢাকে
এটি jail-এর সংজ্ঞাতেই ঠিক করুন; হাতে লেখা নিয়ম পরের রিলোডে এলোমেলো হয়ে যাবে। প্রতি প্রোটোকলের জন্য একটি করে দুটি অ্যাকশন স্পষ্ট লিখুন:
action = %(banaction)s[name=%(__name__)s-tcp, actionname=%(__name__)s-tcp, protocol="tcp", port="%(port)s", chain="%(chain)s"]
%(banaction)s[name=%(__name__)s-udp, actionname=%(__name__)s-udp, protocol="udp", port="%(port)s", chain="%(chain)s"]
protocol = all দিয়ে এটি সংক্ষিপ্ত করার চেষ্টা করবেন না। ডিফল্ট banaction একটি multiport অ্যাকশন, এবং এটি -p <protocol> -m multiport --dports <port>-এ প্রসারিত হয়; L4 প্রোটোকল ছাড়া পোর্ট মিলের পরীক্ষা করার কিছু নেই, তাই iptables নিয়মটি প্রত্যাখ্যান করে অথচ jail এখনও সফল ব্যান রিপোর্ট করে। iptables-allports বা nftables-allports-এর মতো সর্ব-পোর্ট অ্যাকশন একটি এন্ট্রি গ্রহণ করে বটে, কিন্তু তা ওই উৎসের প্রতিটি পোর্ট ব্লক করে, যা ভিন্ন সিদ্ধান্ত এবং নিজস্ব যুক্তি দাবি করে। protocol-কে tcp বা udp-তে রাখুন এবং দুই এন্ট্রি গ্রহণ করুন।
সেটিং বিশ্বাস না করে নিয়মটির অস্তিত্ব প্রমাণ করুন, কারণ চেইন না ধরা পর্যন্ত সেটিং কেবল একটি অভিপ্রায় বর্ণনা করে:
iptables -S f2b-vpn-tcp
iptables -S f2b-vpn-udp
প্রতিটি চেইনে একটি নিয়ম থাকা উচিত, প্রথমটিতে -p tcp এবং দ্বিতীয়টিতে -p udp, দুটিই নিষিদ্ধ ঠিকানার নাম উল্লেখ করে। তারপর নিশ্চিত করুন একই ঠিকানা দুই ট্রান্সপোর্টেই প্রত্যাখ্যাত হয়। চেইনে না দেখা ব্যান একটি আশা, আর একই উপসর্গের পরের রিপোর্ট আবার একই ঘণ্টা খরচ করাবে।
একটি ব্যান এখনও যা মিস করে, এবং পরের ঘটনা
অ্যাকশন যা করে তা হলো একটি উৎস প্রত্যাখ্যান, এবং কেবল তার মধ্যে তালিকাভুক্ত পোর্টে। ঠিকানা ঘোরানো আক্রমণকারীর বিরুদ্ধে এটি কিছুই করে না, এবং এটি শত্রু মেশিনকে শত শত ব্যবহারকারীর ভাগ করা carrier-grade NAT এক্সিট থেকে আলাদা করতে পারে না, যেখানে একটি ব্যান এমন লোকদের বাদ দেয় যারা কিছুই করেনি। নিশ্চিত করুন ফিল্টার ক্লায়েন্টের সত্যিকারের ঠিকানাটি পড়ে, ফরওয়ার্ড করা হেডার বা প্রক্সি ঠিকানা নয়। উইন্ডোটি যথেষ্ট ছোট রাখুন যাতে একটি ভুল নিজে থেকেই মিটে যায়।
এর কোনোটিই প্রোটোকল ঠিক করা বাদ দেওয়ার পক্ষে যুক্তি নয়; এটি একসঙ্গে দুটি ধারণা ধরে রাখার পক্ষে যুক্তি। ব্যানটি jail-এর সারসংক্ষেপ যা বোঝায় তার চেয়ে সংকীর্ণ, এবং সম্পূর্ণ ব্যানও হুমকির চেয়ে সংকীর্ণ। ফায়ারওয়াল চেইনটি ডেমনরের লিসেনার তালিকার পাশে রাখুন এবং প্রোটোকল ধরে ধরে মিলান, কারণ ওই দুই তালিকাই ঠিক করে ব্যান আদৌ পরিষেবায় পৌঁছাতে পারে কি না।
রিলোড কমান্ড ও চেইন তালিকা jail-এর পাশে রানবুকে রাখুন। পরের ব্যক্তির দুটিরই দরকার হবে, আর jail-এর সারসংক্ষেপ তাকে কোনোটিই বলবে না।