Настройка fail2ban. Защита VPS от брутфорса и взлома
Зачем нужен fail2ban
Любой VPS с открытым SSH-портом подвергается атакам перебора паролей (brute force) в первые минуты после запуска. Боты непрерывно сканируют IP-адреса и пробуют тысячи комбинаций логин/пароль.
fail2ban анализирует логи сервера и автоматически блокирует IP-адреса, с которых идут подозрительные запросы. Для любого сервера это must-have.
Установка fail2ban
apt update
apt install fail2ban -y
Запуск и автозагрузка
systemctl enable fail2ban
systemctl start fail2ban
Настройка. Защита SSH
Не редактируйте jail.conf напрямую, он перезапишется при обновлении. Создайте локальный файл:
nano /etc/fail2ban/jail.local
Базовая конфигурация
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = iptables-multiport
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
Что значат параметры
| Параметр | Значение | Описание |
|---|---|---|
bantime |
86400 |
Блокировка на 24 часа |
findtime |
600 |
Окно наблюдения, 10 минут |
maxretry |
3 |
3 неудачные попытки = бан |
logpath |
/var/log/auth.log |
Файл логов для анализа |
Применение настроек
systemctl restart fail2ban
Агрессивная конфигурация
Для серверов, которые часто атакуют:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 2
bantime = 604800
findtime = 3600
Это заблокирует IP на 7 дней после 2 неудачных попыток в течение часа.
Белый список IP. Чтобы не заблокировать себя
[DEFAULT]
ignoreip = 127.0.0.1/8 ваш_домашний_ip
Обязательно добавьте свой IP в
ignoreip, иначе рискуете заблокировать сами себя после нескольких опечаток в пароле.
Полезные команды
# Статус fail2ban
fail2ban-client status
# Статус конкретного jail
fail2ban-client status sshd
# Заблокированные IP
fail2ban-client status sshd | grep "Banned IP"
# Разблокировать IP вручную
fail2ban-client set sshd unbanip 123.456.789.0
# Проверить конфигурацию на ошибки
fail2ban-client -t
Защита других сервисов
Nginx (защита от сканеров)
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 3600
Защита от агрессивных ботов
[nginx-botsearch]
enabled = true
port = http,https
filter = nginx-botsearch
logpath = /var/log/nginx/access.log
maxretry = 2
bantime = 86400
Мониторинг атак
Посмотреть, сколько атак было заблокировано:
# Все заблокированные за сегодня
fail2ban-client status sshd
# Логи fail2ban
tail -f /var/log/fail2ban.log
# Количество заблокированных IP за всё время
zgrep 'Ban' /var/log/fail2ban.log* | wc -l
На типичном VPS fail2ban блокирует десятки IP-адресов в день. Без него ваш сервер это открытая мишень для ботов.