Как защитить SSH с помощью Fail2ban: пошаговое руководство
Настройка Fail2ban для блокировки подозрительных IP-адресов и защиты SSH
Введение
SSH — основной способ удалённого управления сервером. Однако открытый порт 22 постоянно сканируется ботами, которые пытаются подобрать пароль методом перебора. Даже сложный пароль не гарантирует полной безопасности, а большое количество неудачных попыток входа забивает логи и создаёт нагрузку. Решение — использовать Fail2ban: он анализирует логи, находит повторяющиеся неудачные попытки входа и временно блокирует IP-адреса через правила файрвола.
В этом руководстве мы рассмотрим установку и настройку Fail2ban для защиты SSH на сервере с Linux (на примере Ubuntu/Debian, но принципы применимы и к другим дистрибутивам).
Требования
Сервер под управлением Linux (Ubuntu 20.04/22.04, Debian 10/11, CentOS 7/8, AlmaLinux, Rocky Linux и т.п.).
Доступ к серверу с правами root или через sudo.
Установленный SSH-сервер (обычно openssh-server).
Базовые навыки работы в командной строке.
Желательно, чтобы на сервере уже был настроен файрвол (iptables, nftables, firewalld или ufw). Fail2ban умеет с ними работать.
Шаг 1: Установка Fail2ban
В большинстве дистрибутивов Fail2ban есть в официальных репозиториях. Установка сводится к одной команде.
Для Debian/Ubuntu:
sudo apt update
sudo apt install fail2banДля CentOS/RHEL/AlmaLinux/Rocky:
sudo dnf install epel-release
sudo dnf install fail2banДля Fedora:
sudo dnf install fail2banПосле установки служба автоматически запустится. Проверьте статус:
sudo systemctl status fail2banШаг 2: Знакомство с конфигурацией
Fail2ban использует два типа файлов:
/etc/fail2ban/jail.conf— основной конфигурационный файл, который не следует редактировать напрямую, так как при обновлении пакета изменения могут быть перезаписаны./etc/fail2ban/jail.local— файл для пользовательских настроек. Именно здесь мы будем вносить изменения.
Если файла jail.local нет, создайте его копированием из jail.conf:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localТакже в директории /etc/fail2ban/jail.d/ можно размещать отдельные файлы для включения или переопределения настроек. Это удобно для управления конфигурацией.
Шаг 3: Базовая настройка jail.local
Откройте файл jail.local в текстовом редакторе (например, nano):
sudo nano /etc/fail2ban/jail.localВ секции [DEFAULT] можно задать глобальные параметры, которые будут применяться ко всем «тюрьмам» (jail), если не переопределены. Обратите внимание на следующие параметры:
ignoreip— список IP-адресов или подсетей, которые никогда не блокируются. Обязательно добавьте сюда свой IP, чтобы случайно не заблокировать себя. Пример:
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.5bantime— время блокировки в секундах (или с суффиксами m, h, d). По умолчанию 10 минут. Рекомендуется увеличить до 1 часа или более:bantime = 1h.findtime— временной интервал, в течение которого подсчитываются неудачные попытки. По умолчанию 10 минут.maxretry— количество неудачных попыток до блокировки. По умолчанию 5.banaction— действие для блокировки. Обычноiptables-multiportилиnftables-multiport. Если используете firewalld, укажитеfirewallcmd-ipset.backend— способ чтения логов.autoобычно работает корректно, но можно указатьsystemd, если логи ведутся через journald.
Пример секции [DEFAULT]:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.5
bantime = 1h
findtime = 10m
maxretry = 5
banaction = iptables-multiport
backend = autoШаг 4: Настройка защиты SSH
В том же файле jail.local найдите секцию [sshd] (или создайте её). Убедитесь, что она включена (enabled = true). Пример:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 2hДля систем на базе RHEL/CentOS путь к логу может быть /var/log/secure. Если используется systemd-journald, можно не указывать logpath, а задать backend = systemd.
Параметр port можно указать явно (например, port = 22), если SSH работает на нестандартном порту, укажите его.
Шаг 5: Проверка конфигурации и перезапуск
После внесения изменений проверьте синтаксис:
sudo fail2ban-client -tЕсли ошибок нет, перезапустите службу:
sudo systemctl restart fail2banУбедитесь, что тюрьма sshd активна:
sudo fail2ban-client status sshdВы увидите количество неудачных попыток, список заблокированных IP и т.д.
Шаг 6: Тестирование работы
Чтобы убедиться, что Fail2ban реагирует на неудачные попытки входа, можно с другого компьютера (не того, с которого вы работаете, и не из ignoreip) попробовать подключиться по SSH с неверным паролем несколько раз. После превышения maxretry ваш IP должен быть заблокирован. Проверить список блокировок можно командой:
sudo fail2ban-client status sshdЕсли вы случайно заблокировали себя, можно разблокировать IP:
sudo fail2ban-client set sshd unbanip <IP-адрес>Шаг 7: Настройка уведомлений (опционально)
Fail2ban может отправлять уведомления о блокировках на email. Для этого в jail.local в секции [DEFAULT] укажите:
destemail = your@email.com
sender = fail2ban@your-server.com
mta = sendmailУбедитесь, что на сервере настроен MTA (sendmail, postfix и т.п.).
Также можно использовать действие action_ для выполнения скриптов при бане. Например, для отправки в Telegram или Slack.
Шаг 8: Работа с несколькими тюрьмами
Fail2ban позволяет защищать не только SSH, но и другие сервисы: веб-серверы (Apache, Nginx), почтовые серверы, FTP и т.д. Для каждого сервиса создаётся отдельная секция в jail.local. Например, для защиты Nginx от брутфорса на странице входа WordPress можно использовать фильтр nginx-http-auth или wordpress. Включайте только те тюрьмы, которые вам нужны, чтобы не создавать лишнюю нагрузку.
Шаг 9: Обновление и обслуживание
Регулярно обновляйте Fail2ban вместе с системой, чтобы получать исправления безопасности и новые фильтры. Следите за логами Fail2ban (/var/log/fail2ban.log), чтобы вовремя замечать проблемы. Периодически проверяйте список заблокированных IP и при необходимости корректируйте правила.
Типичные ошибки
1. Редактирование jail.conf вместо jail.local — при обновлении пакета ваши настройки будут потеряны. Всегда используйте jail.local или файлы в jail.d. 2. Забыли добавить свой IP в ignoreip — можно случайно заблокировать себя и потерять доступ к серверу. 3. Неверный путь к логам — если указать неправильный logpath, Fail2ban не сможет анализировать события. Проверьте, куда пишутся логи SSH в вашей системе. 4. Конфликт с другим файрволом — если у вас уже настроен ufw или firewalld, убедитесь, что Fail2ban использует совместимый banaction. 5. Слишком мягкие или слишком строгие правила — maxretry=1 может привести к блокировке при случайной опечатке, а maxretry=10 делает защиту менее эффективной. Оптимально 3-5. 6. Отсутствие тестирования — после настройки обязательно проверьте, что блокировка работает, и что вы не заблокированы.
FAQ
Вопрос: Можно ли использовать Fail2ban без файрвола? Ответ: Fail2ban требует наличия файрвола (iptables, nftables, firewalld) для применения блокировок. Если файрвол не установлен, Fail2ban не сможет блокировать IP.
Вопрос: Заблокирует ли Fail2ban навсегда? Ответ: По умолчанию блокировка временная (bantime). Можно увеличить время или настроить постоянную блокировку (bantime = -1), но это может быть опасно, если IP динамический.
Вопрос: Что делать, если я заблокировал себя? Ответ: Если у вас есть доступ к серверу через другой IP или консоль, выполните fail2ban-client set sshd unbanip <ваш IP>. Либо перезагрузите сервер — блокировки сбрасываются.
Вопрос: Работает ли Fail2ban с нестандартным портом SSH? Ответ: Да, укажите этот порт в параметре port в секции [sshd].
Вопрос: Как посмотреть, какие IP заблокированы? Ответ: Команда sudo fail2ban-client status sshd покажет список заблокированных IP.
Вопрос: Нужно ли настраивать ротацию логов для Fail2ban? Ответ: Обычно logrotate уже настроен для системных логов. Для логов Fail2ban также можно настроить ротацию, но по умолчанию он пишет в /var/log/fail2ban.log, который ротируется стандартными средствами.
Итог
Fail2ban — мощный и гибкий инструмент для защиты SSH и других сервисов от брутфорс-атак. Правильная настройка позволяет автоматически блокировать злоумышленников, снижая риск взлома и разгружая логи. Не забывайте добавлять свой IP в ignoreip, тестировать конфигурацию и регулярно обновлять систему. В сочетании с другими мерами (отключение входа по паролю, использование ключей SSH, смена порта) Fail2ban значительно повышает безопасность сервера.
Читайте также
Комментарии
Комментарии доступны только зарегистрированным пользователям. Войти
- Пока нет комментариев. Будьте первым.



