چگونه از VPS در برابر حملات DDoS محافظت کنیم

نویسنده تیم مهندسی ONIE · به‌روزرسانی: 21 آبان 1405 · زمان مطالعه: 4 دقیقه

حمله منع سرویس توزیع‌شده (DDoS) سرور یا اتصال شبکه‌ی آن را با حجم زیادی از ترافیک پر می‌کند تا کاربران واقعی نتوانند به آن دسترسی پیدا کنند. برخی از این حملات آن‌قدر بزرگ‌اند که خود سرور توان مقابله با آن‌ها را ندارد، بنابراین حفاظت در لایه‌ها بهترین نتیجه را دارد: ابتدا فیلتر کردن در لبه‌ی شبکه، سپس تنظیمات فایروال و برنامه روی VPS. ONIE از سرورهای ابری در شهر هوشی مین با DDoS Shield در لبه‌ی شبکه و بدون هزینه‌ی اضافه محافظت می‌کند، و می‌توانید در چند دقیقه یک VPS با محافظت DDoS راه‌اندازی کنید.

انواع حملات

  • حجمی (لایه ۳ و ۴): سیل بسته‌هایی که خط ارتباطی شبکه را پر می‌کنند، برای مثال سیل UDP.
  • حملات پروتکلی: سوءاستفاده از مدیریت اتصال، مانند سیل SYN که جدول اتصالات را پر می‌کند.
  • لایه‌ی برنامه (لایه ۷): درخواست‌های زیاد HTTP که ظاهری معتبر دارند و وب‌سرور یا پایگاه داده را از پا درمی‌آورند.

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

۱. فیلتر کردن در لبه‌ی شبکه

فیلتر کردن لبه‌ای، ترافیک مخرب را پیش از رسیدن به VPS حذف می‌کند تا خط ارتباطی اشباع نشود. با DDoS Shield، فیلتر کردن با استفاده از XDP/eBPF در لبه‌ی شبکه انجام می‌شود و کنسول، ترافیک و رویدادهای حمله را برای هر IP نمایش می‌دهد. از هر ارائه‌دهنده‌ای که بررسی می‌کنید بپرسید چه چیزی در سرویس گنجانده شده، فیلتر کردن کجا انجام می‌شود و آیا هزینه‌ی جداگانه دارد.

۲. آنچه استفاده نمی‌کنید را ببندید

sudo ufw default deny incoming
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

پایگاه‌های داده و پنل‌های مدیریتی را در معرض اینترنت قرار ندهید. آن‌ها را به 127.0.0.1 یا یک شبکه‌ی خصوصی متصل کنید.

۳. تنظیم کرنل برای سیل SYN

SYN cookies در بیشتر توزیع‌های لینوکس به‌طور پیش‌فرض فعال است. برای بررسی:

sysctl net.ipv4.tcp_syncookies

سایر تغییرات کرنل را کوچک نگه دارید و آن‌ها را آزمایش کنید، زیرا مقادیر نادرست می‌توانند به ترافیک عادی آسیب بزنند.

۴. محدود کردن نرخ درخواست‌ها در Nginx

در بلوک http:

limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=connperip:10m;

در بلوک server یا location:

limit_req zone=perip burst=20 nodelay;
limit_conn connperip 20;

برای بارگذاری مجدد از دستور sudo nginx -t && sudo systemctl reload nginx استفاده کنید. فایل‌های ایستا را از کش ارائه دهید و در وردپرس از یک افزونه‌ی کش استفاده کنید تا هزینه‌ی هر درخواست کاهش یابد. برای جزئیات بیشتر به نصب وردپرس با Nginx مراجعه کنید.

۵. پایش ترافیک

ss -s
sudo ss -ntu state established | wc -l
sudo apt install -y nload && nload

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

۶. چک‌لیست واکنش به حادثه

  1. در کنسول بررسی کنید که ترافیک حمله است یا افزایش واقعی بازدید.
  2. رویدادهای حمله و IP هدف را بررسی کنید.
  3. آدرس‌ها یا محدوده‌های مبدأ مخرب را که می‌توانید شناسایی کنید مسدود کنید.
  4. محدودیت‌های نرخ سخت‌گیرانه‌تر یا یک صفحه‌ی تعمیر و نگهداری را فعال کنید.
  5. با زمان و IP، با پشتیبانی ارائه‌دهنده‌ی خود تماس بگیرید.
  6. پس از آن، لاگ‌ها را بررسی کنید و این برنامه را به‌روز کنید. پشتیبان‌ها و اسنپ‌شات‌ها را همیشه به‌روز نگه دارید.

پرسش‌های متداول

آیا فایروال روی VPS می‌تواند یک حمله‌ی DDoS بزرگ را متوقف کند؟

به‌تنهایی خیر. اگر ترافیک خط ارتباطی را پر کند، سرور نمی‌تواند آن را فیلتر کند. به فیلتر کردن پیش از رسیدن ترافیک به سرور نیاز دارید.

آیا CDN کمک می‌کند؟

برای وب‌سایت‌ها، یک CDN یا پروکسی معکوس می‌تواند ترافیک وب را جذب کند، به شرطی که IP واقعی سرور شما در DNS یا هدرهای ایمیل فاش نشود.

آیا برای محافظت DDoS به یک پلن ویژه نیاز دارم؟

این موضوع به ارائه‌دهنده بستگی دارد. بررسی کنید که چه چیزی در پلن و موقعیت مکانی شما گنجانده شده است.

منابع و مطالعه بیشتر

راهنماهای بیشتر VPS