ثبت سفارش آنلاین به‌زودی فعال می‌شود. تا آن موقع برای سفارش با ما تماس بگیرید.Online ordering is coming soon. Until then, please contact us to order.تماس با ماContact us
JolfaCLOUD

مرکز آموزش / شبکه و میکروتیک

دفاع در برابر حملات DDoS: از SYN Flood تا بات‌نت‌های لایه ۷ و CDN

حملات لایه ۴ و ۷ چگونه سرور را از کار می‌اندازند، تنظیمات sysctl برای دفع SYN Flood، محدودسازی نرخ در Nginx، فایروال iptables و نقش حیاتی سپر CDN.

۱۲ دقیقه مطالعه · به‌روزرسانی آبان ۱۴۰۵

This guide is available in Persian for now. Switch to FA to read it.

حملهٔ DDoS (منع سرویس توزیع‌شده) تلاش برای خواباندن سرویس شما از طریق سرازیر کردن ترافیک انبوه از هزاران نقطه است. این حمله‌ها در سال‌های اخیر به خاطر گسترش بات‌نت‌های اینترنت اشیاء (IoT) و سرورهای آسیب‌پذیر، چند ده برابر بزرگ‌تر و ارزان‌تر شده‌اند. در این مقاله یاد می‌گیرید ترافیک مخرب چطور کار می‌کند، کجای ماجرا با تنظیمات لینوکس حل می‌شود و کجا به سپر CDN نیاز دارید.

تفاوت حیاتی: حملهٔ لایه ۴ در برابر لایه ۷

پیش از هر اقدامی باید بفهمید زیر ضربهٔ کدام نوع حمله هستید:

معیارحملهٔ لایه ۴ (شبکه و انتقال)حملهٔ لایه ۷ (اپلیکیشن و وب)
پروتکلTCP, UDP, ICMP (مثل SYN Flood و DNS Amplification)HTTP, HTTPS (مثل HTTP GET/POST Flood)
هدفاشباع پهنای باند پورت سرور یا پر کردن جدول اتصالات هستهدرگیر کردن پردازنده، رم و دیتابیس (PHP/MySQL)
ظاهر ترافیکبسته‌های ناقص با حجم گیگابیتی بالادرخواست‌های کاملاً قانونی شبیه به کاربر واقعی
محل مهارروتر لبه، فایروال هسته (Kernel) یا شبکهٔ پاک‌سازی بالادستوب‌سرور (Nginx/OpenLiteSpeed) یا CDN هوشمند

مقابله با SYN Flood در هستهٔ لینوکس

در حملهٔ SYN Flood، مهاجم هزاران بستهٔ SYN می‌فرستد ولی پاسخ ACK آخر را ارسال نمی‌کند. سرور منتظر می‌ماند و صف اتصالات نیمه‌باز (SYN Backlog) پر می‌شود؛ در نتیجه هیچ کاربر واقعی نمی‌تواند متصل شود. راه‌حل فعال کردن SYN Cookies است.

فایل /etc/sysctl.conf یا یک فایل در /etc/sysctl.d/99-security.conf را باز کنید و این مقادیر را تنظیم کنید:

ini
# فعال‌سازی سین‌کوکی (بدون مصرف حافظه برای اتصالات نیمه‌باز)
net.ipv4.tcp_syncookies = 1

# افزایش طول صف اتصالات در انتظار
net.ipv4.tcp_max_syn_backlog = 4096
net.core.somaxconn = 4096

# کاهش دفعات تلاش مجدد برای بسته‌های بی‌پاسخ (آزادسازی سریع سوکت)
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

# کاهش زمان نگهداری اتصالات در حالت FIN_WAIT_2
net.ipv4.tcp_fin_timeout = 15

# جلوگیری از حملات Smurf و جعل آدرس (Spoofing)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1

برای اعمال فوری بدون نیاز به ری‌استارت سرور:

bash
sudo sysctl -p /etc/sysctl.d/99-security.conf

مهار طوفان‌های لایه ۷ با Rate Limiting در Nginx

وقتی مهاجمان با هزاران درخواست همزمان صفحاتی مثل جست‌وجو یا لاگین وردپرس را هدف می‌گیرند، سرور با کمبود رم و داغ شدن CPU مواجه می‌شود. در Nginx برای هر IP سقف درخواست مشخص کنید:

nginx
# داخل بلوک http در فایل /etc/nginx/nginx.conf
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

server {
    listen 443 ssl http2;
    server_name example.ir;

    # حفاظت از آدرس‌های سنگین مثل ورود و جست‌وجو
    location ~* (wp-login\.php|xmlrpc\.php|/api/) {
        limit_req zone=req_limit burst=5 nodelay;
        limit_conn conn_limit 5;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    # محدودیت عمومی برای کل سایت
    location / {
        limit_req zone=req_limit burst=20 delay=10;
        try_files $uri $uri/ /index.php?$args;
    }
}

فایروال iptables: فیلتر حملات تکراری

می‌توانید ترافیک مشکوک را قبل از رسیدن به وب‌سرور، در لایهٔ فایروال متوقف کنید:

bash
# بلاک بسته‌های نامعتبر و دست‌کاری‌شده
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

# بستهٔ SYN-ACK که هیچ اتصالی پشتش نیست (نشانهٔ اسکن یا بازتاب حمله)
sudo iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m conntrack --ctstate NEW -j DROP

# محدودسازی اتصالات همزمان به پورت 80 و 443 به ازای هر IP
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m connlimit --connlimit-above 50 -j REJECT

# محدودسازی تعداد درخواست‌های SYN ورودی به پورت وب (Hashlimit)
sudo iptables -A INPUT -p tcp --dport 443 --syn -m hashlimit \
    --hashlimit-above 20/sec --hashlimit-burst 40 --hashlimit-mode srcip \
    --hashlimit-name syn_limit -j DROP

کِی سرور به‌تنهایی کافی نیست و به CDN نیاز دارید؟

یک حقیقت تلخ مهندسی شبکه وجود دارد: اگر حجم حمله از پهنای باند کارت شبکه سرور (مثلاً ۱ یا ۱۰ گیگابیت بر ثانیه) بزرگ‌تر باشد، سرور خاموش خواهد شد؛ چون کابل شبکه از سمت بالادستی دیتاسنتر اشباع شده و هیچ پکت مفیدی اصلاً به سیستم‌عامل نمی‌رسد تا فایروال آن را رد کند.

  • پنهان کردن IP مبدا: اگر دامنه را پشت شبکهٔ CDN ببرید، مهاجمان فقط به آی‌پی سرورهای ابری لبه حمله می‌کنند و آی‌پی سرور اصلی شما مخفی می‌ماند. به شرطی که IP جای دیگری لو نرود: رکورد MX یا زیردامنه‌ای مثل mail. که مستقیم به سرور اشاره کند، یا IP قدیمی که هنوز در تاریخچهٔ DNS ثبت است.
  • جذب ترافیک گیگابیتی در Anycast: CDNهای بزرگ صدها سرور لبه دارند و حملات ۲۰۰ تا ۵۰۰ گیگابیتی را روی ده‌ها نقطه در دنیا تقسیم و پوچ می‌کنند.
  • کش کردن استاتیک: با کش شدن تصاویر، HTML و استایل‌ها، حتی در زمان حمله ۹۰٪ درخواست‌ها اصلاً به سرور میزبان نمی‌رسند.
سایتتان را پشت CDN ببرید تا IP سرور پنهان بماند و کش لبه بار را کم کنددیدن پلن‌های CDN

منابع

  1. RFC 4987: تحلیل و دفاع در برابر حملات TCP SYN Flood www.rfc-editor.org/rfc/rfc4987
  2. مستندات رسمی Nginx: راهنمای کامل Rate Limiting www.nginx.com/blog/rate-limiting-nginx
  3. Cloudflare Learning Center: انواع حملات DDoS و روش‌های مقابله www.cloudflare.com/learning/ddos/what-is-a-ddos-attack
  4. پروژه Linux Documentation: راهنمای فایروال iptables netfilter.org/documentation