امنیت سرور: نصب Fail2Ban و هاردنینگ SSH در برابر حملات Brute-Force
لاگهای auth.log هر سرور لینوکسی متصل به اینترنت، پر از تلاشهای ورود ناموفق از IPهای ناشناس است؛ این حملات Brute-Force خودکار، بهصورت مداوم در تلاش برای حدس زدن رمز عبور SSH هستند. در این راهنما هم سرویس Fail2Ban را برای مسدودسازی خودکار این حملات نصب میکنیم و هم چند گام کلیدی برای هاردنینگ واقعی SSH را مرور میکنیم.
Fail2Ban چیست و چطور کار میکند؟
Fail2Ban فایلهای لاگ سرویسهایی مثل SSH را زیر نظر میگیرد و وقتی تعداد تلاشهای ناموفق ورود از یک IP از حد مشخصی بگذرد، آن IP را بهطور موقت (یا دائم) از طریق فایروال مسدود میکند. این ابزار در واقع یک لایهٔ اضافه روی فایروال سیستم اضافه میکند، نه جایگزین آن.
نصب Fail2Ban روی Ubuntu/Debian
sudo apt update
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo systemctl status fail2banپیکربندی Jail برای SSH
تنظیمات پیشفرض Fail2Ban را هرگز مستقیم در فایل jail.conf ویرایش نکنید؛ همیشه یک فایل override با نام jail.local بسازید تا در آپدیتهای بعدی از بین نروند:
sudo nano /etc/fail2ban/jail.local[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 10m
bantime = 1h
bantime.increment = trueدر این تنظیمات: اگر یک IP در بازهٔ ۱۰ دقیقه (findtime) بیش از ۵ بار (maxretry) تلاش ناموفق داشته باشد، به مدت ۱ ساعت (bantime) مسدود میشود. با فعال بودن bantime.increment، هر بار که همان IP دوباره تخلف کند، مدت مسدودیت بهصورت تصاعدی افزایش مییابد.
sudo systemctl restart fail2banدستورات مدیریتی پرکاربرد
| دستور | کاربرد |
|---|---|
fail2ban-client status | نمایش لیست Jailهای فعال |
fail2ban-client status sshd | نمایش IPهای مسدودشدهٔ فعلی در Jail مربوط به SSH |
fail2ban-client set sshd unbanip 1.2.3.4 | رفع مسدودیت یک IP مشخص |
fail2ban-client set sshd banip 1.2.3.4 | مسدود کردن دستی یک IP |
هاردنینگ SSH؛ فراتر از Fail2Ban
Fail2Ban فقط یک لایهٔ دفاعی است. برای امنیت واقعی SSH، این تنظیمات در /etc/ssh/sshd_config اهمیت بیشتری دارند:
PermitRootLogin no
PasswordAuthentication no
Port 2222
AllowUsers deployuserپیش از غیرفعال کردن PasswordAuthentication، حتماً مطمئن شوید که ورود با کلید SSH را طبق آموزش ساخت SSH Key در لینوکس راهاندازی و تست کردهاید، وگرنه ممکن است خودتان هم از سرور قفل شوید. برای مرور کاملتر مفاهیم SSH نیز میتوانید به راهنمای جامع SSH مراجعه کنید.
ترکیب Fail2Ban با فایروال
Fail2Ban بهتنهایی کافی نیست؛ داشتن یک فایروال فعال (مثل UFW) بهعنوان خط دفاعی اول ضروری است. اگر سرور اوبونتویی دارید که هنوز مراحل امنسازی پایه روی آن انجام نشده، ابتدا مراحل راهاندازی اولیهٔ سرور Ubuntu 20.04 را کامل کنید.
اگر میخواهید تعداد تلاشهای مسدودشده توسط Fail2Ban را هم در طول زمان رصد کنید و روی یک داشبورد ببینید، میتوانید این داده را کنار زیرساخت مانیتورینگی که در مقالهٔ مانیتورینگ سرور لینوکس با Prometheus و Node Exporter توضیح دادهایم اضافه کنید.
جمعبندی
Fail2Ban یک ابزار ساده اما بسیار مؤثر برای کاهش حجم حملات Brute-Force روی SSH است، اما جایگزین رعایت اصول پایه (غیرفعال کردن ورود با رمز عبور، غیرفعال کردن root، و داشتن فایروال فعال) نمیشود. ترکیب این چند لایه با هم، سطح امنیتی قابلقبولی برای اکثر سرورهای تولید فراهم میکند.
