آشنایی با حملات SYN FLOOD و راه مقابله

نوشته شده توسط: محمد

SYN Flood ( سیلاب SYN ) یکی از روشهای حمله های تکذیب سرویس Denial of Service ( به اختصار حمله DoS ) می باشد . اما چرا این حمله تکذیب سرویس نامیده می شود :
در شبکه های کامپیوتری سرورها دائما با کلاینتها در ارتباط هستند . منابع سرور محدود بوده و اگر درخواستها زیاد شود درخواستهای جدیدتر در صف قرار می گیرند تا نوبت پاسخگویی به آنها برسد . اگر این صف نیز پر شود سرور درخواستهای رسیده را نادیده می گیرد ( قادر به پاسخگویی به آنها نیست ) و این اتفاقی است که در حمله های DoS اتفاق می افتد . از آنجا که این حمله سرویس دهی سرور را متوقف می کند به آن حمله تکذیب سرویس می گویند .
حال به بحث اصلی می پردازیم و ببینیم نوع حمله SYN Flood چگونه کار می کند . برای اینکه با این حمله آشنا شویم ابتدا باید نگاهی گذرا به پروتکل TCP/IP می اندازیم .
در این پروتکل زمانی که سرور کد SYN را از کلاینت دریافت می کند متوجه می شود که کلاینت قصد برقراری ارتباط را دارد . اگر این درخواست قبول شود سرور با یک SYN/ACK پاسخ می دهد و این کد برای کلاینت به مفهوم قبول ارتباط از طرف سرور بوده است و ارتباط برقرار می گردد :
https://mihanhosting.ir/wp-content/uploads/2014/12/tcp-300x199.jpg
حال مهاجم با استفاده از این کد سیلی از درخواستهای SYN را به سمت سرور سرازیر می کند . در نتیجه سرور قادر به پاسخگویی نبوده و دچار کاهش سرویس دهی می شود . حتی ممکن است این حمله منجر به توقف کامل سرویس دهی سرور شود .
تشخیص:
در این مواقع در مشاهده لاگ سرور خطای زیر مشاهده می شود:

possible SYN flooding on port 80

راههای مقابله:
فایل csf.conf را از مسیر زیر ویرایش میکنیم:

nano /etc/csf/csf.conf

و مقدار SYNFLOOD = 1  قراردهید، سرویس فایروال را ریستارت کنید.
همچنین با دستور زیر می توانید ای پی هایی که در این حمله شرکت داشتند شناسایی شود:
 
netstat -tuna | grep :80 | grep SYN_RECV
 
با دستور زیر:
csf –d IPADDRESS
ای پی های خاطی را مسدود میکنیم.
همچنین در فایل /etc/sysctl.conf
مقادیر زیر را اعمال میکنیم:
net.ipv4.tcp_syncookies = 1
افزایش صف حملات
net.ipv4.tcp_max_syn_backlog = 2048
کاهش صف حملات:
net.ipv4.tcp_synack_retries = 3
تنظیم فاصله SYN_RECV

کاهش مقدار فاصله برای SYN_RECV برای کاهش حمله  SYN کمک خواهد کرد . مقدار پیش فرض ۶۰ است و ما می توانیم آن را به ۴۰ یا  ۴۵.  کاهش دهیم.این کاهش را می توان با اضافه کردن خط زیر را به sysctl.conf انجام می دهیم:

net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv=45
همچنین پارامتر زیر را بصورت ذکر شده تنظیم کنید:
net.ipv4.conf.all.rp_filter = 1
 
 
 
 

مطالب مرتبط

نظر شما