ডিস্ট্রিবিউটেড ডেনায়াল অফ সার্ভিস বা "DDoS" আক্রমণ অপমানজনক ডিজিটাল কমিউনিকেশন ট্যাকটিক্সের মাধ্যমে একটি সার্ভারের রিসোর্স দখল করে। এই টাইপের আক্রমণগুলো কম্পিউটার জগতের সংগঠিত рейড। অনেক অটপি एন্টি-লাইক অ্যাকশন মিলে এমন একটি ভয়ঙ্কর হুমকি তৈরি করে যা একটি অভিজ্ঞ সার্ভারকেও তার ট্র্যাকে থামিয়ে দিতে পারে। সবচেয়ে খারাপ, এমন একাধিক উপায় আছে যেসবের মাধ্যমে অনাকাঙ্ক্ষিত সার্ভারদের বিরুদ্ধে গেরিলা ওয়েব ওয়ারফেър ছেড়া হয়। সৌভাগ্যক্রমে, সার্ভারগুলো ফাইট ব্যাক করার জন্য কনফিগার করা যায়।
Nginx, ইউনিক্স মেশিনের জন্য অত্যধিক জনপ্রিয় একটি সার্ভার সিস্টেম, DDoS আক্রমণের কার্যকারিতা বড় মাত্রায় সীমিত করার জন্য পর্যাপ্ত বিল্ট-ইন ফাংশনালিটি लेकर আসে।
এখানে Nginx-চালিত সার্ভারে ऐসা হুমকি হ্যান্ডেল করার জন্য কিছু কার্যকর অপশন দেওয়া হলো:
আপনার কনফিগারেশন ফাইল ব্যাকআপ নিন
কোনো সেটিংস পরিবর্তন করার আগে, নিশ্চিত করুন আপনি আপনার সার্ভারের কনফিগারেশনের একটি কুইক ব্যাকআপ নিয়েছেন। নিচের কমান্ডটি এই কাজে লাগবে:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup-original
একবার হলে, আপনি আগে বড়তে পারেন।
ট্রাফিক চেক করা
আপনার সার্ভারের ট্রাফিকের ওপর নজর রাখা সিকিউরিটি অপ্টিমাইজ এবং ভবিষ্যতে অতিরিক্ত ট্যাকটিক্স ইমপ্লিমেন্ট করা সহজ করে দেয়। Nginx-এ এর জন্য একটি স্পেসিফিক মডিউল আছে।
একটি স্ট্যাস পেজ সেট আপ করুন
Nginx সাধারণত "stub status" (http_stub_status_module) নামে একটি মডিউলের সাথে আসে যা এই ধরনের ফাংশনালিটি আপনার সার্ভার এনভায়রনমেন্টে сравন্যভাবে সহজে ইন্টিগ্রেট করতে দেয়। প্রথমে, নিচের কমান্ড দিয়ে এটি চেক করুন:
nginx -V
অথবা উপরের কমান্ডকে grep-এ পাইপ করুন দ্রুত খুঁজে পেতে:
nginx -V 2>&1 | grep -o with-http_stub_status_module
আপনার আউটপুট উপরের আউটপুটের মতো দেখলে, আপনি गुड টু গো; অন্যথায়, আপনাকে মডিউলটি অন্তর্ভুক্ত করে Nginx রিইনস্টল বা রিকম্পাইল করতে হবে।
একটি স্ট্যাস পেজ সেট আপ করা সহজ, কিন্তু আপনাকে এটিতে অ্যাক্সেস শুধু মিনিমাম (আপনার মেশিন) পর্যন্ত সীমাবদ্ধ রাখতে হবে সিকিউর রাখতে। আপনার সার্ভারের মেইন কনফিগ ফাইল খুলুন যা "/etc/nginx/nginx.conf"-এ পাওয়া যায়।
এটি খুলুন এবং "http directive"-এ নিচের কোড যোগ করুন মডিউলটি এক্টিভেট করতে, আপনার নিজের ইনফো "localhost", "/status_page" এবং "127.0.0.1"-এর বদলে বসিয়ে:
server {
listen 80;
listen [::]:80;
server_name localhost;
##
# Status Page Settings
##
location /status_page {
stub_status on;
allow 127.0.0.1;
allow ::1;
deny all;
}
}
নোট: এই ফাইল মডিফাই করতে আপনাকে sudo প্রিভিলেজ দরকার।
এখন আপনার কনফিগারেশন টেস্ট করুন:
sudo nginx -t
সব ঠিক থাকলে, আপনার সার্ভারকে একটি রিলোড সিগন্যাল পাঠান:
sudo systemctl reload nginx
আপনার স্ট্যাস পেজ অ্যাক্সেস করতে, আপনার server_name লোকেশন ফলো করুন "/status_page" দিয়ে একটি ওয়েব ব্রাউজার বা curl-এর মতো কমান্ড-লাইন টুল দিয়ে। (এটি সাহায্য করবে যদি আপনার ব্রাউজারের ক্যাশে আটোমেটিক্যালি আপডেট না হয়।) আমাদের উদাহরণে পেজ অ্যাক্সেস করার curl কমান্ড:
curl localhost/status_page
ব্রাউজারে, উপরেরটি নিচের ছবির মতো দেখাবে।
অ্যাক্সেস লগ চেক করুন
আপনি যদি উপরের কনফিগার করা স্ট্যাস পেজ চেক করার সময় অযাবহ ট্রাফিক লক্ষ্য করেন, তবে সার্ভারের অ্যাক্সেস লগ চেক করা ভালো আইডিয়া। এটি পাওয়া যায় "/var/log/nginx/access.log"-এ। লগে HTTP মেথডগুলো, ডেট/টাইম অ্যাক্সেস অটেম্প্ট, ইউজার এজেন্ট এবং এক্সেস করা পেজগুলো লিস্টেড থাকে।
কানেকশন লিমিট করা
DDoS আক্রমণ প্রতিরোধের জন্য চেষ্টা করার লायक অনেক উপযোগী ট্যাকটিক্সের মধ্যে, সবচেয়ে সিম্পল এবং ইফেক্টিভ একটি হলো ইনকামিং ট্রাফিক রেট লিমিট করা।
আদর্শভাবে, আপনাকে অ্যাক্সেস কেবল ততটুকু সীমাবদ্ধ করা উচিত যাতে ম্যালিশিয়াস বটগুলো মানবাতের বাইরে রেটে আপনার সার্ভারকে ওভারপাওয়ার করতে না পারে, একই সাথে মানব ক্লায়েন্টদের জন্য যুক্তিসঙ্গত রেট বজায় রাখা। Nginx-এ, এটি limit_req_zone এবং limit_req ডিরেক্টিভ দিয়ে অর্জন করা যায়। নিচের কোড আপনার সার্ভার কনফিগার করা যেকোনো লোকেশনে ব্যবহার করার জন্য মেমরি এবং রেট কনস্ট্রেইন্ট সেট করে:
limit_req_zone $binary_remote_addr zone=speedbump:10m rate=10r/s;
"Zone" মেমরিতে যে স্পেসে ইউজার রিকোয়েস্টগুলো স্টোর হয় তার নাম এবং সাইজ (এই কেসে মেগাবাইটে) স্পেসিফাই করে। "Rate" প্রতি সেকেন্ডে Nginx কতটুকু রিকোয়েস্ট এক্সেপ্ট করবে তা নির্ধারণ করে (এই উদাহরণে ১০)। এই কোডটিকে একটি রুল এবং ফলো করা কোডটিকে সেই রুলের ব্যবহার ভাবুন:
limit_req zone=speedbump burst=20;
উপরোক্ত কোডটি শুধু আমাদের লিমিটিং রুল ইমপ্লিমেন্ট করে না; এটি ছোট একটি কিউও যোগ করে (আপ টু টোয়েন্টি রিকোয়েস্ট) যাতে লেজিটিমেট কানেকশনগুলো যারা একটু ফাস্ট আসে, রুল এবং কিউ উভয়ই এক্সিড করলে ক্লায়েন্টের জন্য ৫০৩ এরর ফেলায়। নিচে nginx.conf-এ দুটি ডিরেক্টিভ কীভাবে দেখে তা দেখানো হলো:
IP অ্যাড্রেস ব্ল্যাকলিস্ট করা
আপনি যদি আপনার সার্ভার DDoS করছেন সেই IP অ্যাড্রেস পেয়ে যান, তবে আপনি সেটিকে সিম্পলি ব্ল্যাকলিস্ট করে সেটি থেকে উদ্ভূত যেকোনো কানেকশন ড্রপ করতে পারেন।
আপনার সার্ভার ডিরেক্টিভে নিচের কোড যোগ করুন:
location / {
deny 123.123.123.0/28;
# ...
}
নির্দিষ্ট ফাইলে রিকোয়েস্ট ব্লক করা
যদি DDoS আক্রমণ আপনার সার্ভারের নির্দিষ্ট ফাইলগুলোর লক্ষ্য করে - উদাহরণস্বরূপ, ওয়ার্ডপ্রেসের xmlrpc.php ফাইল (এটি অধিকাংশ ওয়ার্ডপ্রেস সার্ভারে 헤ভিলি টার্গেটেড ফাইল) - তবে আপনি সেটির সব রিকোয়েস্ট ব্লক করতে পারেন। আপনার সার্ভার ডিরেক্টিভে এই কোড যোগ করুন:
location /xmlrpc.php {
deny all;
}
উপরের প্রসিডিউর ফলো করলে, আপনি অধিকাংশ DDoS আক্রমণ লিমিট করতে পারবেন। আপনার সার্ভারে রাখতে পারেন এমন অতিরিক্ত সিকিউরিটি অপশনของ জন্য Nginx ডকুমেন্টেশন চেক করতে ভুলবেন না।