2,7K подписчиков

Руководство по Fail2ban

Fail2Ban – это программа для защиты серверов от Brute force атак методом перебора паролей, отслеживая попытки обращения к сервисам и при повторяющихся неудачных попытках авторизации блокирует доступ к

Fail2Ban – это программа для защиты серверов от Brute force атак методом перебора паролей, отслеживая попытки обращения к сервисам и при повторяющихся неудачных попытках авторизации блокирует доступ к ресурсу с этого IP - адреса, с помощью правила iptables(ipfw) или host.deny.

Содержание статьи

  • Поддерживаемые сервисы
  • Установка fail2ban
  • Настройка конфигурационных файлов решения
  1. Примеры настроек под определённые службы
  • Создание и проверка правила
  • Вывод

Поддерживаемые сервисы

В Fail2ban присутствуют фильтры для следующих сервисов:

Fail2Ban – это программа для защиты серверов от Brute force атак методом перебора паролей, отслеживая попытки обращения к сервисам и при повторяющихся неудачных попытках авторизации блокирует доступ к-2

Установка fail2ban

В репозиториях Ubuntu присутствует этот пакет:

apt show fail2ban

Устанавливаем пакет:

apt install fail2ban

Проверяем статус службы:

systemctl status fail2ban

Должно быть: Active

Настройка конфигурационных файлов решения

Основные конфигурационные параметры можно посмотреть и поменять в файле /etc/fail2ban/jail.conf

Существующие фильтры по программному обеспечению находятся по адресу /etc/fail2ban/filter.d

Фильтры при необходимости можно править или на основе готовых делать свои фильтры

Существующие правила реагирования находятся в директории /etc/fail2ban/action.d

Примеры настроек под определённые службы

Примеры настроек блокировки попыток подбора паролей в конфигурационном файле /etc/fail2ban/jail.conf

Удалённый доступ по SSH

[ssh-iptables]

enabled = true //фильтр включен

filter = sshd //имя фильтра

action = iptables[name=SSH, port=ssh, protocol=tcp] //параметры правила блокировки для файрволла

logpath = /var/log/secure //Лог файл

findtime = 300 //промежуток времени, в течении которого должны быть зарегистрированы 3 неудачные попытки авторизации для блокировки адресата.

maxretry = 3 //3 неудачные попытки

bantime = 7200 //время блокировки в секундах

Почтовый сервер - Dovecot

[dovecot-iptables]

enabled = true

filter = dovecot

action = iptables-multiport[name=DCOT, port="pop3,pop3s,imap,imaps", protocol=tcp]

logpath = /var/log/maillog

findtime = 300

maxretry = 5

bantime = 3600

Почтовый сервер - Postfix

[postfix-iptables]

enabled = true

filter = postfix

action = iptables-multiport[name=PFIX, port="smtp,smtps", protocol=tcp]

logpath = /var/log/maillog

findtime = 300

maxretry = 5

bantime = 3600

База данных MySQL

[mysqld-auth]

enabled = true

filter = mysqld-auth

port = 3306

logpath = /var/log/mysql/error.log

Создание и проверка правила

Создаем конфигурационный файл service_1C.conf в директории /etc/fail2ban/jail.conf:

# имя сервиса

[service_1C]

# включаем фильтр

enabled = true

# используемые порты

port = http,https

# имя фильтра

filter = service_1C

# лог файл сервиса для анализа

logpath = /var/log/myservice.log

# правило блокировки: 3 неудачных попытки авторизации в течении 5-ти минут

maxretry = 3

findtime = 300

# блокируем на час адресата

bantime = 3600

ctrl+o, ctrl+x

Перезапускаем fail2ban:

systemctl restart fail2ban

Проверим статус клиентского приложения:

fail2ban-client status

выводим

fail2ban-client status myservice

Работа со списком заблокированных адресов

Получить список правил можно командой:

fail2ban-client status

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

fail2ban-client status <имя правила>

При наличие в списке заблокированных адресов мы увидим:

`- action

  |- Currently banned: 2

  | `- IP list:   8.8.8.8 8.8.4.4

С помощью iptables:

iptables -L -n --line

Удаление адресов из списка блокировки

Средствами fail2ban:

fail2ban-client set ssh unbanip 8.8.8.8

С помощью iptables:

iptables -D fail2ban-ssh -s 8.8.8.8

С помощью ufw:

Вывод

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

Базовая настройка

Основной конфигурационный файл находится по пути /etc/fail2ban/jail.conf. Однако, его не рекомендуется менять и для настройки используют подключаемые файлы из каталога /etc/fail2ban/jail.d.

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

nano /etc/fail2ban/jail.d/default.conf

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

[DEFAULT]

maxretry = 3

findtime = 500

bantime = 3600

action = iptables

ignoreip = 127.0.0.1/8

Расшифровка параметров конфигурации:

  • maxretry — количество неудачных попыток до блокировки адресата
  • findtime — время в течение которого учитываются неудачные попытки авторизации
  • bantime — время, на которое блокируется адресат
  • action — действия, которое будет выполняться при срабатывании блокировки
  • ignoreip -  ip адреса запросы от которых не обрабатываются системой

* В секции [DEFAULT] хранятся общие настройки для всех правил. Каждую из настроек можно переопределить при конфигурировании самого правила.

Настройка правил

Для нового правила необходимо создать конфигурационный файл в каталоге /etc/fail2ban/jail.d, например:

nano /etc/fail2ban/jail.d/srv_1c.conf

[srv_1c]

enabled = true

port = 1540,1541,1560-1569

filter = srv_1c

action = iptables[name=srv_1c, port=1540,1541,1560-1569, protocol=tcp]

logpath = /var/log/auth.log

maxretry = 10

findtime = 600

* где:

  • ssh — название для правила;
  • enabled позволяет быстро включать (true) или отключать (false) правило;
  • port — порт целевого сервиса. Принимается буквенное или цифирное обозначение;
  • filter — фильтр (критерий поиска), который будет использоваться для поиска подозрительных действий. По сути, это имя файла из каталога /etc/fail2ban/filter.d без .conf на конце;
  • action — действие, совершаемое в случае срабатывания правила. В квадратных скобках указаны название для правила, сетевой порт и протокол для блокирования;
  • logpath — расположение лог-файла, в котором фильтр будет искать подозрительную активность на основе описанных критериев.

* обратите внимание, что мы переопределили параметры по умолчанию maxretryfindtime и action.

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

Чтобы изменения вступили в силу, перезапускаем сервис:

systemctl restart fail2ban

* в старых версиях service fail2ban restart.

Исключения

Для гарантии, что fail2ban не заблокирут компьютер администратора или другой важный узел, предусмотрена настройка исключений с помощью опции ignoreip. Опция может быть применена как на глобальном уровне (default), так и для конкретного правила.

Для того, чтобы задать общую настроку, откроем наш файл default:

vi /etc/fail2ban/jail.d/default.conf

... и добавим:

[DEFAULT]

...

ignoreip = 192.168.0.0/24 95.95.95.95

* в данном примере под фильтры не будут попадать адреса с 192.168.0.1 по 192.168.0.255 и адрес 95.95.95.95.

Для конкретного правила настройки будут, примерно, следующие:

vi /etc/fail2ban/jail.d/ssh.conf

[ssh]

...

ignoreip = 192.168.1.22

* в данном примере мы добавили в белый список один адрес 192.168.1.22, который не будет блокироваться.

Обязательно перезагружаемся, чтобы настройки применились:

systemctl restart fail2ban

Действия и фильтры

Файлы с настройкой действий находятся в каталоге /etc/fail2ban/action.d. Чтобы блокировать адрес, Fail2ban создает правило в брандмауэре netfilter. Для этого, чаще всего, используются утилиты iptables

Примеры правил

SSH (iptables)

nano /etc/fail2ban/jail.d/ssh.conf

[ssh]

enabled = true

port = ssh

filter = sshd

action = iptables[name=sshd]

logpath = /var/log/auth.log

Asterisk

nano /etc/fail2ban/jail.d/asterisk.conf

[asterisk]

enabled = true

filter = asterisk

action = iptables-allports[name=asterisk, protocol=all]

logpath = /var/log/asterisk/messages

NGINX

nano /etc/fail2ban/jail.d/nginx.conf

[nginx]

enabled = true

port = http,https

filter = nginx-http-auth

action = iptables-multiport[name=nginx, port="http,https", protocol=tcp]

logpath = /var/log/nginx/error.log