5.6к
1
0
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
Назад

Используем Fail2ban для защиты SSH

Время чтения 8 минут
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
5.6к
1
0
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники

Если ваши Linux-серверы доступны из внешней сети, рано или поздно в лог-файле /var/log/auth.log (в дистрибутивах на основе Debian) или /var/log/secure (Red Hat Linux) можно обнаружить большое количество неудачных попыток входа на ваш сервер. Как правило, в auth.log отображаются строки вида:

Invalid user admin from 192.168.126.1 port 65334

Failed password for invalid user admin from 192.168.126.1 port 65334 ssh2

Failed password for root from 192.168.126.1 port 65345 ssh2

Это может свидетельствовать о том, что происходит атака методом полного перебора, она же брутфорс. Как правило, этим занимаются боты, которые сканируют сеть на наличие открытых портов и пытаются методом перебора найти правильную комбинацию «логин — пароль» для входа на сервер. Снизить нежелательную активность можно с помощью специальной программы под названием Fail2ban, которая предназначена для защиты серверов от сетевых атак методом грубой силы.

Меня зовут Александр Бархатов, я DevSecOps-инженер в компании-интеграторе. В этой статье я покажу, как настроить Fail2ban для блокировки IP-адресов и защититься от ботов, которые работают по протоколу SSH.

Используем Fail2ban для защиты SSH

Принцип работы Fail2ban

Fail2ban получает информацию из таких файлов, как /var/log/apache2/error.log (для веб-сервера Apache), /var/log/auth.log (для SSH) и других, при этом блокируя IP-адреса, по которым регистрируется подозрительная активность. Это может быть большое количество неудачных попыток входа на сервер, использование различных имен пользователей или портов с одного IP-адреса при входе. При обнаружении таких действий Fail2ban обращается к брандмауэру, чтобы создать цепочки правил для блокировки подозрительных IP-адресов. Продолжительность блокировки зависит от значений, которые заранее указаны в конфигурационных файлах. Также в этих файлах можно использовать регулярные выражения.

«Из коробки» Fail2ban поддерживает работу с Apache, Lighttpd, Nginx, sshd, vsftpd, Postfix, Asterisk и другими программами.

Установка Fail2ban

Устанавливать Fail2ban для защиты SSH будем на сервер с ОС Ubuntu 22.04.03 LTS. Все действия нужно выполнять от имени root-пользователя. Также можно задействовать обычного пользователя с правами sudo.

Обновляем индексы репозиториев и устанавливаем пакет fail2ban:

apt update && apt -y install fail2ban

На этом установка закончена 🙂 Далее мы рассмотрим структуру конфигурационных файлов Fail2ban и настроим программу для протокола SSH.

Структура файлов Fail2ban

Все конфигурационные файлы Fail2ban хранятся в директории /etc/fail2ban. Структура файлов всегда одинаковая:

  • action.d — директория, в которой содержатся файлы для настройки исполняемых действий (actions);
  • fail2ban.conf — файл с настройками сервиса fail2ban;
  • fail2ban.d — директория, в которой хранятся файлы с пользовательскими настройками fail2ban, по умолчанию пустая;
  • filter.d — директория с шаблонами, которые предназначены для анализа лог-файлов;
  • jail.conf — файл с настройками по умолчанию для защиты сервисов (Apache, Nginx, SSH и т. д.);
  • jail.d — директория для файлов с пользовательскими настройками для защиты сервисов (Apache, Nginx, SSH и т. д.);
  • paths-arch.conf, paths-debian.conf, paths-opensuse.conf, paths-common.conf — файлы для различных операционных систем (Arch Linux, Debian, openSUSE и других), содержащие настройки путей для операционной системы, например пути расположения лог-файлов.

Настройка Fail2ban для защиты SSH

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

1. Для начала создадим резервную копию файла jail.conf. Я не советую править исходный файл, потому что он может быть перезаписан или изменен при обновлении программы. Сделаем новую копию файла jail.conf с именем jail.local:

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

2. Открываем файл на редактирование при помощи любого текстового редактора:

nano /etc/fail2ban/jail.local

Нам необходимо отредактировать следующие параметры:

[DEFAULT]
ignoreip = 127.0.0.1
[sshd]  
enabled  = true  
findtime = 180  
maxretry = 2  
bantime = 50400
filter   = sshd
logpath  = /var/log/auth.log

Значение и смысл параметров:

  • [DEFAULT] — секция по умолчанию. Параметры из нее применяются ко всем остальным секциям, если не будут переопределены заранее;
  • ignoreip — список IP-адресов, подсетей или DNS-имен, для которых не будут действовать правила Fail2ban. Эти адреса не будут блокироваться даже при неудачных попытках подключения. Список адресов указывается через пробел;
  • [sshd] — указывается секция с наименованием сервиса, для которого будут созданы параметры блокировки адресов. Для каждого сервиса необходимо создавать свою секцию. В этом примере мы настраиваем параметры для демона sshd;
  • enabled — параметр, предназначенный для включения или отключения секции с сервисом. Для включения секции необходимо задать значение true, для отключения — false;
  • findtime — время в секундах, в течение которого определенное действие (неудачная попытка подключения) должно повториться определенное количество раз (параметр maxretry), после чего адрес будет заблокирован;
  • maxretry  количество неудачных попыток в течение периода findtime, после которых адреса нужно заблокировать;
  • bantime — продолжительность блокировки хоста в секундах;
  • filter — название фильтра, содержащее регулярные выражения для поиска подозрительных действий в лог-файлах сервиса. Фильтры для различных сервисов хранятся в директории /etc/fail2ban/filter.d/;
  • logpath — полный путь до лог-файла, который Fail2ban будет использовать для поиска сетевых адресов. По умолчанию SSH записывает все попытки входа в файл /var/log/auth.log.

Теперь сохраняем изменения в файле и выходим из редактора.

3. Перезапускаем сервис fail2ban и добавляем его в автозагрузку:

systemctl restart fail2ban && systemctl enable fail2ban

4. Проверяем статус Fail2ban:

systemctl status fail2ban

Если в статусе отображено active (running), значит, Fail2ban запущен и работает.

Проверка работоспособности Fail2ban

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

Для начала проверим, какие зоны присутствуют в нашей системе. Для этого выполняем команду:

fail2ban-client status

Как можно увидеть на скриншоте, у нас есть одна зона для сервиса sshd.

Чтобы получить более подробную информацию о конкретной зоне, а также отобразить количество заблокированных IP-адресов, необходимо выполнить команду:

fail2ban-client status sshd

В разделе Filter отображено общее количество срабатываний фильтра: каждая неудачная попытка подключения увеличивает параметр Total failed на один. В примере фильтр сработал три раза и после этого был заблокирован (Currently banned) один IP-адрес 192.168.126.1 (Banned IP list).

Fail2ban ведет свой лог-файл — fail2ban.log, в котором также записывается информация о заблокированных IP-адресах. Посмотреть ход работы Fail2ban можно, воспользовавшись командой:

tail -f /var/log/fail2ban.log

IP-адрес будет заблокирован столько времени, сколько было указано в параметре bantime конфигурационного файла jail.local, но адрес можно разбанить раньше срока вручную. Для этого надо выполнить команду:

fail2ban-client set sshd unbanip 192.168.126.1

Sshd — это имя зоны, которая заблокировала адрес, а 192.168.126.1 — это IP-адрес, который необходимо разблокировать.

Чтобы узнать, какая зона заблокировала необходимый IP-адрес, надо выполнить команду:

iptables -L -n

В выводе команды необходимо найти цепочку. В имени цепочки указана ранее созданная зона, например sshd. В этом примере цепочка называется f2b-sshd, в ней есть адрес 192.168.126.1.

Заблокировать IP-адрес тоже можно в ручном режиме. Для этого надо задать зону и IP-адрес. Команда для блокировки IP-адреса 192.168.126.1 для зоны sshd будет выглядеть следующим образом:

fail2ban-client set sshd banip 192.168.126.1

В этой статье я показал принцип работы Fail2ban на примере протокола sshd на ОС Ubuntu. Похожим образом можно настроить программу для защиты прочих протоколов или других ОС от брутфорса. 

Комментарии0
Тоже интересно
Комментировать
Поделиться
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники