3- Brute Force
همونطور که میدونید حملات ورود به زور (dictionary - brute force) روش هایی هستن که مهاجم با تست کردن stringها بصورت تصادفی، به مقدار مساوی با مقدار پسورد دسترسی پیدا میکنه...
با مشاهده خطاهای زیر در بررسی لاگها مثلا در var/log/apache2/ مشخص میشه که سرور با حمله ورود به زور مواجه بوده:
کد:
client sent HTTP/1.1 request without hostname (see RFC 2616 section 14.23): /...... Invalid URL in request p-Alive: 300 request failed: error reading the headers
ابزار fail2ban با اسکن لاگ فایلهای var/log/pwdfail/ یا var/log/apache/error_log/ میتونه
IP آدرسهایی که در این لاگها با تست پسوردها، موفق به لاگین نشدن رو ban کنه.
fail2ban برای اکثر توزیع های لینوکس مناسبه و تنظیمات اون بطور پیش فرض برای مقابله با
حملات SSH brute force هست و میشه بعضی از پارامترهای مهم رو در فایل پیکربندی
etc/fail2ban.conf/ برحسب شرایط ونیاز تغییر داد:
ignoreip
بطور پیش فرض ip آدرسی در این لیست وجود نداره و میشه لیستی از ipها رو قرار داد که توسط fail2ban نادیده گرفته بشه و ban نشن.
ignoreip = 192.168.10.25
maxfailures
تعداد دفعاتی که هر ip میتونه پسورد رو برای لاگین شدن تست کنه وبطور پیش فرض 5 بار هست و بهتره که به 3 بار کاهش پیدا کنه.
maxfailures= 3
bantime
مدت زمانی که ip بن میشه بطور پیش فرض 600 ثانیه هستش وبا تنظیم این پارامتر بصورت 1- باعث میشه ipها برای همیشه بن بشن.
bantime= -1
تمام کارهای fail2ban در این مسیرvar/log/fail2ban.log/ لاگ میشه و با مشاهده این لاگها، ipهایی که پورت ssh برای اونا بلوک شده قابل مشاهده هست:
کد:
2010-01-02 04:28:39,261 INFO: SSH: 192.168.10.32 has 3 login failure(s). Banned. 2010-01-02 04:28:39,287 WARNING: SSH: Ban (permanent) 192.168.10.32
در fail2ban میشه sectionهای دیگه که بطور پیش فرض غیرفعال هستند رو مثلا:
VSFTPD, PROFTPD, Apache, SALS, ApacheAttacks فعال کرد، برای اینکار درتعاریف
iptables میشه در (fail2ban-(name_of_section، نام section دلخواه رو وارد کنیم، مثال:
fail2ban-PROFTPD یا fail2ban-SSH و...
کد:
fwchain = INPUT fwstart = iptables -N fail2ban-(name_of_section) iptables -A fail2ban-(name_of_section) -j RETURN iptables -I (fwchain)s -p %(protocol)s --dport (port)s -j fail2ban-(name_of_section) fwend = iptables -D (fwchain)s -p (protocol)s --dport (port)s -j fail2ban-(name_of_section) iptables -F fail2ban-(name_of_section) iptables -X fail2ban-(name_of_section) fwcheck = iptables -L (fwchain)s | grep -q fail2ban-(name_of_section) fwban = iptables -I fail2ban-(name_of_section) 1 -s -j DROP fwunban = iptables -D fail2ban-(name_of_section) -s -j DROP
با این کار، fwstart برای هر section که فعال کرده باشیم یک iptables chain متفاوت میسازه مثلا
برای fail2ban-SSH، زنجیره زیر رو میسازه و یعنی تمام ترافیک SSH بدون تغییر به این زنجیره
منتقل میشه.
کد:
iptables -L -n Chain INPUT (policy ACCEPT) fail2ban-SSH tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 Chain fail2ban-SSH (1 references) RETURN all -- 0.0.0.0/0 0.0.0.0/0
حالا میشه با استفاده از rule جدیدی که برای ip مهاجم در این زنجیره تعریف میکنیم، ترافیک SSH
رو کنترل کنیم. با مشاهده لاگها var/log/fail2ban.log/ ومشخص شدن ipهای مهاجم،
هاست های مهاجم رو میشه بلوک کرد. مثلا:
(تمام ترافیک SSH از این هاست 192.168.10.32 دور ریخته میشه)
کد:
iptables -L -n Chain INPUT (policy ACCEPT) fail2ban-SSH tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 Chain fail2ban-SSH (1 references) DROP all -- 192.168.10.32 0.0.0.0/0





پاسخ با نقل قول