سرور شما هدف مداوم اسکن و تلاش برای هک هست. 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 هست. با راه‌اندازی چند دقیقه‌ای، سطح امنیت رو بالا میبرید.