Перейти к содержанию

Защита от подбора пароля. Fail2ban

Если вы входите на сервер по паролю, злоумышленники могут пытаться подобрать его автоматически — это называется брутфорс-атакой. Лучший способ защиты — использовать авторизацию по ключу (без пароля). Но если по какой-то причине вы всё же используете пароль, стоит дополнительно защитить сервер. Один из самых простых и эффективных инструментов для этого — Fail2ban.

Fail2ban — это программа, которая следит за логами (записями о действиях на сервере). Если кто-то слишком много раз подряд пытается залогиниться и ошибается, Fail2ban автоматически блокирует его IP-адрес на некоторое время.


Установка Fail2ban

На Ubuntu / Debian:

sudo apt update
sudo apt install fail2ban -y

На CentOS / Rocky Linux:

sudo yum update
sudo yum install epel-release
sudo yum install fail2ban

Для корректной работы необходимо, чтобы был установлен файрвол. Вы можете установить например iptables:

На Ubuntu / Debian:

sudo apt install iptables

На CentOS / Rocky Linux:

sudo yum install iptables-services

После установки включите автозапуск Fail2ban:

sudo systemctl enable fail2ban

На Ubuntu Fail2ban сразу начнёт защищать SSH: по умолчанию он блокирует IP на 10 минут, если с него было 5 неудачных попыток входа за 10 минут.


Как правильно настроить Fail2ban

Основные настройки хранятся в файле /etc/fail2ban/jail.confи разбиты на разделы.
В разделе [DEFAULT] задаются общие правила, которые действуют по умолчанию для всех служб.
А для отдельных служб (например, SSH, веб-сервер Apache или FTP) свои параметры указываются в своих собственных разделах — таких как [sshd], [apache-auth], [vsftpd] и т.д.

Не рекомендуем менять базовые настройки в этом файле. Вместо этого создайте свой файл настроекjail.local:

sudo nano /etc/fail2ban/jail.local

Можно создать его пустым — Fail2ban сам подставит всё, что вы не укажете, из настроек по умолчанию.


Пример настройки для защиты SSH

Вот простой пример содержимого файла jail.local:

[DEFAULT]
ignoreip = 123.45.67.89

[sshd]
enabled = true
maxretry = 3
findtime = 120
bantime = 43200

Что это значит:

  • 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]:

    port = 2222
    

  • Если вы используете UFW или firewalld вместо iptables, укажите:

  • Для UFW: action = ufw
  • Для firewalld: action = firewallcmd-ipset

Но в большинстве случаев можно оставить всё по умолчанию — Fail2ban сам подберёт нужный метод блокировки.


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

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

sudo systemctl restart fail2ban

Как проверить, что всё работает

  1. Посмотреть статус блокировок для SSH:

    sudo fail2ban-client status sshd
    
    Вы увидите список заблокированных IP-адресов.

  2. Посмотреть логи Fail2ban:

    sudo tail /var/log/fail2ban.log
    

  3. Проверить блокировки в iptables (если используется):

    sudo iptables -L
    

Совет: не проверяйте работу, специально пытаясь ввести неправильный пароль с вашего IP — вы можете случайно заблокировать себя! Лучше подождать немного: боты обычно начинают атаковать серверы в течение первого часа после запуска.


Примечание

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

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×