Перейти к основному содержимому
Вернуться в категорию

Настройка Fail2Ban: Защита SSH от брутфорс-атак

Защитите сервер от SSH брутфорс-атак с помощью Fail2Ban. Установка, настройка jail.local, джейлы для Nginx/Apache, белый список IP, мониторинг блокировок и email-уведомления.

Время чтения: 13 мин Безопасность
fail2banбрутфорсбезопасность sshбезопасностьlinuxiptablesnginxapache

Содержание

Настройка Fail2Ban: Защита SSH от брутфорс-атак

SSH брутфорс-атаки — одна из наиболее распространённых угроз для каждого сервера, доступного из интернета. Fail2Ban — мощный инструмент, который отслеживает неудачные попытки входа и автоматически блокирует IP-адреса злоумышленников. Это руководство проведёт вас через настройку Fail2Ban с комплексной защитой для SSH, Nginx и Apache.

Что такое Fail2Ban?

Fail2Ban — инструмент безопасности, который отслеживает лог-файлы и блокирует IP-адреса, делающие слишком много неудачных попыток входа в заданном временном окне, используя правила iptables/nftables. Написан на Python и включает готовые фильтры для многих сервисов.

Установка

hljs bash
# Ubuntu/Debian
sudo apt update
sudo apt install fail2ban -y

# CentOS/AlmaLinux/Rocky Linux
sudo dnf install epel-release -y
sudo dnf install fail2ban -y

# Запустить службу Fail2Ban
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

# Проверить статус
sudo systemctl status fail2ban

Настройка jail.local

Основной файл конфигурации Fail2Ban — jail.conf. Однако не редактируйте его напрямую — он может быть перезаписан при обновлениях. Вместо этого создайте файл jail.local:

hljs bash
# Скопировать jail.conf
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# Редактировать конфигурацию
sudo nano /etc/fail2ban/jail.local
hljs ini
# /etc/fail2ban/jail.local

[DEFAULT]
# Длительность блокировки (секунды) — 1 час
bantime = 3600

# Окно обнаружения (секунды) — 10 минут
findtime = 600

# Максимальное количество неудачных попыток
maxretry = 5

# Бэкенд (auto, pyinotify, gamin, polling, systemd)
backend = auto

# Уровень логирования
loglevel = INFO

# Цель логирования
logtarget = /var/log/fail2ban.log

# Email-уведомление
destemail = admin@example.com
sender = fail2ban@example.com
mta = sendmail

# Действие — блокировать и отправить email
action = %(action_mwl)s

# Белый список — эти IP никогда не блокируются
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

Настройка SSH-джейла

hljs ini
# В /etc/fail2ban/jail.local

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400  # 24 часа
findtime = 600

Для SSH рекомендуются maxretry = 3 и bantime = 86400 (24 часа). Это позволяет злоумышленникам делать только 3 попытки в день.

Настройка Nginx-джейлов

hljs ini
# Ошибка HTTP-аутентификации Nginx
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 3600

# Нарушение ограничения скорости Nginx
[nginx-limit-req]
enabled = true
port = http,https
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 10
bantime = 600

# Защита от флуда 404 Nginx
[nginx-404]
enabled = true
port = http,https
filter = nginx-404
logpath = /var/log/nginx/access.log
maxretry = 20
findtime = 60
bantime = 3600

Настройка Apache-джейлов

hljs ini
# Ошибка аутентификации Apache
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 5
bantime = 3600

# Плохие боты Apache
[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/apache2/access.log
maxretry = 2
bantime = 86400

Белый список IP

hljs ini
[DEFAULT]
# Можно добавить несколько IP или подсетей
ignoreip = 127.0.0.1/8 ::1 10.0.0.0/8 192.168.0.0/16 203.0.113.1
hljs bash
# Перезагрузить конфигурацию
sudo fail2ban-client reload

# Проверить белый список
sudo fail2ban-client get sshd ignoreip

Мониторинг заблокированных IP

hljs bash
# Просмотр статуса всех джейлов
sudo fail2ban-client status

# Просмотр статуса конкретного джейла
sudo fail2ban-client status sshd

# Список заблокированных IP
sudo fail2ban-client status sshd | grep "Banned IP"

# Мониторинг лог-файла
sudo tail -f /var/log/fail2ban.log

# Фильтрация последних событий блокировки
sudo grep "Ban" /var/log/fail2ban.log | tail -20

Блокировка и разблокировка IP

hljs bash
# Вручную заблокировать IP
sudo fail2ban-client set sshd banip 1.2.3.4

# Разблокировать IP
sudo fail2ban-client set sshd unbanip 1.2.3.4

# Удалить все блокировки (с осторожностью!)
sudo fail2ban-client unban --all

Email-уведомления

hljs ini
[DEFAULT]
destemail = admin@example.com
sender = fail2ban@yourdomain.com
mta = sendmail

# Варианты действий:
# action_ = только блокировать
# action_mw = блокировать + email
# action_mwl = блокировать + email + whois + строки лога
action = %(action_mwl)s

Очень агрессивные настройки (низкий maxretry, длинный bantime) могут также блокировать легитимных пользователей. Для SSH maxretry=3-5 и bantime=3600-86400 — сбалансированный подход.

Заключение

Fail2Ban — незаменимая часть безопасности сервера. При правильной настройке для SSH, Nginx и Apache он значительно снижает количество брутфорс-атак. Регулярно отслеживайте лог-файлы и добавляйте ложные срабатывания в белый список.