OffshoreVps
امنیت13 اکتبر 20268 دقیقه مطالعهنوشته‌ی تیم OffshoreVps

محافظت در برابر DDoS لایه‌ی ۷ برای VPS با Nginx

محافظت DDoS در سطح میزبان جلوی سیل ترافیک خام را می‌گیرد، نه درخواست‌های هوشمندانه را. با Nginx و fail2ban محدودیت نرخ، کش و قواعد ضد ربات اضافه کنید تا از حمله‌های لایه‌ی برنامه جان سالم به در ببرید.

بیشتر طرح‌های هاستینگ حفاظت DDoS را وعده می‌دهند. این معمولاً یعنی فیلتر کردن سیل‌های بزرگ بسته‌های بی‌مصرف (لایه‌های 3 و 4) پیش از رسیدن به سرور شما. این کار جلوی هزار مرورگر «واقعی» را که هم‌زمان کندترین صفحه شما را بارگیری می‌کنند نمی‌گیرد. این حملات لایه کاربرد (لایه 7) شبیه بازدیدکنندگان عادی‌اند و باید خودتان با آن‌ها مقابله کنید. برای پیش‌زمینه، حفاظت DDoS چیست را ببینید.

پنجره‌ی ترمینال روی یک VPS که دستورهای دفاع DDoS لایه‌ی ۷ با Nginx را نشان می‌دهد
نوع دستورهایی که در این راهنما روی سرور خود اجرا می‌کنید.

تفاوت را بدانید

  • سیل‌های حجمی: لوله شبکه را پر می‌کنند. میزبان یا بالادست آن‌ها را فیلتر می‌کند.
  • حملات پروتکلی: جداول اتصال را تمام می‌کنند. بیشتر توسط شبکه مدیریت می‌شوند.
  • حملات لایه 7: درخواست‌های HTTP ظاهراً معتبر که CPU، پایگاه داده یا workerها را مصرف می‌کنند. این‌ها به برنامه شما می‌رسند.

مرحله 1: محدودیت نرخ در Nginx

سرعت درخواست‌های یک آدرس را محدود کنید. یک zone در بلوک http تعریف کنید و روی سایت خود اعمال کنید.

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

server {
    location / {
        limit_req zone=perip burst=20 nodelay;
        limit_conn connip 20;
    }
    location = /login {
        limit_req zone=perip burst=3 nodelay;
    }
}

برای ورود و جستجو محدودیت بسیار سخت‌تری بگذارید، چون این‌ها پرهزینه‌اند.

مرحله 2: هرچه می‌شود کش کنید

سرو کردن صفحه کش‌شده تقریباً هزینه‌ای ندارد. کش FastCGI یا پراکسی را برای ترافیک ناشناس فعال کنید، حتی برای 30 تا 60 ثانیه. سیلی از درخواست‌های یکسان را به چند درخواست واقعی تبدیل می‌کند.

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=site:50m inactive=10m;
fastcgi_cache site;
fastcgi_cache_valid 200 60s;
fastcgi_cache_use_stale updating error timeout;
گام‌های این راهنما به ترتیب: ۱. تفاوت را بشناسید؛ ۲. محدودسازی نرخ در Nginx؛ ۳. هرچه می‌توانید کش کنید؛ ۴. با fail2ban خاطیان تکراری را مسدود کنید؛ ۵. وقتی جدی شد پراکسی جلویش بگذارید؛ ۶. پیش از وقوع آماده باشید
گام‌های این راهنما به ترتیب.

مرحله 3: timeoutهای معقول تنظیم کنید

حملات اتصال کند workerها را باز نگه می‌دارند. محدودیت‌ها را کوتاه کنید.

client_body_timeout 10s;
client_header_timeout 10s;
send_timeout 15s;
keepalive_timeout 15s;
client_max_body_size 5m;

مرحله 4: متخلفان تکراری را با fail2ban مسدود کنید

آدرس‌هایی را که به محدودکننده نرخ برخورد می‌کنند مسدود کنید. Nginx درخواست‌های ردشده را در لاگ خطا ثبت می‌کند و یک فیلتر می‌تواند آن‌ها را تطبیق دهد.

[nginx-limit-req]
enabled  = true
filter   = nginx-limit-req
logpath  = /var/log/nginx/error.log
maxretry = 10
findtime = 60
bantime  = 1h

مرحله 5: وقتی جدی شد، یک پراکسی جلوی سرور بگذارید

یک reverse proxy یا CDN با چالش ربات می‌تواند حملاتی را جذب کند که یک VPS به‌تنهایی نمی‌تواند. فراموش نکنید از مبدأ محافظت کنید، همان‌طور که در مخفی نگه داشتن IP مبدأ آمده، وگرنه مهاجمان دور آن می‌زنند.

پیش از وقوع آماده باشید

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

اصول راهنمای UFW و fail2ban همراه این راهنما هستند.