Перейти к содержанию

fail2ban — защита от брутфорса

Автоматически составлено агентом 06.08.2026 из 00_INDEX.md, vaultwarden.md, nginx-vps-configs.md. Требует ревью: точные настройки jails, filter.d, действия при бане.

Где установлен

Сервер Статус
VPS 46.17.99.183 ✅ активен
ragserver 192.168.1.200 ⚠ уточнить (по 00_INDEX не активен)

Активные jails на VPS

Из nginx-vps-configs.md и vaultwarden.md:

Jail Что защищает Лог Filter
sshd SSH-брутфорс (порт 22) /var/log/auth.log стандартный
nginx-noscript Боты, сканящие .php/.asp/.env /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-noscript.conf (кастомный)
nginx-limit-req Превышение rate-limit nginx /var/log/nginx/error.log стандартный nginx-limit-req
vaultwarden Неудачные попытки логина в Vaultwarden лог Vaultwarden (docker) кастомный (см. vaultwarden.md)
vaultwarden-admin Брутфорс /admin панели лог Vaultwarden кастомный

Ключевые файлы

  • /etc/fail2ban/jail.local — все переопределения дефолтов + кастомные jails
  • /etc/fail2ban/filter.d/nginx-noscript.conf — кастомный regex для сканеров
  • /etc/fail2ban/filter.d/vaultwarden.conf — фильтр для лога Vaultwarden
  • /var/log/fail2ban.log — все действия fail2ban (баны, разбаны)

Команды на каждый день

# Общий статус
sudo fail2ban-client status

# Статус конкретного jail (список забаненых IP)
sudo fail2ban-client status sshd
sudo fail2ban-client status nginx-noscript
sudo fail2ban-client status vaultwarden

# Разбанить свой IP если случайно поймало
sudo fail2ban-client set sshd unbanip 1.2.3.4
sudo fail2ban-client set nginx-noscript unbanip 1.2.3.4

# Забанить IP вручную (например, увидел плохой активити в логах)
sudo fail2ban-client set sshd banip 5.6.7.8

# Смотреть лог fail2ban live
sudo tail -f /var/log/fail2ban.log

# Проверить синтаксис конфига после правки
sudo fail2ban-client -t

# Применить изменения
sudo systemctl reload fail2ban

Дефолты (типичные)

Если нет переопределений в jail.local — работают дефолты:

  • bantime: 10 минут (600 сек)
  • findtime: 10 минут (окно наблюдения)
  • maxretry: 5 попыток
  • banaction: iptables-multiport (блокирует через iptables)

Как посмотреть заблокированные IP через iptables

fail2ban при бане создаёт chain'ы в iptables:

sudo iptables -L -n | grep -E "^Chain f2b"
sudo iptables -L f2b-sshd -n --line-numbers
sudo iptables -L f2b-nginx-noscript -n --line-numbers

Разбан своего IP если случайно попал

Ситуация: ошибся паролем 5 раз при SSH → забанило.

Решение 1: через мобильный интернет (другой IP) зайти → разбанить:

sudo fail2ban-client set sshd unbanip 1.2.3.4

Решение 2: через VPN AmneziaWG зайти с VPS IP:

# Из своего WireGuard клиента подключаешься к VPS
# IP теперь VPN-овый, а не домашний → SSH открыт

Решение 3: консоль VPS через Hostkey web-панель → выполнить unban.

Мониторинг

Задача 28 в TODO — настроить мониторинг: - Uptime Kuma в docker на ragserver - Или healthchecks.io для внешнего пинга

Для fail2ban отдельно можно: - Cron ежедневно шлёт sudo fail2ban-client status --json в дайджест - Alert если jail упал (fail2ban не запущен)

Тестирование

Проверить что jail реально работает:

# С другой машины (не текущий IP!) сделай 6 плохих SSH попыток
for i in $(seq 1 6); do
  ssh -o PasswordAuthentication=yes root@46.17.99.183 exit 2>/dev/null
done

# С VPS смотрим jail
sudo fail2ban-client status sshd
# Должен показать твой IP в Banned IP list

Проверить nginx-noscript:

# Симулируем сканер
curl -sI https://alatyr-service.ru/wp-login.php > /dev/null
curl -sI https://alatyr-service.ru/.env > /dev/null
# Через минуту:
sudo fail2ban-client status nginx-noscript

Восстановление после сбоя

Если fail2ban упал / крашится:

sudo systemctl status fail2ban
sudo journalctl -u fail2ban -n 100
sudo fail2ban-client -t  # проверка синтаксиса всех jail.local и filter.d

# Если конфиг сломан — откатить последнее изменение
sudo systemctl start fail2ban

Известные проблемы

  • ragserver не защищён — SSH со стороны LAN не критично, но при пробросе портов через роутер желательно поставить
  • Vaultwarden filter — может требовать обновления при новых версиях (формат логов меняется)
  • Нет алерта при большом количестве банов подряд (может быть атака)

Связанные файлы