Как защитить SSH с помощью Fail2ban: пошаговая настройка
Настройка Fail2ban для блокировки подбора паролей SSH
Введение
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 и смените стандартный порт.
Читайте также
Комментарии
Комментарии доступны только зарегистрированным пользователям. Войти
- Пока нет комментариев. Будьте первым.



