پرش به محتوا

Fail2ban در Debian با لاگ journald

از Debian 12 به بعد، لاگ SSH در فایل auth.log نوشته نمی‌شود و Fail2ban باید مستقیم journald را بخواند؛ پیکربندی درست و بررسی کارکرد.

Debian 13سطح: مقدماتیبرای: Debian 13، Debian 12به‌روزرسانی: ۱۶ آبان ۱۴۰۵

اشتباه رایج در Debian جدید: Fail2ban نصب می‌شود، ولی چون فایل /var/log/auth.log وجود ندارد، سرویس خطا می‌دهد یا هیچ IPیی را مسدود نمی‌کند. راه درست، استفاده از backend = systemd است.

۱. نصب

bash
sudo apt update
sudo apt install -y fail2ban python3-systemd

۲. پیکربندی

bash
sudo nano /etc/fail2ban/jail.d/local.conf
ini
[DEFAULT]
backend   = systemd
banaction = nftables-multiport
banaction_allports = nftables-allports
bantime   = 1h
findtime  = 10m
maxretry  = 5
ignoreip  = 127.0.0.1/8 ::1 192.168.10.0/24

[sshd]
enabled = true
port    = ssh

[recidive]
enabled  = true
backend  = auto
logpath  = /var/log/fail2ban.log
bantime  = 1w
findtime = 1d

recidive کسانی را که بارها مسدود شده‌اند، برای یک هفته روی همه‌ی پورت‌ها می‌بندد. این jail لاگ خود Fail2ban را می‌خواند، پس backend آن فایل است.

۳. اجرا و بررسی

bash
sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

در خروجی، Journal matches باید _SYSTEMD_UNIT=ssh.service باشد؛ یعنی لاگ درست خوانده می‌شود.

۴. مشاهده‌ی IPهای مسدود در nftables

bash
sudo nft list ruleset | grep -A5 f2b

۵. آزاد کردن

bash
sudo fail2ban-client set sshd unbanip 203.0.113.25