Помощь

Защита SSH от подбора пароля с помощью Fail2ban

Для обеспечения безопасности вашего сервера от атак, таких как брутфорс-взломы, рекомендуется настраивать и использовать аутентификацию по ключу вместо пароля.

Другим методом защиты может быть использование инструмента Fail2ban. Fail2ban анализирует журналы работы служб на сервере и, обнаружив подозрительную активность, автоматически блокирует IP-адреса потенциальных злоумышленников. Fail2ban может быть применен для защиты различных служб, таких как Apache, FTP, dovecot и многих других.

В данной статье мы рассмотрим базовую настройку Fail2ban для защиты службы SSH от атак перебора паролей.

Для установки Fail2ban на Ubuntu/Debian, выполните следующие команды:

sudo apt update
sudo apt install fail2ban -y

Для установки на CentOS:

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

Далее, добавьте Fail2ban в автозагрузку:

sudo systemctl enable fail2ban

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

Эти и другие параметры работы инструмента можно настроить в его конфигурационных файлах.

Конфигурационный файл Fail2ban

Настройки Fail2ban хранятся в конфигурационном файле /etc/fail2ban/jail.conf.

Настройки разделены на разделы. В разделе [DEFAULT] указаны общие параметры, применимые ко всем службам. Специфические настройки для конкретных служб прописываются в соответствующих разделах, таких как [sshd], [apache-auth], [vsftpd].

Рекомендуется не изменять параметры напрямую в файле jail.conf. Вместо этого, создайте файл jail.local в той же директории и внесите изменения в нем.

Вы можете либо скопировать оригинальный файл:

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

Либо создать новый пустой файл:

sudo touch /etc/fail2ban/jail.local

Затем внесите в файл jail.local только те настройки, которые вы хотите изменить. Остальные параметры будут наследовать значения из файла jail.conf.

Настройка защиты SSH

Откройте файл jail.local для редактирования:

sudo nano /etc/fail2ban/jail.local

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

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

Эти настройки означают следующее: если с IP-адреса, не входящего в список исключений, в течение 2 минут произойдут 3 неудачные попытки аутентификации, Fail2ban автоматически заблокирует этот адрес на 12 часов.

Секция DEFAULT предлагает настройки, такие как длительность блокировки (bantime), максимальное количество попыток (maxretry) и т. д. В данном руководстве мы описываем большинство настроек в отдельной секции для SSH, и в разделе DEFAULT оставляем только параметр ignoreip:

  • ignoreip - это "белый список" IP-адресов, которые не будут автоматически блокироваться при неудачных попытках входа. Вы можете добавить сюда свой собственный IP-адрес (если он статический, а не динамический) с которого вы обычно подключаетесь к серверу. Также можно указать несколько адресов, разделяя их пробелами, или маски подсети.

Если не требуется использовать белый список, вы можете просто закомментировать эту строку, предварительно добавив символ #.

В разделе [sshd] вы можете указать настройки для обработки Fail2ban конкретной службы - SSH. В зависимости от системы, раздел может иметь разные названия, такие как [sshd], [ssh] или [ssh-iptables] (это можно проверить в файле jail.conf).

Важно помнить, что если какой-то параметр отсутствует в файле конфигурации, Fail2ban будет использовать значения по умолчанию. Таким образом, вам нужно указывать только те параметры, которые требуется изменить.

Здесь мы представляем параметры для настройки:

  • enabled — обязательный параметр, который определяет активацию или деактивацию данной секции. Для активации этот параметр должен иметь значение true, которое, по умолчанию, уже установлено. Обратите внимание, что в CentOS этот параметр изначально закомментирован. Если вы редактируете копию основного файла jail.conf, убедитесь, что вы убрали символ # перед этим параметром, чтобы включить секцию;
  • bantime — продолжительность блокировки в секундах, т.е. период, на который подозрительный IP-адрес будет заблокирован;
  • maxretry — количество неудачных попыток в течение периода findtime, после которых будет выполнена блокировка;
  • findtime — период в секундах, в течение которого событие (в данном случае, неудачная попытка подключения) должно повториться определенное количество раз (maxretry), перед тем как будет выполнена блокировка.

Кроме того, существуют и другие настраиваемые параметры, такие как:

  • port — порт, используемый данной службой, например, SSH. Если SSH у вас использует нестандартный порт (не 22), укажите его здесь. В случае использования стандартного порта, указание этого параметра необязательно;
  • logpath — путь к лог-файлу, который анализирует Fail2ban. По умолчанию, это стандартный путь к SSH-логам;
  • action — действие, выполняемое при блокировке IP-адреса. По умолчанию, это блокировка IP-адреса с помощью правил iptables.
    Чтобы заблокировать все порты для данного IP-адреса, можно использовать: action = iptables-allports.
    Если на вашем сервере настроен firewalld или ufw, вы должны указать соответствующие значения для action: firewallcmd-ipset или ufw соответственно.
    Полный список доступных действий можно найти в каталоге /etc/fail2ban/action.d.

После сохранения внесенных изменений, перезапустите Fail2ban:

sudo systemctl restart fail2ban.service

Проверка

После настройки Fail2ban рекомендуется проверить его функционирование. Лучше всего провести проверку не сразу, а через некоторое время после сохранения настроек, чтобы получить более наглядные результаты.

Заблокированные IP-адреса могут быть просмотрены в правилах iptables:

sudo iptables -L

Также, существует возможность просмотра журналов работы Fail2ban:

sudo tail /var/log/fail2ban.log

Дополнительную информацию можно получить через интерфейс Fail2ban:

sudo fail2ban-client status sshd

Остались вопросы - пишите