sadrix logoSadriX
Минцифры готовит обязательную регистрацию IMEI смартфонов, купленных за границей
Гайды

Как защитить SSH с помощью Fail2ban: пошаговая настройка

Настройка Fail2ban для блокировки подбора паролей SSH

08 513 просмотров3 мин
0
Поделиться:TelegramVK

Введение

SSH — стандартный способ удалённого управления сервером, и он постоянно подвергается атакам перебора паролей. Боты сканируют интернет, находят открытый порт 22 и начинают подбирать логины и пароли. Даже если у вас сложный пароль, постоянные попытки засоряют логи и создают нагрузку. Fail2ban — это утилита, которая анализирует логи и временно блокирует IP-адреса после нескольких неудачных попыток входа. В этом руководстве мы разберём, как установить, настроить и проверить Fail2ban для защиты SSH.

Требования

  • Сервер под управлением Linux (Ubuntu/Debian, CentOS/RHEL, Fedora и др.)

  • Доступ по SSH с правами root или sudo

  • Установленный SSH-сервер (OpenSSH)

  • Базовые навыки работы с командной строкой

Шаг 1: Установка Fail2ban

В большинстве дистрибутивов Fail2ban есть в официальных репозиториях.

Для Debian/Ubuntu:

sudo apt update
sudo apt install fail2ban

Для CentOS/RHEL/Fedora:

sudo yum install epel-release
sudo yum install fail2ban

Для Fedora:

sudo dnf install fail2ban

После установки служба запустится автоматически. Проверьте статус:

sudo systemctl status fail2ban

Шаг 2: Создание локальной конфигурации

Не редактируйте основной файл /etc/fail2ban/jail.conf, так как он может быть перезаписан при обновлении. Вместо этого создайте файл /etc/fail2ban/jail.local:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

В этом файле вы будете вносить все изменения.

Шаг 3: Базовая настройка jail.local

Откройте файл и найдите секцию [DEFAULT]. Здесь задаются параметры по умолчанию для всех правил (jail). Основные параметры:

  • ignoreip — список IP-адресов, которые никогда не блокируются. Добавьте свой IP, чтобы случайно не заблокировать себя.

  • bantime — время блокировки в секундах (например, 1h = 3600).

  • findtime — временное окно, в течение которого считаются неудачные попытки.

  • maxretry — количество неудачных попыток до блокировки.

  • backend — метод чтения логов (обычно auto).

Пример настроек:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.1.100
bantime = 1h
findtime = 10m
maxretry = 5
backend = auto

Здесь мы игнорируем localhost и свой IP 192.168.1.100, блокируем на час после 5 попыток в течение 10 минут.

Шаг 4: Настройка защиты SSH

В том же файле jail.local найдите секцию [sshd]. Если её нет, добавьте в конец файла:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h

Для CentOS/RHEL путь к логу может быть /var/log/secure. Проверьте свой дистрибутив.

Параметр port можно указать как ssh или номер порта, если вы изменили стандартный.

Шаг 5: Настройка уведомлений (опционально)

Fail2ban может отправлять email при блокировке. В секции [DEFAULT] укажите:

destemail = your@email.com
sender = fail2ban@yourhostname
mta = sendmail

Убедитесь, что на сервере настроен MTA (sendmail, postfix).

Шаг 6: Применение настроек

После редактирования файла перезапустите Fail2ban:

sudo systemctl restart fail2ban

Проверьте, что служба активна и правила загружены:

sudo fail2ban-client status

Вы должны увидеть список активных jail, включая sshd.

Шаг 7: Проверка работы

Посмотрите статус конкретного правила:

sudo fail2ban-client status sshd

Вывод покажет количество неудачных попыток, заблокированные IP и т.д.

Чтобы протестировать, попробуйте с другого IP (не из ignoreip) несколько раз ввести неверный пароль. После превышения maxretry адрес должен появиться в списке заблокированных.

Шаг 8: Управление блокировками вручную

Вы можете разблокировать IP вручную:

sudo fail2ban-client set sshd unbanip 192.168.1.200

Или заблокировать принудительно:

sudo fail2ban-client set sshd banip 192.168.1.200

Шаг 9: Настройка фильтров

Fail2ban использует фильтры из /etc/fail2ban/filter.d/. Для SSH это sshd.conf. Если вы изменили формат логов SSH, возможно, потребуется адаптировать фильтр. Но в большинстве случаев стандартный работает.

Шаг 10: Защита других сервисов

Fail2ban можно использовать не только для SSH. Например, для защиты веб-сервера (Apache/Nginx) включите соответствующие jail:

[nginx-http-auth]
enabled = true

Но это выходит за рамки данного руководства.

Типичные ошибки

1. Редактирование jail.conf вместо jail.local — при обновлении пакета изменения потеряются. 2. Неправильный путь к логам — в разных дистрибутивах логи SSH лежат в разных местах. Проверьте /var/log/auth.log (Debian/Ubuntu) или /var/log/secure (RHEL/CentOS). 3. Забыли добавить свой IP в ignoreip — можно заблокировать себя. 4. Слишком агрессивные настройки — maxretry=1 и bantime=1w могут блокировать легитимных пользователей. 5. Не перезапустили службу — изменения не применятся без перезапуска. 6. Отсутствие логов — если SSH не пишет логи, Fail2ban не сможет работать. Проверьте настройки rsyslog.

FAQ

Вопрос: Как узнать, какие IP заблокированы? Ответ: sudo fail2ban-client status sshd покажет список.

Вопрос: Можно ли блокировать навсегда? Ответ: Да, установите bantime = -1.

Вопрос: Fail2ban замедляет сервер? Ответ: Нет, он потребляет мало ресурсов.

Вопрос: Что делать, если я заблокировал себя? Ответ: Если у вас есть доступ через другой IP или консоль, разблокируйте командой unbanip. Либо перезагрузите сервер — блокировки сбрасываются.

Вопрос: Работает ли Fail2ban с ключами SSH? Ответ: Да, он анализирует неудачные попытки входа, независимо от метода аутентификации.

Итог

Fail2ban — простой и эффективный инструмент для защиты SSH от брутфорс-атак. Установка и настройка занимают несколько минут, а польза огромна. Не забудьте добавить свой IP в ignoreip и проверить работу. Для дополнительной безопасности используйте ключи SSH и смените стандартный порт.

Читайте также

Комментарии

Комментарии доступны только зарегистрированным пользователям. Войти

  • Пока нет комментариев. Будьте первым.