سرور شما هدف مداوم اسکن و تلاش برای هک هست. Fail2ban یه ابزار قدرتمنده که IP های مشکوک رو خودکار مسدود میکنه. تو این مقاله راهاندازی و پیکربندی کامل رو یاد میگیرید.
Fail2ban چیه؟
یه Intrusion Prevention System (IPS) برای Linux که با پایش لاگها، IP هایی که رفتار مشکوک دارن رو در Firewall مسدود میکنه.
چطور کار میکنه؟
۱. لاگها رو میخونه
۲. الگوی مشکوک پیدا میکنه (مثلاً ۵ تلاش ورود ناموفق)
۳. IP رو در iptables مسدود میکنه
۴. بعد از مدت زمان مشخص، IP رو آزاد میکنه
نصب
Ubuntu/Debian:
apt install fail2ban
CentOS/RHEL:
dnf install epel-release
dnf install fail2ban
پیکربندی
هرگز /etc/fail2ban/jail.conf رو تغییر ندید. یه کپی بسازید:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
تنظیمات پایه
/etc/fail2ban/jail.local:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
backend = systemd
ignoreip = 127.0.0.1 192.168.1.0/24
پارامترها
bantime: مدت مسدود شدن (ثانیه). 3600 = ۱ ساعت.
findtime: پنجره زمانی برای شمارش تلاش.
maxretry: حداکثر تلاش قبل مسدود کردن.
ignoreip: IP هایی که نباید مسدود بشن.
Jail های محبوب
SSH
[sshd]
enabled = true
port = 22,2222
maxretry = 3
bantime = 3600
Apache
[apache-auth]
enabled = true
port = http,https
logpath = /var/log/apache2/error.log
Nginx
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
WordPress
Filter سفارشی برای wp-login.php.
Postfix
[postfix]
enabled = true
port = smtp,ssmtp
logpath = /var/log/mail.log
Dovecot
[dovecot]
enabled = true
port = pop3,pop3s,imap,imaps
MySQL
[mysqld-auth]
enabled = true
port = 3306
logpath = /var/log/mysql/error.log
راهاندازی سرویس
systemctl enable fail2ban
systemctl start fail2ban
وضعیت
fail2ban-client status
fail2ban-client status sshd
IP آزاد کردن دستی
اگه IP اشتباه مسدود شد:
fail2ban-client set sshd unbanip 1.2.3.4
مسدود کردن دستی
fail2ban-client set sshd banip 1.2.3.4
لیست IPهای مسدود
fail2ban-client status sshd
Filter سفارشی
در /etc/fail2ban/filter.d/ فایل .conf بسازید:
[Definition]
failregex = Failed login for user .* from <HOST>
Action سفارشی
Actionها تعیین میکنن با IP مسدود شده چیکار بشه:
- iptables (پیشفرض)
- ufw
- firewalld
- ایمیل هشدار
- API call
Email Alert
action = %(action_mwl)s
destemail = admin@yourdomain.com
Whitelist
IP های اعتماد رو در ignoreip اضافه کنید. IP اداره خودتون رو حتماً اضافه کنید تا سهواً بلاک نشید.
Aggressive Mode
bantime = -1 (دائم)
یا bantime.increment = true (هر بار bantime دو برابر میشه).
WordPress Fail2ban
پلاگین WP Fail2Ban نصب کنید. Filter WordPress رو در Fail2ban ثبت میکنه.
Cloudflare Integration
Action سفارشی که IP رو در Cloudflare هم مسدود میکنه.
Log Analysis
/var/log/fail2ban.log رو مدام چک کنید. الگوهای حمله رو ببینید.
Monitoring
مانیتور با Prometheus:
fail2ban_prometheus_exporter
Best Practices
Test: بعد راهاندازی، تست کنید که خودتون بلاک نشید.
Backup Config: قبل تغییرات، بکآپ بگیرید.
Log Rotation: لاگهای Fail2ban بزرگ میشن.
Update: مدام آپدیت کنید.
مشکلات رایج
Fail2ban کار نمیکنه
Journalctl -u fail2ban ببینید.
Logpath درسته؟
خودم مسدود شدم
از Console دسترسی داشته باشید. یا IP خودت رو در ignoreip بذارید.
False Positive
maxretry رو بالاتر بذارید یا Filter رو تنظیم کنید.
ابزارهای مکمل
ufw: Firewall
fail2ban-cloudflare: مسدود در Cloudflare
CrowdSec: نسل بعدی Fail2ban با اشتراک تهدیدات
سباهاست پیشنهاد
سرورهای سباهاست با Fail2ban از قبل نصب و کانفیگ شده. یه لایه امنیت اضافی.
جمعبندی
Fail2ban یه ابزار ضروری برای هر سرور Linux هست. با راهاندازی چند دقیقهای، سطح امنیت رو بالا میبرید.