دسته بندی:

نحوه نصب اسکریپت DDoS Deflate؛ آنتی‌دیداس سرور لینوکس

نحوه نصب اسکریپت DDoS Deflate؛ آنتی‌دیداس سرور لینوکس

حدود ۱۰ دقیقه مطالعه

اسکریپت DDoS Deflate یک شل‌اسکریپت سبک است که هر چند ثانیه یا هر چند دقیقه تعداد اتصال‌های باز هر آی‌پی به سرور را می‌شمارد و هر آی‌پی که از حد تعیین‌شده عبور کند را برای مدت مشخصی در فایروال سرور (iptables، CSF یا فایروال APF) مسدود می‌کند. در آموزش‌های قدیمی فارسی همین ابزار با عنوان کلی «نصب Anti DDoS روی سرور لینوکس» معرفی شده است. پیش‌نیازش داشتن یک فایروال فعال است؛ اگر هنوز CSF را راه نینداخته‌اید، نصب فایروال CSF را ببینید. نصبش پیچیده نیست، اما از همین ابتدا بدانید که این ابزار فقط برای حمله‌های کوچک و سطح اتصال مفید است و در برابر حمله حجمی که پهنای باند ورودی سرور را پر می‌کند، عملاً کاری از دستش برنمی‌آید.

DDoS Deflate دقیقاً چه می‌کند؟

منطق این اسکریپت ساده است: فهرست اتصال‌های TCP و UDP سرور را می‌گیرد، آی‌پی طرف مقابل را جدا می‌کند و تعداد تکرار هر آی‌پی را می‌شمارد. هسته کار چیزی شبیه این دستور است:

ss -Hntu | awk '{print $6}' | sort | uniq -c | sort -nr

هر آی‌پی که تعداد اتصال‌هایش از مقدار NO_OF_CONNECTIONS بیشتر شود، به‌صورت خودکار در فایروال بلاک می‌شود و پس از پایان BAN_PERIOD دوباره آزاد می‌گردد. همین و بس؛ نه تحلیل محتوای درخواست دارد، نه تشخیص الگوی حمله، نه محدودسازی نرخ درخواست در لایه هفت.

مقابله با حمله‌هایی مانند DDoS و Flood در عمل دو جبهه دارد: فیلتر شدن ترافیک در بالادست شبکه و سمت مرکز داده (پیش از آنکه بسته‌ها اصلاً به سرور شما برسند)، و ابزارهای نرم‌افزاری که روی خودِ سرور اجرا می‌شوند. DDoS Deflate تماماً در دسته دوم است. این تفاوت را همین ابتدا در ذهن داشته باشید، چون تعیین می‌کند از این اسکریپت چه انتظاری باید داشت و چه انتظاری نباید.

قبل از نصب، خودتان وضعیت را ببینید

پیش از هر کاری روی سرور مجازی لینوکسی یا سرور فیزیکی‌تان با SSH وارد شوید و همان کاری را که اسکریپت انجام می‌دهد دستی اجرا کنید تا بفهمید اصلاً با چه چیزی طرف هستید:

  • ss -Hntu | awk '{print $6}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -20
  • روی سیستم‌های قدیمی‌تر: netstat -ntu | awk 'NR>2 {print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -20
  • فشار روی کارت شبکه: vnstat -l -i eth0 یا iftop -i eth0
  • اگر vnstat روی سرور نصب نیست، مراحل نصب و خواندن گزارش‌هایش در نصب Vnstat در Directadmin و Cpanel آمده است.

دو نکته درباره همین دستورها: نام کارت شبکه روی همه سرورها eth0 نیست و ممکن است چیزی مانند ens3 یا enp1s0 باشد؛ فهرست کارت‌ها را با ip -br link ببینید و نام درست را جایگزین کنید. همچنین cut -d: -f1 برای آی‌پی‌های IPv4 درست کار می‌کند ولی آدرس‌های IPv6 را ناقص می‌برد؛ اگر ترافیک IPv6 دارید، به‌جایش از sed 's/:[^:]*$//' استفاده کنید تا فقط پورت انتهایی جدا شود.

خروجی همین دستورها را در ساعت‌های عادی سرویس هم یک بار بگیرید و نگه دارید؛ در ادامه برای انتخاب آستانه بلاک به آن نیاز دارید.

اگر چند آی‌پی محدود، اتصال‌های بازی خیلی بیشتر از آستانه دارند، DDoS Deflate می‌تواند کمک کند. اگر ترافیک از هزاران آی‌پی پراکنده می‌آید یا لینک شبکه اشباع شده، مشکل شما جای دیگری حل می‌شود.

نصب اسکریپت DDoS Deflate

نسخه اصلی این اسکریپت روی دامنه deflate.medialayer.com منتشر می‌شد و آن دامنه امروز دیگر اصلاً وجود ندارد. نسخه‌ای که هنوز نگهداری می‌شود، فورک jgmdev/ddos-deflate در گیت‌هاب است که پشتیبانی از IPv6، تشخیص خودکار فایروال و اجرا به‌صورت سرویس systemd را اضافه کرده است. نصب آن با کاربر root:

wget https://github.com/jgmdev/ddos-deflate/archive/master.zip -O ddos.zip
unzip ddos.zip
cd ddos-deflate-master
./install.sh

روی دبیان و اوبونتو بهتر است پیش‌نیازها را از قبل نصب کنید تا اسکریپت نصب گیر نکند: apt update && apt install dnsutils net-tools tcpdump dsniff grepcidr. روی AlmaLinux، Rocky Linux و دیگر توزیع‌های خانواده RHEL از dnf استفاده کنید و توجه داشته باشید که نام بسته‌ها یکی نیست؛ برای نمونه ابزار dig در بسته bind-utils است و بعضی بسته‌ها مانند grepcidr و dsniff از مخزن EPEL نصب می‌شوند. نصب‌کننده خودش تشخیص می‌دهد که سیستم شما systemd دارد یا init.d یا فقط cron، و بر همان اساس سرویس یا کران‌جاب را می‌سازد. روی همه توزیع‌های امروزی مسیر systemd انتخاب می‌شود و مدیریت سرویس با systemctl start ddos، systemctl status ddos و systemctl enable ddos انجام می‌گیرد؛ دستورهای قدیمی مانند service ddos restart یا /etc/init.d/ddos start فقط روی سیستم‌های قدیمی و بدون systemd معنا دارند.

روش قدیمی inetbase و اینکه چرا دیگر جواب نمی‌دهد

در آموزش‌های چند سال پیش، نصب «Anti DDoS» با این دو دستور انجام می‌شد:

wget http://www.inetbase.com/scripts/ddos/install.sh
sh install.sh

نشانی inetbase.com دیگر این فایل را سرو نمی‌کند و خروجی wget یا خطای ۴۰۴ است یا یک صفحه HTML بی‌ربط. این دو دستور را اجرا نکنید. مسئله فقط بی‌فایده بودنشان نیست: وقتی نشانی‌ای دیگر نگهداری نمی‌شود، هر کسی که بعداً آن دامنه را به دست بگیرد می‌تواند هر محتوایی را در همان مسیر بگذارد و sh install.sh آن محتوا را با دسترسی root روی سرور شما اجرا می‌کند. قاعده کلی این است: هیچ اسکریپتی را که مبدأش را کنترل نمی‌کنید با کاربر root اجرا نکنید. اگر امروز این دستورها را در آموزشی دیدید، به‌جایشان همان چهار دستور بالا را به کار ببرید. توجه کنید که در فورک فعلی، نصب‌کننده از داخل پوشه استخراج‌شده و با ./install.sh اجرا می‌شود، نه با دانلود یک فایل تکی.

اگر سرورتان سرور مجازی مدیریت‌شده است، پشتیبانی فنی و عیب‌یابی نرم‌افزارهای نصب‌شده بر عهده تیم آنلاین سرور است؛ پیش از اجرای این نصب با آن‌ها هماهنگ کنید تا با تنظیم‌های موجود سرور تداخل نکند.

پیکربندی و فایل‌های مهم

پس از نصب، این مسیرها را بشناسید:

  • /etc/ddos/ddos.conf — فایل پیکربندی اصلی
  • /etc/ddos/ignore.ip.list — لیست سفید آی‌پی‌ها؛ از بازه و نشانه‌گذاری CIDR هم پشتیبانی می‌کند
  • /etc/ddos/ignore.host.list — لیست سفید بر اساس نام میزبان
  • /var/log/ddos.log — گزارش رویدادها و بلاک‌ها
  • /usr/local/ddos/ddos.sh — خودِ اسکریپت، و /usr/local/sbin/ddos که دستور ddos را در دسترس می‌گذارد

مهم‌ترین متغیرها در فایل پیکربندی: NO_OF_CONNECTIONS (آستانه بلاک، پیش‌فرض ۱۵۰)، BAN_PERIOD (مدت بلاک بر حسب ثانیه، پیش‌فرض ۶۰۰)، FREQ (فاصله اجرای کران‌جاب بر حسب دقیقه، پیش‌فرض ۱)، DAEMON_FREQ (فاصله بررسی در حالت سرویس بر حسب ثانیه، پیش‌فرض ۵)، FIREWALL (پیش‌فرض auto؛ مقدارهای معتبر دیگر apf، csf، ipfw و iptables هستند)، ONLY_INCOMING و EMAIL_TO برای دریافت هشدار ایمیلی. توضیح کامل هر گزینه در man ddos آمده است.

مسیر فایل پیکربندی در نسخه قدیمی فرق می‌کرد

اگر آموزشی به شما گفت nano /usr/local/ddos/ddos.conf را باز کنید، آن آموزش برای نسخه اصلی و قدیمی اسکریپت نوشته شده است؛ آن نسخه فایل پیکربندی را هم داخل همان پوشه /usr/local/ddos/ می‌گذاشت. در فورک نگهداری‌شده امروزی پیکربندی به /etc/ddos/ منتقل شده و ویرایش فایل قدیمی هیچ اثری روی سرویس جدید ندارد.

اینجا اشتباه نکنید: پوشه /usr/local/ddos/ در نصب امروزی هم وجود دارد و وجودش کاملاً طبیعی است؛ خودِ اسکریپت (/usr/local/ddos/ddos.sh) و فایل اجرایی /usr/local/sbin/ddos همان‌جا نصب می‌شوند و فقط پیکربندی به /etc/ddos/ رفته است. پس وجود هم‌زمان این دو مسیر به معنای دو نصب موازی نیست و پاک کردن /usr/local/ddos/ نصب سالم شما را از کار می‌اندازد. نشانه واقعی نصب قدیمی این است که فایل /usr/local/ddos/ddos.conf وجود داشته باشد و پوشه /etc/ddos/ وجود نداشته باشد. برای بررسی، این دو را با هم ببینید: ls -l /usr/local/ddos/ddos.conf /etc/ddos/ddos.conf. فقط اگر نتیجه واقعاً نصب قدیمی بود، سراغ بخش «حذف اسکریپت» بروید.

آستانه NO_OF_CONNECTIONS را چطور انتخاب کنیم

عدد پیش‌فرض ۱۵۰ فقط یک نقطه شروع است. در آموزش‌های قدیمی گفته می‌شد «هرچه سرور قوی‌تر باشد این عدد را بالاتر بگذارید»، ولی معیار درست، قدرت سخت‌افزار نیست؛ معیار، ترافیک عادی و واقعی همان سرویس است. همان خروجی uniq -c را که در حالت عادی سرویس گرفتید نگاه کنید، ببینید بیشترین تعداد اتصال هم‌زمان یک کاربر سالم چقدر است و آستانه را با فاصله‌ای مطمئن بالاتر از آن بگذارید. عدد خیلی پایین، کاربران سالم پشت NAT و حتی نشست SSH خودتان را قطع می‌کند و عدد خیلی بالا باعث می‌شود اسکریپت عملاً هرگز فعال نشود. برای ویرایش فایل کافی است nano /etc/ddos/ddos.conf را اجرا کنید و در پایان با Ctrl+X و سپس Y و Enter ذخیره کنید.

هشدار مهم: قبل از فعال‌سازی، حتماً آی‌پی خودتان، آی‌پی دفتر، سرویس مانیتورینگ و CDN را در ignore.ip.list بگذارید. آستانه بیش از حد پایین باعث می‌شود اسکریپت آی‌پی‌های سالم — و حتی SSH خودتان — را بلاک کند. اگر امکانش هست، بار اول این کار را وقتی انجام دهید که به کنسول یا KVM سرور (از طریق پنل مرکز داده) دسترسی دارید تا اگر خودتان را بیرون انداختید راه برگشت داشته باشید. پس از تغییر پیکربندی در حالت سرویس، systemctl restart ddos را اجرا کنید؛ در حالت کران‌جاب نیازی به ری‌استارت نیست.

کار با اسکریپت از خط فرمان

  • ddos -h نمایش راهنما
  • ddos -v نمایش اتصال‌های فعال
  • ddos -b فهرست آی‌پی‌های بلاک‌شده فعلی
  • ddos -u 203.0.113.10 رفع بلاک یک آی‌پی
  • ddos -t وضعیت سرویس و شناسه پروسه

گزینه ddos -k بلافاصله همه آی‌پی‌های بالاتر از آستانه را بلاک می‌کند؛ این دستور مخرب است و اگر لیست سفید را کامل نکرده باشید ممکن است دسترسی خودتان را قطع کند. اول با ddos -v خروجی را ببینید، بعد اجرا کنید.

محدودیت‌هایی که باید صادقانه بدانید

DDoS Deflate در سه حالت کارساز نیست. اول، حمله حجمی: وقتی حجم ترافیک UDP یا SYN از ظرفیت لینک شبکه بیشتر شود، بسته‌ها پیش از رسیدن به فایروال روی همان لینک تلف می‌شوند؛ بلاک کردن آی‌پی روی خودِ سرور دیگر فایده‌ای ندارد و کار باید در بالادست، یعنی سمت مرکز داده یا سرویس پاک‌سازی ترافیک، انجام شود. دوم، حمله لایه هفت: درخواست‌های HTTP معتبر و کم‌تعداد که سرور را با پردازش سنگین زمین می‌زنند، هرگز به آستانه اتصال نمی‌رسند. سوم، آی‌پی‌های مشترک: کاربران پشت NAT یا پروکسی به‌راحتی قربانی بلاک اشتباه می‌شوند. اگر پشت Cloudflare هستید، تا وقتی ENABLE_CLOUDFLARE را فعال نکنید اسکریپت فقط آی‌پی‌های خود Cloudflare را می‌بیند و می‌شمارد.

به همین دلیل، تمام‌شدن مراحل نصب به معنای «سرور در برابر DDoS ایمن شد» نیست. آنچه به دست آورده‌اید یک شمارنده اتصال با قابلیت بلاک خودکار است؛ نه بیشتر.

برای سرویس‌های پرترافیک، ظرفیت واقعی و پهنای باند اختصاصی یک سرور فیزیکی — در کنار فیلتر شدن ترافیک در بالادست شبکه — تفاوت خیلی بیشتری می‌سازد تا یک اسکریپت شمارنده اتصال.

جایگزین‌های امروزی‌تر

اگر امروز از صفر شروع می‌کنید، معمولاً این‌ها انتخاب بهتری هستند:

  • CSF به همراه LFD: فایروال کاملی است که علاوه بر محدودیت تعداد اتصال هر آی‌پی (CT_LIMIT)، شناسایی حمله‌های ورود ناموفق، بلاک دائم و لیست‌های اشتراکی را هم دارد.
  • fail2ban: لاگ سرویس‌ها (SSH، وب‌سرور، ایمیل) را می‌خواند و بر اساس الگو بلاک می‌کند؛ برای حمله لایه هفت بسیار مناسب‌تر از شمارش اتصال است.
  • محدودسازی نرخ در وب‌سرور: دستورهایی مانند limit_req و limit_conn در Nginx، یا ماژول‌های مشابه در آپاچی و LiteSpeed.
  • ماژول‌های هسته: nftables یا iptables به همراه connlimit و hashlimit، برای اعمال محدودیت مستقیم در هسته و بدون اسکریپت واسط.

در عمل ترکیب یک فایروال درست، محدودسازی نرخ در وب‌سرور و فیلترینگ بالادستی مرکز داده جواب می‌دهد، نه یک ابزار به‌تنهایی. اگر تنظیم و آزمودن این لایه‌ها را به کسی می‌سپارید، خدمات مدیریت سرور دقیقاً برای همین کار است.

حذف اسکریپت

برای حذف نسخه امروزی، به همان پوشه‌ای که از آرشیو استخراج کرده‌اید بروید و اسکریپت حذف را اجرا کنید: cd ddos-deflate-master و سپس ./uninstall.sh. همین اسکریپت خودش سرویس، کران‌جاب، فایل اجرایی /usr/local/sbin/ddos، پوشه /usr/local/ddos/ و صفحه راهنما را برمی‌دارد؛ پس لازم نیست این مسیرها را دستی پاک کنید. اگر پوشه پیکربندی /etc/ddos/ پس از حذف باقی ماند و دیگر به آن نیازی ندارید، اول از ignore.ip.list پشتیبان بگیرید و بعد پاکش کنید.

اگر روی سرور نصب قدیمی دارید — یعنی /usr/local/ddos/ddos.conf وجود دارد و /etc/ddos/ وجود ندارد — آدرس uninstall.ddos روی دامنه inetbase.com هم دیگر در دسترس نیست و باید دستی پاک‌سازی کنید. اول از لیست سفید سفارشی پشتیبان بگیرید تا بعداً بتوانید محتوایش را به /etc/ddos/ignore.ip.list منتقل کنید: cp /usr/local/ddos/ignore.ip.list /root/ignore.ip.list.bak. سپس کران‌جاب آن را در /etc/cron.d/ (فایلی با نام ddos.cron) حذف کنید و بعد پوشه /usr/local/ddos/ و فایل /usr/local/sbin/ddos را بردارید. این پاک‌سازی دستی را فقط زمانی انجام دهید که با دستور بخش قبل مطمئن شده‌اید نصب فعلی واقعاً قدیمی است؛ روی نصب امروزی دقیقاً همین کارها سرویس را از کار می‌اندازند.

پس از حذف، فایروال را یک بار بررسی کنید تا قانون بلاکی از اسکریپت باقی نمانده باشد: iptables -L -n --line-numbers. روی توزیع‌های جدیدتر که پایه فایروالشان nftables است، خروجی کامل را با nft list ruleset ببینید.

جمع‌بندی

نصب DDoS Deflate ساده است و برای مهار سریع چند آی‌پی پرتکرار ارزش دارد، به‌شرطی که لیست سفید را کامل کنید و آستانه را متناسب با ترافیک واقعی سرویس‌تان بگذارید. اما آن را دفاع کامل در برابر DDoS نبینید؛ این اسکریپت یک لایه کوچک از یک معماری چندلایه است و مهم‌ترین لایه، همیشه فیلترینگ بالادست شبکه است.

آموزش‌های مرتبط