fail2ban ব্যবহার করে সার্ভারে অবৈধ অ্যাক্সেস করার চেষ্টা করা সমস্ত লোককে ফিরিয়ে দিন!

8 min

language: ja bn en es hi pt ru zh-cn zh-tw

নমস্কার, আমি অদক্ষ। আমার আগের নিবন্ধে https://soulminingrig.com/blog/what\-country\-is\-the\-person\-trying\-to\-gain\-unauthorized\-access\-to\-my\-server\-via\-ssh/ থেকে, আমি নিশ্চিত করতে পেরেছি যে মাত্র একদিনে অনেক আইপি থেকে অ্যাক্সেসের চেষ্টা করা হয়েছে। আমি এখন পর্যন্ত এটি নির্বিঘ্নে চালিয়েছি এবং বাস্তবে কোনো অননুমোদিত অ্যাক্সেসের শিকার হইনি, তবে ব্যবস্থা নেওয়া উচিত।
আসলে, লগ ফাইলগুলি জমে যাওয়া এবং দেখতে অসুবিধা হওয়াটা আমার পছন্দ নয়। তাই, আমি Fail2Ban ইনস্টল করার সিদ্ধান্ত নিয়েছি, যা iRedMail ইনস্টল করার সময় একটি নির্ভরতা হিসাবে এসেছিল এবং আমার আগ্রহ ছিল।

এটা কি?

লগ অডিট থেকে সেট করা সংখ্যক চেষ্টা হলে আইপি ব্লক করা সম্ভব।
এছাড়াও, চেষ্টার ক্ষেত্রে iptables এর মাধ্যমে প্যাকেটগুলি হারিয়ে ফেলাও সম্ভব। [ইনস্টলেশন

এইবার আমি রুট হিসাবে লগইন করছি, তাই sudo ব্যবহার করব না। pkg search করার পর নিম্নলিখিত প্যাকেজটি পাওয়া গেছে, তাই এটি ইনস্টল করব।

pkg install py311-fail2ban-1.1.0  
  

মূলত, fail2ban.conf এর কনফিগারেশন ফাইল পরিবর্তন করার সুপারিশ করা হয় না; পরিবর্তে, একটি jail.conf তৈরি করে তাতে লিখতে বলা হয়েছে। তাই, এইবার আমি SSH, Postfix, এবং Dovecot এর জন্য লগইন চেষ্টাগুলি খুব অপছন্দ করি, তাই আমি সেটিং করব।
এছাড়াও, বিভিন্ন ওয়েবসাইট দেখে মনে হচ্ছে যে এটি শুধুমাত্র সেকেন্ডের জন্য নয়, 1w, 1d এর জন্যও সেট করা যেতে পারে, তাই আমি এটি খুব কঠোরভাবে সেট করব। আমি নির্দয়ভাবে এক সপ্তাহের জন্য নিষিদ্ধ করব।

~ # cat /usr/local/etc/fail2ban/jail.local  
[sshd]  
enabled = true  
port    = ssh  
logpath = /var/log/auth.log  
bantime = 1w  
findtime = 1d  
maxretry = 5  
  
[postfix]  
enabled = true  
port    = smtp,ssmtp,submission  
logpath = /var/log/maillog  
bantime = 1w  
findtime = 1d  
maxretry = 10  
action = block-drop[name=postfix, port=smtp, protocol=tcp]  
  
[dovecot]  
enabled = true  
port    = pop3,pop3s,imap,imaps,submission  
logpath = /var/log/maillog  
bantime = 1w  
findtime = 1d  
maxretry = 10  
action = block-drop[name=dovecot, port=imap, protocol=tcp]  
  

মনে হচ্ছে [default] সেকশন তৈরি করা ভালো, তবে আমি আপাতত এই তিনটি নিয়েই কাজ করব এবং প্রয়োজন হলে যোগ করব। এক সপ্তাহ করার কারণ হল:

  • প্রথমত, আমি এখন কী-ভিত্তিক প্রমাণীকরণ ব্যবহার করছি, তাই ভুল করার কোনো সুযোগ নেই।

  • একবার মেইল সার্ভারে লগইন করলে, লগইন প্রমাণীকরণ কিছুক্ষণ ধরে চলে, তাই ম্যানুয়াল ইনপুট ইত্যাদির মাধ্যমে আমার নিজের লগইন চেষ্টা করার সম্ভাবনা খুব কম।

  • একবার নিষিদ্ধ হলে, আমি প্যাকেট সহ সবকিছু হারিয়ে ফেলতে চাই।

  • দিনে 5 বারের বেশি লগইন ভুল করাটাই অস্বাভাবিক।

সুতরাং, এটি কি বেশ কঠোর? নাকি শিথিল? আমি নিষিদ্ধের সময়কাল খুব কম করে রিসোর্স নষ্ট করতে চাই না, তাই আমি এটি এভাবে করেছি। উল্লেখ্য, HTTP সার্ভারে GET মেথডও নিষিদ্ধ করা সম্ভব বলে মনে হচ্ছে। https://hana-shin.hatenablog.com/entry/2023/05/24/210949 আমি এই সার্ভারটি শুধুমাত্র একটি মধ্যবর্তী সার্ভার হিসাবে ব্যবহার করি, তাই আমি এখনও এটি ইনস্টল করিনি, তবে প্রয়োজন হলে আমি এটি চেষ্টা করে দেখতে পারি। এছাড়াও, আমি action = block-drop যোগ করেছি, যার সেটিং নিচে দেওয়া হলো।

# cat /usr/local/etc/fail2ban/action.d/block-drop.conf  
[Definition]  
  
actionstart = iptables -N f2b-&LTname>  
              iptables -A f2b-&LTname> -j DROP  
              iptables -I INPUT -p all -j f2b-&LTname>  
              iptables -I FORWARD -p all -j f2b-&LTname>  
  
actionstop = iptables -D INPUT -p all -j f2b-&LTname>  
             iptables -D FORWARD -p all -j f2b-&LTname>  
             iptables -F f2b-&LTname>  
             iptables -X f2b-&LTname>  
  
actioncheck = iptables -n -L INPUT | grep -q 'f2b-&LTname>[     ]'  
  
actionban = iptables -I f2b-&LTname> -s &LTip> -j DROP  
  
actionunban = iptables -D f2b-&LTname> -s &LTip> -j DROP  
  

মূলত, আমি নিষিদ্ধ হলে প্যাকেট সহ সবকিছু ড্রপ করার জন্য সেট করেছি। আমি ভেবেছিলাম রিজেক্টও ছিল, কিন্তু আবার দেখে https://serverfault.com/questions/157375/reject-vs-drop-when-using-iptables এই সিদ্ধান্তে পৌঁছেছি যে রিজেক্ট ব্যবহার করা উচিত যখন আপনি অন্য পক্ষকে জানাতে চান যে তাদের প্রত্যাখ্যান করা হয়েছে। যেহেতু এটি একটি নিষেধাজ্ঞা, তাই আমি নির্দয়ভাবে প্যাকেট সহ সবকিছু অন্ধকারে ফেলে দেওয়ার সিদ্ধান্ত নিয়েছি।

স্টার্টআপ এবং স্বাস্থ্য পরীক্ষা

এটি FreeBSD, তাই এটি দিয়ে শুরু করুন

service fail2ban start  
  

যদি "Server ready" দেখায় তবে ঠিক আছে। লগ দেখে নিশ্চিত করুন যে এটি সঠিকভাবে কাজ করছে।

# tail /var/log/fail2ban.log  
2024-07-24 13:34:05,654 fail2ban.filter         [39963]: INFO    [sshd] Found  - 2024-07-24 13:34:05  
2024-07-24 13:34:05,755 fail2ban.filter         [39963]: INFO    [sshd] Found  - 2024-07-24 13:34:05  
2024-07-24 13:34:05,884 fail2ban.filter         [39963]: INFO    [sshd] Found  - 2024-07-24 13:34:05  
2024-07-24 13:34:06,000 fail2ban.filter         [39963]: INFO    [sshd] Found  - 2024-07-24 13:34:05  
2024-07-24 13:34:06,317 fail2ban.actions        [39963]: WARNING [sshd]  already banned  
2024-07-24 13:34:06,731 fail2ban.filter         [39963]: INFO    [sshd] Found  - 2024-07-24 13:34:06  
2024-07-24 13:37:14,327 fail2ban.filter         [39963]: INFO    [sshd] Found - 2024-07-24 13:37:14  
2024-07-24 13:42:12,266 fail2ban.filter         [39963]: INFO    [sshd] Found  - 2024-07-24 13:42:12  
2024-07-24 13:42:17,389 fail2ban.filter         [39963]: INFO    [sshd] Found  - 2024-07-24 13:42:17  
2024-07-24 13:42:23,357 fail2ban.filter         [39963]: INFO    [sshd] Found  - 2024-07-24 13:42:23  
  

সাধারণত আইপি ঠিকানাগুলি প্রদর্শিত হয়, তবে এইবার আমি সেগুলি সঠিকভাবে লুকিয়ে রেখেছি। আমি মনে মনে চিৎকার করছি, "তুমি ধরা পড়েছ! ছোট ছেলে!"
(যাইহোক, তারা বট এবং মেশিনের সাথে কী ভাবছে?) এই ধরনের অর্থহীন বিজয়ী ভঙ্গি মাটিতে রেখে, স্বয়ংক্রিয়ভাবে শুরু করার জন্য /etc/rc.conf-এ নিম্নলিখিতটি যোগ করুন।

fail2ban_enable="YES"  
  

এর মাধ্যমে সার্ভার রিস্টার্ট হলেও প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে শুরু হবে।


আজকের জন্য এই পর্যন্তই। উল্লেখ্য, এখন পর্যন্ত আসা লগগুলিতে কোন ব্যবহারকারীর নাম দিয়ে লগইন চেষ্টা করা হয়েছে তা একটি চার্টে দেখানোও আকর্ষণীয় হতে পারে। আবার দেখা হবে।

Related Posts