Fail2ban анализирует логи и блокирует IP-адреса, совершающие brute-force атаки. Это обязательный инструмент для безопасности любого Linux-сервера.
Полная очистка и подготовка (Глубокое удаление)
Прежде чем ставить новую версию, нужно убрать все «хвосты» и снять возможные блокировки системы.
# 1. Снимаем блокировки apt (если установка зависла ранее)
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/apt/lists/lock
# 2. Останавливаем службу
sudo systemctl stop fail2ban
sudo systemctl disable fail2ban
# 3. Удаляем старый пакет и его зависимости
sudo apt-get purge fail2ban -y
sudo apt-get autoremove -y
# 4. КРИТИЧЕСКИЙ ШАГ: Удаляем старые системные юниты (защита от ошибки 203/EXEC)
sudo rm -f /lib/systemd/system/fail2ban.service
sudo rm -f /etc/systemd/system/fail2ban.service
# 5. Вычищаем все папки и конфиги
sudo rm -rf /etc/fail2ban
sudo rm -rf /var/lib/fail2ban
sudo rm -f /var/log/fail2ban.log*
# 6. Сбрасываем кэш служб
sudo systemctl daemon-reload
Установка последней версии из GitHub
Установка из исходников даёт самую свежую версию, которой нет в стандартных репозиториях.
sudo apt-get update
sudo apt-get install python3 python3-pip python3-systemd git -y
cd /tmp
git clone https://github.com/fail2ban/fail2ban.git
cd fail2ban
sudo python3 setup.py install
Настройка системной службы (Systemd)
Проверяем путь к файлу:
which fail2ban-server
(Запомните результат, обычно это /usr/local/bin/fail2ban-server).
Создаём файл службы:
sudo nano /etc/systemd/system/fail2ban.service
Вставляем содержимое:
[Unit]
Description=Fail2Ban Service
After=network.target
Documentation=man:fail2ban(1)
[Service]
Type=simple
ExecStart=/usr/local/bin/fail2ban-server -xf start
ExecReload=/usr/local/bin/fail2ban-client reload
KillMode=process
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
Запуск и активация
sudo systemctl daemon-reload
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo systemctl status fail2ban
Проверить, что ваши IP действительно внесены в список исключений (белый список):
sudo fail2ban-client get sshd ignoreip
Конфигурация защиты (jail.local)
Никогда не меняйте jail.conf, все настройки делаем в jail.local.
sudo nano /etc/fail2ban/jail.local
Вставьте настройки:
[DEFAULT]
# Добавьте свой IP и IP сервера через пробел, чтобы не забанить себя
ignoreip = 127.0.0.1/8 ::1 ВАШ_IP_КЛИЕНТА ВАШ_IP_СЕРВЕРА
bantime = 1h
findtime = 10m
maxretry = 5
allowipv6 = true
backend = systemd
[sshd]
enabled = true
maxretry = 3
# Пожизненный бан
bantime = -1
Перезапуск для применения:
sudo systemctl restart fail2ban
Управление банами
Просмотр статистики:
sudo fail2ban-client status sshd
Забанить вручную:
sudo fail2ban-client set sshd banip <IP>
Разбанить:
sudo fail2ban-client set sshd unbanip <IP>
Общее число банов в логе:
grep "Ban" /var/log/fail2ban.log | wc -l
Логи в реальном времени:
tail -f /var/log/fail2ban.log | grep Ban
Ротация логов
Создаём конфиг:
sudo nano /etc/logrotate.d/fail2ban
Вставляем настройки:
/var/log/fail2ban.log {
size 10M
missingok
notifempty
copytruncate
create 640 root adm
}
Проверка (запустить ротацию принудительно):
sudo logrotate -f /etc/logrotate.d/fail2ban