Fail2ban server грузит процессор

Обновлено: 07.07.2024

Различные сервисы на вашем сервере доступные из сети (SSH, Apache, Nginx, Asterisk) зачастую подвержены брут-форс атакам. Самая распространенная проблема это подбор пароля от SSH логина администратора. Для защиты от таких атак идеально подойдет Fail2ban. Fail2ban умеет просматривать логии различных сервисов на сервере и на их основе менять правила фаервола. Например заблокировать IP адрес злодея в iptables.

В данной инструкции мы рассмотрим, как установить и настроить Fail2ban на сервере с CentOS или Ubuntu.

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

Т.к. данный сервис не доступен в официальном репозитарии CentOS, то сначала установим пакеты EPEL:

И уже теперь установим сам Fail2ban:

Установка на Ubuntu 16

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

После чего устанавливаем утилиту:

Начальная настройка

Настройка будет одинаковая для всех Linux дистрибутивов. Fail2ban хранит свои конфигурационные файлы в папке

В ней вы можете найти файл jail.conf который содержит настройки по умолчанию. Обращаем внимание, что данный файл может перезаписываться при обновлении пакетов. Поэтому для хранения ваших собственных настроен надо создать файл jail.local . Для этого выполните команду:

Также вы можете создавать файлы с индивидуальными настройками в папке /etc/fail2ban/jail.d/ . Подобнее мы рассмотрим это далее. Настройки из этих файлов будут подтягивать и заменять указанные в jail.conf в ходе работы Fail2ban. Настройки применяются из файлов в следующем порядке:

  1. /etc/fail2ban/jail.conf
  2. /etc/fail2ban/jail.d/*.conf, - любые файлы с расширением conf. Применяются в алфавитном порядке.
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local, - любые файлы с расширением local. Применяются в алфавитном порядке.

Все файлы могут содержать секцию [DEFAULT], содержимое которой будет применяться в первую очередь. Также в них могут содержаться секции для отдельных сервисов, так называемые «jails».

Давайте сначала рассмотрим настройки по умолчанию, а затем сделаем собственные.

Если открыть файл jail.conf, то в нем в разделе [DEFAULT] находятся следующие основные параметры:

ignoreip = 127.0.0.1/8

Трафик с данных IP адресов не будет подвергаться анализу, игнорироваться при проведении проверки. Своего рода «белые список».

bantime = 600

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

findtime = 600

Указывается в секундах. Устанавливает период времени в течение которого подсчитывается количество срабатываний правил, после которого надо применять фильтр (бан). Работает в паре со следующим параметром «maxretry». Значения по умолчанию означают что если правило сработает 3 раза за 600 секунд, то IP адрес будет добавлен в бан.

maxretry = 3

Количество попыток. См. пояснение к параметру «findtime».

destemail = root@localhost

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

sendername = Fail2Ban

Работает в паре с «destemail». Определяет кто будет указан в качестве отправителя email нотификаций.

mta = sendmail

Работает в паре с «destemail». Определяет через какой сервис будут отправляться email.

action = $(action_)s Данный параметр определяем какой действие необходимо предпринять при срабатывании правила. Список возможных значений находится выше в файле jail.conf. Рассмотрим наиболее популярные:

action_ - простое изменение параметров фаервола.

action_mw – помимо настройки фаервола будет отправлена email нотификация.

action_mwl - помимо настройки фаервола будет отправлена email нотификация с примером записи из лога.

В случае использования последних двух вариантов не забудьте сделать необходимые настройки email нотификации (см. выше).

Настройки для отдельных сервисов

После раздела [DEFAULT] идут индивидуальные настройки для каждого сервиса. Обычно они включают в себя параметр port, которые необходимо блокировать и logpath – логии которые необходимо анализировать на предмет атаки. Например, для SSH «jail» уже включен по умолчанию в /etc/fail2ban/jail.local и имеет следующие настройки:

В данном примере ssh это предопределенная переменная для стандартного SSH порта. А %(sshd_log)s использует значение, которое определяется в других стандартных настройках Fail2ban. Параметр filter определяет является ли строка в логах индикатором об ошибочной авторизации или нет. По сути это отсылка к регулярным выражениям, которые находятся в файлах .conf в папке /etc/fail2ban/filter.d. Правила формирования регулярных выражений мы не будем рассматривать, т.к. они достаточно сложные.

По умолчанию «jail» для отдельных сервисов выключены. Чтобы включить необходимо в jail.local в разделе сервиса добавить параметр:

Давайте сделаем это для SSH. Раздел sshd в /etc/fail2ban/jail.local будет выглядеть следующим образом:

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

Проверка и мониторинг работы

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

В случае проблем, логи можно посмотреть следующим образом:

Чтобы увидеть статус всех «jail» или только из них можно воспользоваться следующими командами:

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

Тестирование защиты SSH

Чтобы убедиться что сделанные нами настройки fail2ban верны. Можно эмулировать атаку. Для этого попробуйте подключиться к серверу под защитой Fail2ban с другого сервер / устройства по SSH и ввести неверный пароль от учетной записи. Повторите эти действия несколько раз.

Важно! Не рекомендуем делать это на устройстве с которого вы в данный момент конфигурируете сервер, т.к. в случае успеха ваша текущее соединение будет сброшено.

В случае верных настроек, когда блокировка fail2ban сработает, при попытке подключения вам будет показано предупреждение Permission denied или отказано в доступе к серверу.

На сервере с fail2ban в текущих настройках Firewall вы также найдете строку с описанием блокировки:

Вторая снизу строка в данном примере означает что ваш указанный IP адрес был заблокирован.

Как просмотреть список заблокированных IP

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

Чтобы увидеть список активных jails введите:

Заблокированные IP адреса будут указаны в следующем виде:

Также как указывалось выше заблокированные IP можно найти в данных iptables командой:

Как разблокировать IP адрес

Для того чтобы разблокировать ( удалить / достать из бана) IP адрес, необходимо ввести команду:

Описывая 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

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

Настроим наш nginx сервер для победы над спам ботами --->>

Установка CFS (ConfigServer Firewall)

Если есть другие фаервольные скрипты, например UFW, то нужно их остановить. Правила в iptables удалятся автоматически.

Фаервол теперь установлен и теперь проверим все ли требуемы модули iptable доступны.

Fail2ban будет работать, если при проверки везде OK.

Установка fail2ban

1. Устанавливаем модуль на друпал сайт:

Включаем syslog модуль.

2. Редактируем /etc/fail2ban/jail.conf, добавляем в конец файла:

3. Создаем фильтр /etc/fail2ban/filter.d/drupal-fail2ban.conf со следующим содержимым:

[ Definition ]
failregex = \ | user\ |< HOST > \ | . * \ | Login attempt failed ( .+ ) \.$
ignoreregex =

4. Создаем фильтр /etc/fail2ban/action.d/csf-ip-deny.conf со следующим содержимым:

[ Definition ]
actionstart =
actionstop =
actioncheck =
actionban = csf -d < ip > Added by Fail2Ban for < name >
actionunban = csf -dr < ip >

[ Init ] name = default

Останавливаем сервер:
/ etc / init.d / nginx stop

Запускаем сервер:
/ etc / init.d / nginx start

Смотрим работу командой:
tail -f / var / log / fail2ban. log

должно быть примерно так:

2014 - 11 - 24 16 :02: 22 , 881 fail2ban.actions: WARNING [ drupal-fail2ban ] 110.85.100.178 already banned

2014 - 11 - 24 16 :02: 25 , 884 fail2ban.actions: WARNING [ drupal-fail2ban ] 110.85.100.178 already banned

2014 - 11 - 24 16 : 11 :01, 528 fail2ban.actions: WARNING [ drupal-fail2ban ] 91.200.12.41 already banned

2014 - 11 - 24 16 : 12 : 10 , 612 fail2ban.actions: WARNING [ ssh ] Ban 178.254.22.90

2014 - 11 - 24 16 : 22 : 11 , 384 fail2ban.actions: WARNING [ ssh ] Unban 178.254.22.90

наконец то стало легче дышать, скорость сайта возросла в 10-15 раз, боты прибиты, переходить на более дорогой тариф не надо!

Комментарии

Это интересно. А как он гуглояндексодругих ботов выделяет?

на подступе, это тот же фаервол.

см. фильтры в папке /etc/fail2ban/filter.d/

Когда-то, года 4 назад, я в рамках патруля предлагал сделать свою сеть "вредных" ip.


Когда-то, года 4 назад, я в рамках патруля предлагал сделать свою сеть "вредных" ip.

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

думаю, они не сделали, т.к. боты - это нагрузка на сервер, а нагрузка - это деньги, это и послужило причиной ухода с патруля.
Конечно не сделали. Как минимум, я перестал в патруле работать.
Единственное, что было, это ограничение по User-Agent в конфиге nginx

Ваша финансовая помощь дает нам возможность оплачивать хостинг и поддерживать стабильную работу сайта. Благодарим за поддержку!

Трекер

Проблема с почтой на мультисайтинге.

Встречайте Backdrop CMS - форк друпала.

Сделать загрузку изображений как в 7м друпале

Collapse text закрытие предыдущего после открытия следующего

Drupal всплывающее окно при уходе с сайта

CKEditor 5 добавили как экспериментальный модуль в Drupal 9.3

Добавили вкладку «Права доступа» после «Управления отображением» в Drupal 9.3

Кто нибудь использует Conditional Fields совместно с Paragraphs?

Закрасить Ячейку таблицы в tableselect ?

Карта от Google и pagespeed.

Новые материалы

Сделать загрузку изображений как в 7м друпале

Collapse text закрытие предыдущего после открытия следующего

Drupal всплывающее окно при уходе с сайта

Кто нибудь использует Conditional Fields совместно с Paragraphs?

Добавили вкладку «Права доступа» после «Управления отображением» в Drupal 9.3

CKEditor 5 добавили как экспериментальный модуль в Drupal 9.3

Закрасить Ячейку таблицы в tableselect ?

Ubercart изменить формат текста о завершении заказа

Как увеличить длину текстового поля, если в БД уже есть данные

Проблема с почтой на мультисайтинге.

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Можно написать своё решение на Shell-e, но зачем парится если уже есть готовое - fail2ban. fail2ban анализирует системные журналы различных сервисов и при наличии в них записей определённого содержания может выполнять некоторые действия, например бан ИП в брандмауэре.

fail2ban поддерживает такие сервисы как sshd, apache, qmail, proftpd, sasl, asterisk, etc и способен выполнять действия iptables, tcp-wrapper, shorewall, mail notifications, etc - этот список может быть легко расширен.

Процесс установки расписывать особого смысла нет ибо он хорошо расписан на оф. странице MANUAL 0 8 - Fail2ban, разве только не помешает пояснить некоторые моменты конфигурации.

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

ВНИМАНИЕ! Параметр ignoreip не рекомендуется оставлять со значением по умолчанию 127.0.0.1/8 , в многопользовательских системах это может создать очевидную угрозу — если злоумышленник хотя–бы к одному shell–аккаунту получит доступ, то он заимеет возможность запустить прямо с этого–же сервера bruteforce–программу для атаки на пользователя root или остальных пользователей системы. Желательно указать туда реальный ИП сервера, на котором стоит fail2ban. В директиве filter разрешено использовать только один фильтр!

Опция findtime — определяет продолжительность времени в секундах, за которое событие должно будет повториться определённое количество раз maxretry , после чего действие (бан) будет выполнено. Если параметр findtime не определён, то по умолчанию будет установлено равное 600 (10 мин.). Другими словами, если при maxretry равным 5, bruteforce–р проверит 4 пароля, затем выждет 10 минут, а потом проверит ещё 4 пароля, затем повторит снова и снова, то в таком случае его IP не будет забанен, а если в течении findtime превысит maxretry , то попадёт в бан. Значения по умолчанию лучше изменить имхо обычно некоторые "грамотные" ботнеты сконфигурированы с учетом значений по умолчанию для различных fail2ban-ов.

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

В приведённом выше примере конфигурации мы отключили (enabled = false) "изолятор" (Jail) [ssh-iptables] и добавили активный [apache-iptables] , который по умолчанию отсутствует в /etc/fail2ban/jail.conf .

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

Файлы (.conf) фильтров/правил расположены в каталоге /etc/fail2ban/filter.d/ , а файлы (.conf) действий в /etc/fail2ban/action.d/ . В нашем случае мы использовали фильтр /etc/fail2ban/filter.d/apache-auth.conf и действие /etc/fail2ban/action.d/iptables.conf . В некоторых версиях/репозиториях фильтры могут различаться и быть неработоспособными, например в нашем случае фильтр /etc/fail2ban/filter.d/apache-auth.conf вовсе не срабатывал на наличие в лог. файле Апача записей типа " . user Admin not found . " и имел такую кондицию:

Не работает из-за " \s*$ " того, что по такому правилу сразу после " user .* not found " предполагается наличие только множественных пробелов с завершением строки, а в реальности после определения ещё идёт и " : /administrator/ ". Работоспособной будет такая дефиниция фильтра:

Более того у этого 66.249.78.33 ИП принадлежащего GOOGLE, судя по запросам, далеко не мирные цели, пример обращения к нашему сайту:

Видим, что ИП 66.249.78.33 запросил аргумент (ARGS) "id" с его значением "25:-----unix", а из "Реальный URL" это выглядит так " id=25:architecture-and-standards-for-the-unix-operating-system " - т.е. до слова "unix" в реальном URL присутствует 5 символов "-". GOOGLE-бот изуродовал аргументы URL-а и попытался его запросить, что меня не сильно удивляет - GOOGLE довольно агрессивный и изобретательный бот, который сканирует такие URL-ы, которых на сайте в реальности не существует, например /ru/|/fr/|/en/ и т.п., чем иногда может хорошо подвесить сайт. Поэтому на его запросы без HTTP заголовка "Accept", думаю, можно "забить", да и как уже упоминалось в панели гугль для веб-мастера жалоб на проблемы сканирования не было обнаружено.

При желании можно запилить разрешающее ModSecurity правило для User-Agent, но нужно иметь ввиду, что User-Agent легко подделывается!

Для ModSecurity можно создать отдельный изолятор и фильтр соответственно, например /etc/fail2ban/filter.d/apache-modsec.local .

Исключить ИП адреса нужных ботов можно по CIDR маске в ignoreip :

FEATURE Split config - Fail2ban Любые изменения вносимые пользователем рекомендуется вносить в файлы имя_файла.local, а не в имя_файла.conf - это касается всех конфигурационных файлов, в т.ч. и файлов фильтров из /etc/fail2ban/filter.d/. Это делается с целью сохранить изменения после обновления!

Настройка действия для iptables довольно проста, в квадратных скобках [. ] нужно указать параметры для команды/правила iptables. " action = iptables[name=HTTP, port=http, protocol=tcp] " - "name=CHAIN" имя цепочки (будет выглядеть "iptables -L|grep -i chain" как "fail2ban-CHAIN"), "port=http" имя или номер порта, "protocol=tcp" имя протокола соответственно. Основной шаблон формирования правила для iptables расположен в /etc/fail2ban/action.d/iptables.conf .

Большой плюс что фильтры/правила можно проверить:

Также можно выяснить или изменить текущий статус изолятора:

Для ручной разблокировки IP адреса используйте " fail2ban-client set <JAIL> unbanip <IP> ", например " fail2ban-client set apache-iptables unbanip 178.127.82.25 ", подробнее в " man fail2ban-client ".

Известные проблемы с Fail2ban

Fail2ban на реагирует на событие - если показалось что правило не срабатывает, но его проверка с помощью " fail2ban-regex . . " проходит успешно, тогда выполните " fail2ban-client reload ", а если не помогло, то стоит проверить лог файлы и заносятся ли туда события. При использовании "Piped logging program to rotate Apache logs" возможны временные задержки в регистрации событий.

После ротации Fail2ban начинает писать в SYSLOG, а не как установлено в /var/log/fail2ban.log. Это мелкая ошибка в версии 0.8.10, исправлено в версии v0.8.10.dev. Приставка .dev говорит, что эта версия заведомо может быть нестабильной.

Мы также увеличили размер лог.файла до 1M ибо 30k это уж слишком маловато будет. Рекомендуется не обновляться до версий .dev или Pre-release , а использовать только Latest release ! Releases · fail2ban/fail2ban

Чем в итоге нам полезен Fail2ban

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

Кроме массы "добрых" людей по сети ещё бродит оч. много различных ботнетов, которые щупают стандартные каталоги admin|administrator|phpmyadmin etc. нащупав которые начинают ломать до морковкина заговенья. Кроме попыток "брутфорса" базовой HTTP авторизации они могут предпринимать попытки взлома/спама на другие части сайта, а когда они получают "отлуп" с последующей отправкой в "бан-ю" iptales-a, то на протяжении времени бана остальные части им будут недоступны, а значит мы сэкономим на количестве подключений к сокету, что в общей сложности добавит нашему "серванту" стабильности и безопасности.

Бот подолбил базовую HTTP авторизацию на сервере с " [Sun Oct 13 17:38:31 2013] " до " [Mon Oct 14 19:29:17 2013] ", а потом пропал с концами - видимо боту как-то дошло, что гиблое это дело и здесь он может обломать себе зубы :)

Как ранее упоминалось, у медали всегда две стороны - по идее легальные поисковые боты (GOOGLE/Yandex/MSN etc) недолжны обращаться к сайту методом POST и в запросе должны отправлять HTTP заголовок "Accept" и "User-Agent", но на практике бывает всё иначе, а поэтому иногда они могут попадать в бан под Fail2ban или ModSecurity - ИП ботов можно добавить в исключения. В результате возможно временное снижение ПР (ака "Page Rank"), позиций в выдаче и т.д., но, нужно выбирать - либо стабильность и безопасность сервера либо ПР (ака "Page Rank") и позиции в результатах поиска.

Fail2ban можно заточить/допилить почти под любые запросы/сервисы. Все описанные здесь примеры приведены на примере собственного опыта, часть которых успешно используются на данном сервере - поэтому "непидрулите" к нашему сайту без HTTP заголовка "Accept" и "User-Agent", не пытайтесь "брутфорсить" базовую HTTP авторизацию и ведите себя хорошо, а иначе будете добровольно-принудительно, как минимум на пару часов, сосланы в "баню"!;)

Рекомендуемый контент

Вы не любите рекламу!? Напрасно!:) На нашем сайте она вовсе ненавязчивая, а потому для нашего сайта можете полностью отключить AdBlock (uBlock/uBlock Origin/NoScript) и прочие блокировщики рекламы! AdBlock/uBlock может препятствовать нормальной работе системы поиска по сайту, отображению рекомендуемого контента и прочих сервисов Google. Рекомендуем полностью отключить блокировщик рекламы и скриптов, а также разрешить фреймы (aka iframe).

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