Защита от подбора пароля. Fail2ban¶
Если вы входите на сервер по паролю, злоумышленники могут пытаться подобрать его автоматически — это называется брутфорс-атакой. Лучший способ защиты — использовать авторизацию по ключу (без пароля). Но если по какой-то причине вы всё же используете пароль, стоит дополнительно защитить сервер. Один из самых простых и эффективных инструментов для этого — Fail2ban.
Fail2ban — это программа, которая следит за логами (записями о действиях на сервере). Если кто-то слишком много раз подряд пытается залогиниться и ошибается, Fail2ban автоматически блокирует его IP-адрес на некоторое время.
Установка Fail2ban¶
На Ubuntu / Debian:
На CentOS / Rocky Linux:
Для корректной работы необходимо, чтобы был установлен файрвол. Вы можете установить например iptables:
На Ubuntu / Debian:
На CentOS / Rocky Linux:
После установки включите автозапуск Fail2ban:
На Ubuntu Fail2ban сразу начнёт защищать SSH: по умолчанию он блокирует IP на 10 минут, если с него было 5 неудачных попыток входа за 10 минут.
Как правильно настроить Fail2ban¶
Основные настройки хранятся в файле /etc/fail2ban/jail.confи разбиты на разделы.
В разделе [DEFAULT] задаются общие правила, которые действуют по умолчанию для всех служб.
А для отдельных служб (например, SSH, веб-сервер Apache или FTP) свои параметры указываются в своих собственных разделах — таких как [sshd], [apache-auth], [vsftpd] и т.д.
Не рекомендуем менять базовые настройки в этом файле. Вместо этого создайте свой файл настроек — jail.local:
Можно создать его пустым — Fail2ban сам подставит всё, что вы не укажете, из настроек по умолчанию.
Пример настройки для защиты SSH¶
Вот простой пример содержимого файла jail.local:
Что это значит:
ignoreip— ваш «белый» IP-адрес. Fail2ban никогда не заблокирует его, даже если вы ошибётесь с паролем. Укажите здесь свой IP (если он статический). Можно добавить несколько адресов через пробел.enabled = true— включить защиту для SSH.maxretry = 3— максимум 3 неудачные попытки входа.findtime = 120— за последние 120 секунд (2 минуты).bantime = 43200— блокировать на 12 часов (43200 секунд).
То есть: если с какого-то IP (кроме вашего) 3 раза за 2 минуты вводили неправильный пароль — этот IP заблокируют на 12 часов.
Примечание
В зависимости от применяемой системы секция может быть [sshd], [ssh] или [ssh-iptables] - эту информацию уточняйте в файле jail.conf
Дополнительные настройки¶
-
Если вы сменили порт SSH (например, с 22 на 2222), добавьте в секцию
[sshd]: -
Если вы используете UFW или firewalld вместо iptables, укажите:
- Для UFW:
action = ufw - Для firewalld:
action = firewallcmd-ipset
Но в большинстве случаев можно оставить всё по умолчанию — Fail2ban сам подберёт нужный метод блокировки.
Примените настройки¶
После сохранения файла перезапустите Fail2ban:
Как проверить, что всё работает¶
-
Посмотреть статус блокировок для SSH:
Вы увидите список заблокированных IP-адресов. -
Посмотреть логи Fail2ban:
-
Проверить блокировки в iptables (если используется):
Совет: не проверяйте работу, специально пытаясь ввести неправильный пароль с вашего IP — вы можете случайно заблокировать себя! Лучше подождать немного: боты обычно начинают атаковать серверы в течение первого часа после запуска.
Примечание
Fail2ban — дополнительная защита, но лучше вообще не использовать пароли для SSH. Настройте вход по SSH-ключу — это надёжнее и удобнее. Всегда добавляйте свой IP в ignoreip, чтобы случайно не заблокировать себя.