راهکارهای مقابله اولیه با DDOS در iptables

در این مقاله به آموزش راهکارهای جلوگیری از حملات DDOS با استقاده از iptables می پردازیم.

البته ذکر این نکته در ابتدای کار لازم است که این آموزش فقط راهکارهای ساده را آموزش میدهد و شما برای جلوگیری از ddos های گسترده و سازمان دهی شده به سازمانتان نیاز به سخت افزارهای IPS/IDS  و قایروال و نیروی فنی حرفه ای شبکه دارید که بتواند با تحلیل ترافیک های ورودی به مقابله با آن بپردازد.

در ابتدا برای اینکه هدف این آموزش بیشتر مشخص شود بطرح سوال هایی می پردازیم و با جواب به این سوال ها به ادامه آموزش میرویم.

همانطور که میدانید در حملات ddos محاجمان با استفاده از ترافیک زیادی که شمت سرویس شما گسیل میکنند باعث میشوند که سرویسی که شما ارائه میکنید بدلیل این حجم بالای ترافیک عملا غیرقابل استفاده و از دسترس خارج شود.

به عنوان اولین سوال بدلیل ماهیت حملات ddos به فکر هر شخصی این میرسد که چگونه تعداد کانکشن های هر IP در اینترنت را به ماشنی که بر روی آن سرویسمان را ارائه میکنیم محدود کنیم ؟

برای این منظور iptables بصورت درونی خاصیت جالبی دارد که شما میتوانید با استفاده از آن به به iptables بگویید که هر IP که در دقیقه بخواد ۱۰ کانکشن همزمان با سرویس ما داشته باشد را برای یک مدت خواص block کنید. برای این منظور میتوانیم از iptables بصورت زیر استفاده کنیم.

iptables -I INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –set

iptables -I INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –update –seconds 60 –hitcount 10 -j DROP

توضیح اینکه در خط اول به همه کانکشن هایی که از روی اینترفیس eth0 به پورت ۸۰ وارد میشوند یک state به نام NEW میدهیم و در خط دوم اگر این کانکشن ها بطور همزمان بیشتر از ۱۰ تا با یک IP یکسان شدند به مدت ۶۰ ثانیه block میشوند و دسترسی آنها به سرویس قطع خواهد شد.

نکته: اعداد کانکشن همزمان و مقدار block شدن هر IP کاملا به ماهیت و نوع سرویس شما بستگی دارد.

به عنوان سوال دوم از خود می پرسیم که چگونه تعداد کانکشن های حال حاضر ماشین خودمان را ببینیم و تشخیص دهیم؟

برای این منظور Linux یکک دستور خیلی خوب به نام netstat دارد که میتواند وضعیت تمام کانکشن ها را به لحظه به شما نمایش دهد. برای اینکه تعداد کانکشن های همزمان و همچنین تعداد کانکشن هر IP به سسیستم را ببینیم دستور زیر را اجرا میکنیم .

netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n

بعد از اجرای دستور بالا با خروجی مانند زیر مواجه میشود  که به شما IP های متصل به ماشین و همچنین تعداد اتصال های آن IP را نمایش میدهد.

۱   ۱۲۷٫۰٫۰٫۱
۱    Address
۱    servers)
۱۳۲    ۲۰۱٫۱۱۹٫۱۶۷٫۱۹۳

به عنوان سوال بعدی این مطرح میشود حالا که مانکشن های هر IP را دیدیم چگونه باید موارد غیر طبیعی را دسترسی آنها را بگیریم؟

برای اینکه کانکشن های فعال موجود بر روی ماشین را kill کنیم باید از ابزارهای خاص این کار استفاده کنیم . یکی از این ابزارهای tcpkill میباشد که همراه بسته dsniff نصب میشود .

ابتدا برای این منوظر با استفاده از دستور زیر dsniff را نصب میکنیم .

apt-get install dsniff

بعد از نصب dsniff با استفاده از tcpkill شروع میکنیم به kill کردن کانکشن های اضافه . برای این منظور بصورت زیر عمل می کنیم .

tcpkill host xxx.xxx.xxx.xxx

در این مقاله من سعی کردم که موارد بسیار ابتدایی را که در جلوگیری از ddos میتواند بسیار حیاتی باشد را معرفی کنم . در ادامه نیز rule های اولیه را برای تنظیمات هر چه بهتر به شما معرفی میکنم .

برای ریجکت کردن پکت های spoof از rule های زیر میتوانیم استفاده کنیم

iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 127.0.0.0/8 -j DROP
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP

برای جلوگیری کردن از حملات smurf از rule های زیر میتوانید استفاده کنید

iptables -A INPUT -p icmp -m icmp –icmp-type address-mask-request -j DROP
iptables -A INPUT -p icmp -m icmp –icmp-type timestamp-request -j DROP
iptables -A INPUT -p icmp -m icmp -j DROP

برای drop کردن همه پکت های invalid از rule های زیر استفاده کنید.

iptables -A INPUT -m state –state INVALID -j DROP
iptables -A FORWARD -m state –state INVALID -j DROP
iptables -A OUTPUT -m state –state INVALID -j DROP

برای بلوک کردن portscan هایی که روی IP ما میشود میتوانیم از rule های زیر استفاده کنید.

iptables -A INPUT -m recent –name portscan –rcheck –seconds 86400 -j DROP
iptables -A FORWARD -m recent –name portscan –rcheck –seconds 86400 -j DROP

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *