امنیت

محافظت از سرور در برابر حمله بروت فورس با محدودیت نرخ و قفل موقت

راهنمای عملی برای مقابله با حمله بروت فورس: محدودیت نرخ با fail2ban، قفل موقت حساب، پایش لاگ ورود و اشتباهات رایج در پیاده‌سازی.

امنیت

حمله بروت فورس چیست و چرا باید جدی گرفته شود؟

حمله بروت فورس (Brute Force Attack) یکی از قدیمی‌ترین و در عین حال مؤثرترین روش‌های نفوذ به سرور است. در این نوع حمله، مهاجم با استفاده از ابزارهای خودکار، ترکیبات مختلفی از نام کاربری و رمز عبور را امتحان می‌کند تا به حساب کاربری معتبر دسترسی پیدا کند. اگر سرور شما از SSH، کنترل پنل، یا هر سرویس احراز هویتی استفاده می‌کند، به طور قطع در معرض این حملات قرار دارد.

آمارها نشان می‌دهد که یک سرور متصل به اینترنت، به طور متوسط روزانه صدها یا حتی هزاران تلاش ناموفق برای ورود را تجربه می‌کند. بسیاری از این تلاش‌ها از بات‌نت‌ها و آدرس‌های IP پراکنده انجام می‌شوند. نکته مهم این است که حمله بروت فورس فقط به رمزهای ضعیف محدود نمی‌شود؛ حتی رمزهای قوی هم اگر در معرض حملات طولانی‌مدت قرار گیرند، ممکن است شکسته شوند. به همین دلیل، مقابله با این تهدید نیازمند یک استراتژی چندلایه است که در این مقاله به صورت عملی آن را بررسی می‌کنیم.

استراتژی سه‌لایه برای مقابله با حمله بروت فورس

برای محافظت مؤثر در برابر حمله بروت فورس، باید سه لایه دفاعی را همزمان پیاده‌سازی کنید: محدودیت نرخ (Rate Limiting)، قفل موقت حساب (Account Lockout)، و پایش مستمر لاگ‌ها. هر یک از این لایه‌ها به تنهایی کافی نیستند، اما ترکیب آن‌ها یک دفاع قوی ایجاد می‌کند.

لایه اول: محدودیت نرخ با fail2ban

fail2ban یک ابزار متن‌باز و قدرتمند است که به طور خودکار لاگ‌های سیستم را پایش می‌کند و در صورت مشاهده الگوهای مشکوک، آدرس IP مهاجم را به طور موقت مسدود می‌کند. این ابزار اولین خط دفاعی شما در برابر حمله بروت فورس است.

نصب fail2ban در توزیع‌های مبتنی بر Debian/Ubuntu به سادگی انجام می‌شود:

sudo apt update
sudo apt install fail2ban -y

پس از نصب، باید یک فایل پیکربندی محلی ایجاد کنید تا تنظیمات پیش‌فرض را بازنویسی کنید:

sudo nano /etc/fail2ban/jail.local

در این فایل، پیکربندی زیر را اضافه کنید:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600

این تنظیمات به fail2ban می‌گوید که اگر در بازه ۱۰ دقیقه‌ای (findtime)، ۵ تلاش ناموفق (maxretry) برای ورود به SSH مشاهده شود، آدرس IP مربوطه را به مدت ۱ ساعت (bantime) مسدود کند. پس از ذخیره فایل، سرویس را مجدداً راه‌اندازی کنید:

sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

برای مشاهده وضعیت مسدودسازی‌ها، از دستور زیر استفاده کنید:

sudo fail2ban-client status sshd

این دستور لیست آدرس‌های IP مسدود شده و تعداد تلاش‌های ناموفق را نمایش می‌دهد.

لایه دوم: قفل موقت حساب در سطح سیستم

محدودیت نرخ در سطح IP مفید است، اما مهاجمان می‌توانند از چندین آدرس IP مختلف استفاده کنند. به همین دلیل، باید قفل موقت حساب را نیز فعال کنید. این کار باعث می‌شود که پس از چند تلاش ناموفق، حتی اگر آدرس IP عوض شود، حساب کاربری برای مدت مشخصی قفل شود.

برای فعال‌سازی قفل موقت در SSH، باید فایل /etc/ssh/sshd_config را ویرایش کنید:

sudo nano /etc/ssh/sshd_config

خطوط زیر را اضافه یا ویرایش کنید:

MaxAuthTries 3
LoginGraceTime 30

تنظیم MaxAuthTries 3 به SSH می‌گوید که پس از ۳ تلاش ناموفق، اتصال را قطع کند. LoginGraceTime 30 نیز مهلت ورود را به ۳۰ ثانیه محدود می‌کند. پس از اعمال تغییرات، سرویس SSH را مجدداً راه‌اندازی کنید:

sudo systemctl restart sshd

برای سرویس‌های وب مانند Apache یا Nginx که از احراز هویت استفاده می‌کنند، می‌توانید از ماژول‌های محدودیت نرخ استفاده کنید. به عنوان مثال، در Nginx می‌توانید محدودیت نرخ را به صورت زیر تنظیم کنید:

limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

server {
    location /login {
        limit_req zone=login burst=10 nodelay;
        proxy_pass http://backend;
    }
}

این تنظیمات به Nginx می‌گوید که در هر دقیقه فقط ۵ درخواست به مسیر /login از هر آدرس IP مجاز است.

لایه سوم: پایش مستمر لاگ ورود

حتی با وجود محدودیت نرخ و قفل موقت، باید لاگ‌های ورود را به طور منظم پایش کنید. این کار به شما کمک می‌کند الگوهای غیرعادی را زودتر شناسایی کنید و در صورت نیاز، اقدامات تکمیلی انجام دهید.

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

sudo journalctl -u ssh --since "24 hours ago" | grep "Failed password"

این دستور تمام تلاش‌های ناموفق ورود در ۲۴ ساعت گذشته را نمایش می‌دهد. برای مشاهده آمار کلی، می‌توانید از دستور زیر استفاده کنید:

sudo grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -20

این دستور، ۲۰ آدرس IP که بیشترین تلاش ناموفق را داشته‌اند، به همراه تعداد تلاش‌ها نمایش می‌دهد. اگر آدرس IP خاصی به طور مداوم در این لیست ظاهر می‌شود، می‌توانید آن را به صورت دستی مسدود کنید:

sudo ufw deny from 203.0.113.5

برای پایش خودکار، می‌توانید یک cron job تنظیم کنید که روزانه خلاصه‌ای از تلاش‌های ناموفق را به ایمیل شما ارسال کند:

0 8 * * * grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -20 | mail -s "SSH Brute Force Report" your@email.com

اشتباهات رایج در مقابله با حمله بروت فورس

در طول سال‌ها، اشتباهات مشابهی را در پیکربندی امنیتی سرورها دیده‌ام که منجر به شکست دفاعی شده است. در اینجا مهم‌ترین آن‌ها را بررسی می‌کنیم:

  • فعال نکردن fail2ban برای همه سرویس‌ها: بسیاری از افراد فقط SSH را محافظت می‌کنند، اما سرویس‌هایی مانند FTP، ایمیل، و کنترل پنل را بدون محافظت رها می‌کنند. fail2ban را برای همه سرویس‌های احراز هویتی فعال کنید.
  • تنظیم bantime بسیار کوتاه: اگر bantime را ۶۰ ثانیه تنظیم کنید، مهاجم می‌تواند پس از هر بار مسدود شدن، دوباره تلاش کند. bantime را حداقل ۳۶۰۰ ثانیه (۱ ساعت) تنظیم کنید.
  • نادیده گرفتن حملات توزیع‌شده: مهاجمان حرفه‌ای از هزاران آدرس IP مختلف استفاده می‌کنند. در این حالت، محدودیت نرخ در سطح IP کافی نیست و باید به سراغ راهکارهای پیشرفته‌تر مانند محدودیت نرخ در سطح حساب کاربری بروید.
  • عدم پایش منظم لاگ‌ها: حتی اگر fail2ban فعال باشد، باید لاگ‌ها را به طور منظم بررسی کنید. ممکن است الگوهای حمله جدیدی ظاهر شوند که fail2ban آن‌ها را شناسایی نمی‌کند.

نکات تکمیلی برای امنیت بیشتر

علاوه بر سه لایه اصلی، چند اقدام تکمیلی می‌تواند امنیت شما را به طور قابل توجهی افزایش دهد:

احراز هویت دو مرحله‌ای (2FA)

فعال‌سازی 2FA برای SSH و کنترل پنل، حتی اگر رمز عبور لو برود، از نفوذ جلوگیری می‌کند. برای SSH می‌توانید از Google Authenticator یا ابزارهای مشابه استفاده کنید.

تغییر پورت پیش‌فرض SSH

تغییر پورت SSH از ۲۲ به یک پورت غیراستاندارد، تعداد حملات خودکار را به شدت کاهش می‌دهد. این کار امنیت مطلق ایجاد نمی‌کند، اما بسیاری از اسکنرهای خودکار را دور می‌زند.

استفاده از کلید SSH به جای رمز عبور

کلیدهای SSH به مراتب امن‌تر از رمز عبور هستند و در برابر حمله بروت فورس مقاوم‌اند. پس از تنظیم کلید، می‌توانید ورود با رمز عبور را به طور کامل غیرفعال کنید:

PasswordAuthentication no

این تنظیم را در /etc/ssh/sshd_config اعمال کنید و سپس سرویس SSH را مجدداً راه‌اندازی کنید.

جمع‌بندی و گام‌های عملی

حمله بروت فورس یک تهدید دائمی است، اما با پیاده‌سازی صحیح لایه‌های دفاعی، می‌توانید ریسک آن را به حداقل برسانید. خلاصه اقداماتی که باید انجام دهید:

  1. نصب و پیکربندی fail2ban برای همه سرویس‌های احراز هویتی
  2. فعال‌سازی قفل موقت حساب با تنظیم MaxAuthTries و LoginGraceTime
  3. تنظیم محدودیت نرخ در وب‌سرور برای مسیرهای ورود
  4. پایش منظم لاگ‌ها و مسدودسازی دستی آدرس‌های IP مشکوک
  5. فعال‌سازی 2FA و استفاده از کلید SSH به جای رمز عبور

اگر این مراحل را به درستی انجام دهید، سرور شما در برابر اکثر حملات بروت فورس مقاوم خواهد بود. به یاد داشته باشید که امنیت یک فرآیند مداوم است، نه یک اقدام یک‌باره. لاگ‌ها را به طور منظم بررسی کنید و تنظیمات امنیتی را با ظهور تهدیدات جدید به‌روزرسانی کنید. در این مسیر، استفاده از سرویس‌های میزبانی که زیرساخت امنیتی مناسبی دارند نیز می‌تواند به شما کمک کند تا تمرکز خود را بر روی امنیت برنامه‌ها و سرویس‌های خود بگذارید.

پشتیبانی سرورنت

تیم فنی و تحریریه‌ی سرورنت — تخصص در زیرساخت، شبکه و میزبانی وب.

خدمات امنیت
اشتراک‌گذاری:

دیدگاه‌ها ۰

هنوز دیدگاهی ثبت نشده؛ اولین نفر باشید!

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

سرویس مرتبط

خدمات امنیت

تست نفوذ توسط متخصصان دارای مدرک OSCP، امن‌سازی زیرساخت و مانیتورینگ امنیتی ۲۴ ساعته — گزارش‌هایی که مدیر می‌فهمد و مهندس اجرا می‌کند.