Fail2ban настройка centos 8

Обновлено: 04.07.2024

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

Читая некоторые статьи в интернете, может сложиться неправильное мнение, что Fail2ban нужен только для защиты от брут-форс атак (перебор паролей). На самом деле, данный программный продукт — система реагирования на подозрительные действия.

Установка и запуск

Для систем на базе пакетов Debian или Red Hat команды будут немного отличаться.

CentOS / Red Hat:

yum install fail2ban

Ubuntu / Debian:

apt-get install fail2ban

CentOS 6:

yum install fail2ban

Для запуска службы вводим следующие команды:

systemctl enable fail2ban

systemctl start fail2ban

* Для старых систем без systemd это будут команды chkconfig fail2ban on / update-rc.d fail2ban defaults и service fail2ban start.

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

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

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

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

а) для CentOS / Red Hat:

[DEFAULT]
maxretry = 4
findtime = 480
bantime = 720
action = firewallcmd-ipset
ignoreip = 127.0.0.1/8

б) для Ubuntu / Debian:

[DEFAULT]
maxretry = 4
findtime = 480
bantime = 720
action = iptables
ignoreip = 127.0.0.1/8

  • maxretry — количество действий, которые разрешено совершить до бана.
  • findtime — время в секундах, в течение которого учитывается maxretry;
  • bantime — время, на которое будет блокироваться IP-адрес;
  • action — действия, которое будет выполняться, если Fail2ban обнаружит активность, соответствующую критериям поиска;
  • ignoreip — игнорировать защиту, если запросы приходят с перечисленных адресов.

* В данном примере, если в течение 8 минут (480) будет найдено 5 строк (maxretry = 4), содержащих критерий фильтра, Fail2ban заблокирует IP-адрес, с которого идет подключение на 12 минут (720);
* В секции [DEFAULT] хранятся общие настройки для всех правил. Каждую из настроек можно переопределить при конфигурировании самого правила.

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

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

[ssh]
enabled = true
port = ssh
filter = sshd
action = iptables[name=sshd, port=ssh, protocol=tcp]
logpath = /var/log/auth.log
maxretry = 10
findtime = 600

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

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

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

systemctl restart fail2ban

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

Исключения

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

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

[DEFAULT]
.
ignoreip = 192.168.0.0/24 95.95.95.95

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

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

[ssh]
.
ignoreip = 192.168.1.22

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

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

systemctl restart fail2ban

* добавление адреса в белый список не удаляет его из блокировки. Поэтому, если IP попал в блок, нужно будет его удалить вручную.

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

Действия

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

Остановимся на описании самых используемых действий:

  • iptables — создание простого правила в netfilter с помощью одноименной утилиты;
  • iptables-multiport — использование модуля multiports, позволяющий добавлять диапазоны портов для блокировки;
  • iptables-ipset — использование ipset для придания более лаконичного вида правилам;
  • iptables-allports — блокирует для адреса все порты;
  • firewallcmd-new — создание простого правила в netfilter с помощью firewall-cmd;
  • firewallcmd-ipset — добавляет правила с помощью утилиты firewall-cmd, используя ipset;
  • firewallcmd-rich-rules — создает rich-rules при помощи firewall-cmd.

Подробнее, как создаются правила в netfilter при помощи iptables и firewalld.

Фильтры

Фильтры, в основном, представляют набор регулярных выражений для поиска ключевых слов в log-файлах. Они находятся в каталоге /etc/fail2ban/filter.d.

Для создания и настройки своих фильтров, можно использовать имеющиеся файлы в качестве шпаргалки.

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

В данных примерах блокировка IP-адреса будет происходить на 12 минут после 4-х попыток ввода пароля в течение 8 минут. Эти параметры берутся из настроек [DEFAULT]. Если их нужно переопределить, просто добавляем их при описании правила.

CentOS

[ssh]
enabled = true
port = ssh
filter = sshd
action = firewallcmd-new[name=sshd]
logpath = /var/log/secure

Ubuntu

[ssh]
enabled = true
port = ssh
filter = sshd
action = iptables[name=sshd]
logpath = /var/log/auth.log

Asterisk

[asterisk]
enabled = true
filter = asterisk
action = iptables-allports[name=asterisk, protocol=all]
logpath = /var/log/asterisk/messages

NGINX

NGINX DDoS (req limit)

Данное правило поможет защитить веб-сервер nginx от DDoS-атак. В некоторых сборках, для данного правило может не оказаться готового фильтра, поэтому в данном примере, мы его создадим вручную.

Для начала, необходимо настроить NGINX:

* данная настройка создает зону с интенсивностью запросов в 1 запрос в секунду.

После настраиваем лимит для конкретного виртуального домена в разделе server - location:

server .
location / .
limit_req zone=one burst=5 nodelay;
.

Проверяем конфигурационный файл nginx и перезапускаем сервис:

systemctl reload nginx

В лог-файле (по умолчанию /var/log/nginx/error.log) при превышении лимита подключения мы должны увидеть запись на подобие:

* обратите внимание, что в вашем случае путь до лога может быть другой. Он определяется в конфигурационном файле NGINX.

Теперь можно приступать к настройке fail2ban. Создаем фильтр:

* данный файл может быть уже создан и настроен при установке fail2ban. Если это так, то ничего не меняем и идем дальше.

Создаем правило в fail2ban:

* еще раз обращаю внимание на путь logpath — в вашем случае он может быть другим.

После настройки не забываем перезапустить fail2ban:

systemctl restart fail2ban

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

Просмотр

Получить статистику заблокированных адресов можно следующей командой:

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

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

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

`- action
|- Currently banned: 2
| `- IP list: 31.207.47.55 10.212.245.29

С помощью iptables:

iptables -L -n --line

С помощью firewall-cmd:

firewall-cmd --direct --get-all-rules

Удаление

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

Для удаление адреса из списка вводим:

fail2ban-client set <имя правила> unbanip <IP-адрес>

fail2ban-client set ssh unbanip 31.207.47.55

С помощью iptables:

iptables -D <цепочка правил> -s IP-адрес

iptables -D fail2ban-ssh -s 10.212.245.29

С помощью firewall-cmd:

firewall-cmd --direct --permanent --remove-rule <правило>

firewall-cmd --direct --permanent --remove-rule ipv4 filter f2b-sshd 0 -s 188.134.7.221

Все серверы, подключенные к Интернету, подвержены риску атак вредоносного ПО. Например, если у вас есть программное обеспечение, подключенное к общедоступной сети, злоумышленники могут использовать попытки грубой силы для получения доступа к приложению.

В этой статье объясняется, как установить и настроить Fail2ban на CentOS 8.

Установка Fail2ban на CentOS

Пакет Fail2ban включен в репозитории CentOS 8 по умолчанию. Чтобы установить его, введите следующую команду от имени пользователя root или пользователя с привилегиями sudo :

После завершения установки включите и запустите службу Fail2ban:

Чтобы проверить, запущен ли сервер Fail2ban, введите:

Вот и все. На данный момент у вас есть Fail2Ban, работающий на вашем сервере CentOS.

Конфигурация Fail2ban

Стандартная установка Fail2ban включает два файла конфигурации: /etc/fail2ban/jail.conf и /etc/fail2ban/jail.d/00-firewalld.conf . Эти файлы не следует изменять, так как они могут быть перезаписаны при обновлении пакета.

Fail2ban читает файлы конфигурации в следующем порядке:

  • /etc/fail2ban/jail.conf
  • /etc/fail2ban/jail.d/*.conf
  • /etc/fail2ban/jail.local
  • /etc/fail2ban/jail.d/*.local

Каждый файл .local отменяет настройки из файла .conf .

Создайте файл конфигурации .local из файла jail.conf по умолчанию:

Чтобы начать настройку сервера Fail2ban, jail.local файл jail.local текстовом редакторе :

Файл включает комментарии, описывающие, что делает каждый параметр конфигурации. В этом примере мы изменим основные настройки.

Добавить IP-адреса в белый список

IP-адреса, диапазоны IP-адресов или хосты, которые вы хотите исключить из ignoreip могут быть добавлены в директиву ignoreip . Здесь вы должны добавить IP-адрес вашего локального ПК и всех других машин, которые вы хотите добавить в белый список.

Раскомментируйте строку, начинающуюся с ignoreip и добавьте свои IP-адреса через пробел:

Настройки бана

Значения параметров bantime , findtime и maxretry определяют время findtime и maxretry .

Чтобы навсегда забанить IP, используйте отрицательное число.

Уведомления по электронной почте

%(action_mw)s оскорбительный IP-адрес и отправит электронное письмо с отчетом whois. Если вы хотите включить соответствующие журналы в электронное письмо, установите действие %(action_mwl)s .

Вы также можете настроить адреса электронной почты для отправки и получения:

Fail2ban тюрьмы

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

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

По умолчанию в CentOS 8 тюрьмы не включены. Чтобы включить тюрьму, вам нужно добавить enabled = true после заголовка тюрьмы. В следующем примере показано, как включить тюрьму sshd :

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

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

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

Клиент Fail2ban

Fail2ban поставляется с инструментом командной строки с именем fail2ban-client , который можно использовать для взаимодействия со службой Fail2ban.

Чтобы просмотреть все доступные параметры команды fail2ban-client , вызовите ее с параметром -h :

Этот инструмент можно использовать для блокировки / разблокировки IP-адресов, изменения настроек, перезапуска службы и т. Д. Вот несколько примеров:

Проверить статус тюрьмы:

Выводы

Мы показали вам, как установить и настроить Fail2ban на CentOS 8. Для получения дополнительной информации о настройке Fail2ban посетите официальную документацию .

date

16.12.2019

directory

CentOS, Linux

comments

комментария 3

Fail2ban позволяет блокировать доступ к серверу или запущенным службам на основе анализа логов доступа и подключений. Fail2Ban автоматически может создавать правила файервола для блокировки конкретных IP адресов, если действия с этого IP определяются как подозрительные. Так, Fail2Ban может защитить ваш сервер от перебора паролей по SSH, DDoS атак, попыток эксплуатации эксплоитов, выполнении запрещенных действий.

Любой сервис сервера, порты которого открыты во внешний мир, потенциально уязвим. Порты некоторых сервисов можно закрыть, но так можно поступить не со всеми. Например, если вы хотите, чтобы у вас полноценно работала почтовая SMTP служба, вы не можете отключить ее или заблокировать порт на firewall и время от времени в логах можно наблюдать записи о попытке подбора пароля к учетной записи. Так происходит и с другими сервисами.

Обычно на всех своих серверах, я закрываю SSH доступа с наружи, т.к. подключаюсь к своим серверам со своего статического IP-адреса или через OpenVPN подключение. Но это не всегда возможно. На помощь приходит замена стандартных портов, либо настройка на сервере службы fail2ban. В этом примере мы покажем, как установить и использовать fail2ban в CentOS, однако вы можете использовать эту инструкцию и для других дистрибутивов Linux.

Установка и первичная настройка Fail2Ban в CentOS 8/7

Пакет для установки fail2ban находится в репозитории Epel, подключим его:

После подключения репозитория, можно установить fail2ban через yum или dnf (в CentOS 8):

установка fail2ban в linux centos

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

Использование Fail2Ban для защиты SSH от перебора паролей

Создадим файл и внесем настройки:

И добавим в него содержимое:

Данная конфигурация устанавливает новое время для блокировки IP адресовм для всех служб, устанавливает использование iptables для блокировок и включается защиту для sshd.

Чтобы использовать для фильтрации firewalld, укажите:

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

Чтобы посмотреть статус fail2ban, и проверить список защищаемых службы, выполните команду:

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

fail2ban-client status sshd

В файле jail.conf можно описать общие параметры, которые не будут переопределяться в jail.local.

Измените следующие значения:
bantime = 10m — время на которое будет заблокирован IP
findtime = 10m — время, в течение которого будут подсчитываться неудачные попытки авторизации.
maxretry = 3 — количество попыток до блокировки

Чтобы получать оповещения по электронной почте, вам нужно настроить следующие параметры:
destemail = root@build-centos.info –получатель
sender = root@build-centos.info — отправитель
mta = postfix — SMTP служба, через которую осуществляется отправка

Чтобы настроить блокировку для отдельных сервисов, в файле /etc/fail2ban/jail.local после блока [DEFAULT] создается блок для нужного сервиса, например, как с sshd. Добавим в него некоторые настройки:

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

Логи Fail2Ban

Чтобы проверить журнал fail2ban, выполните команду:

Так же можно проверить логи в реальном времени:

Как видите, fail2ban работает и периодически блокирует или убирает блокировку для IP адресов.

Чтобы проверить, какие IP адреса заблокированы в iptables службой fail2ban, выполните:

iptables - правила для блокировки конкретных IP

Как видите, с открытым наружу ssh, время от времени кто-то пытается подобрать пароль и авторизоваться. Если проверить статистику через какое-то время, видно, что количество заблокированных IP растет.

список заблокированных IP в fail2ban

Защита Apache с помощью Fail2Ban

После изменения конфигурационного файла, выполняем рестарт сервиса и проверяем статус:

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

Настройка связки Fail2Ban и Nginx

Нам нужно ли включить его в конфигурационном файле /etc/fail2ban/jail.local добавив:

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

Защита MySQL с помощью Fail2Ban

Для защиты MySQL нужно добавить отдельный блок в конфигурационный файл jail.local:

Данная настройка защитит вас от перебора паролей для пользователя mysql (это очень частый брутфорс).

mysqld-auth - правило fail2ban для mysql

Правила Fail2Ban для Exim

Чтобы настроить защиту для почтового сервиса exim, внесите следующую конфигурацию:

Таким образом вы можете настроить fail2ban для работы практически со всеми популярными сервисами и ваш сервер станет максимально безопасен.

Белый список IP в Fail2Ban, разблокировка IP-адресов

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

Вы можете добавить определенные IP адреса в исключения fail2ban (белый список). Для этого в конфигурационном файле jail.conf внесите IP в строку:

Добавив свой IP-адрес в исключения, я выполнил несколько атак подобно предыдущей и блокировки не произошло.

Как вы видите, fai2ban довольно просто в настройке, но вполне эффективное средство дополнительной защиты вашего сервера от злоумышленников. Для Windows к сожалению, я не видел бесплатных программ с подобным функционалом (можно попробовать реализовать блокировку IP адресов с помощью PowerShell – см. статью Защита RDP от перебора паролей).


Как защитить свой сервер с помощью Fail2ban на CentOS 8

Все серверы, подключенные к Интернету, подвержены риску атак вредоносного ПО. Например, если у вас есть программное обеспечение, подключенное к общедоступной сети, злоумышленники могут использовать попытки грубой силы для получения доступа к приложению.

В этой статье объясняется, как установить и настроить Fail2ban на CentOS 8.

Установка Fail2ban на CentOS

1. Пакет Fail2ban включен в репозитории CentOS 8 по умолчанию. Чтобы установить его, введите следующую команду от имени пользователя root или пользователя с привилегиями sudo :

2. После завершения установки включите и запустите службу Fail2ban:

3. Чтобы проверить, запущен ли сервер Fail2ban, введите:

Вот и все. На данный момент у вас есть Fail2Ban, работающий на вашем сервере CentOS

Конфигурация Fail2ban

Стандартная установка Fail2ban включает два файла конфигурации, /etc/fail2ban/jail.conf

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

1. Fail2ban читает файлы конфигурации в следующем порядке:

  • /etc/fail2ban/jail.conf
  • /etc/fail2ban/jail.d/*.conf
  • /etc/fail2ban/jail.local
  • /etc/fail2ban/jail.d/*.local

Каждый .local файл отменяет настройки из .conf файла.

Самый простой способ настроить Fail2ban это скопировать jail.conf в jail.local и изменить .local файл. Более опытные пользователи могут создать .local файл конфигурации с нуля. .local Файл не должен включать в себя все параметры из соответствующего .conf файла, только те , которые вы хотите заменить.

2. Создайте .local файл конфигурации из файла по умолчанию jail.conf :

3. Чтобы начать настройку сервера Fail2ban, откройте jail.local файл в текстовом редакторе :

Файл включает комментарии, описывающие, что делает каждый параметр конфигурации. В этом примере мы изменим основные настройки.

Добавить IP-адреса в белый список

В ignoreip директиву можно добавить IP-адреса, диапазоны IP-адресов или хосты, которые вы хотите исключить из запрета . Здесь вы должны добавить IP-адрес вашего локального ПК и всех других машин, которые вы хотите добавить в белый список.

Раскомментируйте строку, начинающуюся с, ignoreip и добавьте свои IP-адреса через пробел:

Настройки бана

Значения bantime , findtime и maxretry варианты определения времени запрета и условия запрета.

Чтобы навсегда забанить IP, используйте отрицательное число.

maxretry количество отказов до блокировки IP-адреса. По умолчанию установлено значение пять, что должно подойти большинству пользователей.

Уведомления по электронной почте

%(action_mw)s забанит оскорбительный IP-адрес и отправит электронное письмо с отчетом whois. Если вы хотите включить соответствующие журналы в электронное письмо, установите для действия значение %(action_mwl)s .

Вы также можете настроить адреса электронной почты для отправки и получения:

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

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

По умолчанию в CentOS 8 тюрьмы не включены. Чтобы включить джейл, нужно добавить enabled = true после заголовка джейла. В следующем примере показано, как включить sshd тюрьму:

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

Фильтры расположены в /etc/fail2ban/filter.d каталоге, хранящемся в файле с тем же именем, что и jail.

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

Клиент Fail2ban

Fail2ban поставляется с инструментом командной строки с именем, fail2ban-client который вы можете использовать для взаимодействия со службой Fail2ban.

Чтобы просмотреть все доступные параметры fail2ban-client команды, вызовите ее с -h параметром:

Этот инструмент можно использовать для блокировки / разблокировки IP-адресов, изменения настроек, перезапуска службы и т. Д. Вот несколько примеров:

  • Проверить статус тюрьмы:
  • Разбанить IP:
  • Запретить IP:

Вывод

Мы показали вам, как установить и настроить Fail2ban на CentOS 8. Для получения дополнительной информации о настройке Fail2ban посетите официальную документацию .

Читайте также: