Перейти на сайт
База знаний/Безопасность/Настройка fail2ban. Защита VPS от брутфорса и взлома

Настройка 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-адресов в день. Без него ваш сервер это открытая мишень для ботов.