SYN Flood ( سيلاب SYN ) يكي از روشهاي حمله هاي تكذيب سرويس Denial of Service ( به اختصار حمله DoS ) مي باشد . اما چرا اين حمله تكذيب سرويس ناميده مي شود :
در شبكه هاي كامپيوتري سرورها دائما با كلاينتها در ارتباط هستند . منابع سرور محدود بوده و اگر درخواستها زياد شود درخواستهاي جديدتر در صف قرار مي گيرند تا نوبت پاسخگويي به آنها برسد . اگر اين صف نيز پر شود سرور درخواستهاي رسيده را ناديده مي گيرد ( قادر به پاسخگويي به آنها نيست ) و اين اتفاقي است كه در حمله هاي DoS اتفاق مي افتد . از آنجا كه اين حمله سرويس دهي سرور را متوقف مي كند به آن حمله تكذيب سرويس مي گويند .
حال به بحث اصلي مي پردازيم و ببينيم نوع حمله SYN Flood چگونه كار مي كند . براي اينكه با اين حمله آشنا شويم ابتدا بايد نگاهي گذرا به پروتكل TCP/IP مي اندازيم .
در اين پروتكل زماني كه سرور كد SYN را از كلاينت دريافت مي كند متوجه مي شود كه كلاينت قصد برقراري ارتباط را دارد . اگر اين درخواست قبول شود سرور با يك SYN/ACK پاسخ مي دهد و اين كد براي كلاينت به مفهوم قبول ارتباط از طرف سرور بوده است و ارتباط برقرار مي گردد :
حال مهاجم با استفاده از اين كد سيلي از درخواستهاي 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 کمک خواهد کرد . مقدار پیش فرض 60 است و ما می توانیم آن را به 40 یا 45. کاهش دهیم.این کاهش را می توان با اضافه کردن خط زیر را به sysctl.conf انجام می دهیم:
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv=45
همچنین پارامتر زیر را بصورت ذکر شده تنظیم کنید:
net.ipv4.conf.all.rp_filter = 1