Материалы для WEB разработки на LAMP
Fail2Ban 0.9.x в Ubuntu 16.04

В статье описаны особенности настройки новой версии программы Fail2Ban 0.9.x в Ubuntu 16.04. Приведена структура конфигурационных файлов программы, показаны примеры включения и проверки работы фильтров для ssh, apache, mysql. Продемонстрирована индивидуальная настройка регулярных выражений правил и их тестирование. Представлен скринкаст Fail2Ban 0.9.x в Ubuntu 16.04

 

Утилита Linux Fail2Ban

Fail2Ban является удачной утилитой для защиты сервера и его приложений от атак вида подбора/перебора пароля - брутфорса (brute force). Основной принцип работы Fail2ban основан на том, что программа отслеживает превышение количества заданного числа неудачных попыток ввода пароля подряд в течении установленного интервала времени. Такое отслеживание утилита выполняет путем чтения файлов журналов(логов) тех программ, на мониторинг которых она настроена. Fail2Ban просматривает логи и ищет в них строки удовлетворяющие паттерну регулярного выражения из правила фильтра для защищаемой программы. Эти паттерны описывают строки лога, которые отображают неудачные попытки авторизации. Для каждой защищаемой программы формат таких строк свой. При нахождении записей о неудачных попытках авторизации в логах отслеживаемой программы Fail2Ban, в соответствии со своими настройками числа неудачных попыток, выполняет бан IP, с которого выполнялись эти попытки. Технически, для блокирования IP такого клиента Fail2ban использует системный фаервол firewall Linux - Netfilter. Бан выполняется путем задания цепочки правил для Netfilter, направленных на временное блокирование IP клиента.

В Linux существует так же утилита командной строки - iptables, которая является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) Netfilter. Иногда, в различных описаниях, под словом iptables имеется в виду межсетевой экран Netfilter, хотя в действительности это разные утилиты.

Fail2Ban очень мощная утилита и поставляется сразу с уже настроенными фильтрами для защиты достаточно большого числа программ, список которых постоянно расширяется. Во многих случаях бывает достаточно только включить правило для нужной вам программы и Fail2Ban начнет защищать подключения и авторизации для нее. Однако, иногда может потребоваться более детальная настройка или написание собственных фильтров и правил, а так же тестирование и проверка их работы, что и будет описано ниже. Также, учитывая то, что Fail2Ban выполняет постоянный мониторинг логов отслеживаемых программ, наверное, не следует задействовать излишне много включенных фильтров, что бы не нагружать систему, особенно, когда зашита программы можно сделать и ее собственными средствами. Иными словами не стремитесь включить все фильтры, а делайте это только там где это действительно необходимо и где вы вынуждены предоставлять сервис или службу публично, оставив открытый для нее стандартный порт. Если же вы можете закрыть порт службы для подключений из вне, то это будет лучше чем оставить его открытым, но защищать при этом программой Fail2Ban. Например, если вам не нужны внешние прямые подключения к MySQL т.к. вы работаете с ним при помощи phpmyadmin, то лучше просто закрыть во внешнюю сеть MySQL порт 3306, чем включать правило mysqld в Fail2Ban. Закрытие/открытие портов на выбранных сетевых интерфейсах (сетевых подключениях) удобно выполнять при помощи утилиты arno-iptables-firewall, которая является надстройкой над Linux межсетевым экраном Netfilter, проста в использовании и присутствует в репозиториях Ubuntu.

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

Скринкаст Fail2Ban 0.9.x в Ubuntu 16.04 

 

Структура конфигурационных файлов Fail2Ban

Конфигурационные файлы программы Fail2Ban для Ubuntu расположены в директории /etc/fail2ban/ и имеют внутри этого каталога следующую структуру:

|-- action.d
|   `-- *.conf
|   `-- ...
|-- fail2ban.d
|-- filter.d
|   |-- ignorecommands
|   `-- *.conf
|   `-- ...
|-- jail.d
|   `-- defaults-debian.conf
|-- fail2ban.conf
|-- jail.conf
|-- paths-common.conf
|-- paths-debian.conf

Где:

  • /etc/fail2ban/action.d/ директория содержит файлы вида *.conf, которые содержат настройки действий программы Fail2Ban при наступлении тех или иных событий.
  • /etc/fail2ban/fail2ban.d/ директория по умолчанию пустая, может содержать пользовательские файлы конфигурации для Fail2Ban
  • /etc/fail2ban/filter.d/ директория содержит файлы вида *.conf в которых описаны регулярные выражения фильтров для jails. Если вы включили правило и при тестировании его регулярного выражения фильтра вы ведите, что оно не срабатывает, то в этой директории нужно искать соответствующий правилу фильтр и править в нем регулярное выражение.
  • /etc/fail2ban/jail.d/ директория содержит файлы вида *.conf которые создаются пользователем и в которых выполняется включение правил/jails и задание для них параметров. По умолчанию в этой директории после установки Fail2Ban находиться только один файл defaults-debian.conf в котором активирован SSH правило/jail. Это значит, что по умолчанию в Ubuntu 16.04 в Fail2Ban сразу включена защита для SSH.
  • /etc/fail2ban/fail2ban.conf файл содержит настройки самой программы Fail2Ban (но не настройки правил/jails) и его, как правило, не приходиться корректировать.
  • /etc/fail2ban/jail.conf файл, в котором заданы настройки правил/jails по умолчанию. Этот файл содержит все правила и параметры для них по умолчанию. В новой версии Fail2Ban 0.9.x предлагается этот файл не редактировать, а вместо этого использовать кастомные конфиги, которые помещенные в директорию /etc/fail2ban/jail.d/ (подробно см. ниже).
  • /etc/fail2ban/paths-common.conf файл с настройками путей для правил/jails, применяется первым.
  • /etc/fail2ban/paths-debian.conf еще один файл с настройками путей для правил/jails, применяется вторым и при пересечении переопределяет настройки из paths-common.conf

 

Особенности конфигурации Fail2Ban 0.9.x

Использование пользовательских конфигов

В Ubuntu 16.04 утилита Fail2Ban уже идет в версии 0.9.x, которая имеет несколько другой подход в настройке и организации конфигурационных файлов чем это было в версии Fail2Ban 0.8.x и ниже, что создает в начале некоторые трудности, если не иметь общего понимания применения конфигурации jails. В Fail2Ban v0.9.x особенности настройки конфигурации по сравнению с предыдущими версиями состоят в том, что если в предыдущих версиях программы активации правил (jails) выполнялись все в одном файле /etc/fail2ban/jail.conf, то в новой версии 0.9.x предлагается этот файл не изменять и использовать как default с конфигурацией по умолчанию, а для включения и настройки своих пользовательских правил/jails использовать отдельные кастомные файлы вида *.conf, которые нужно размешать в директории /etc/fail2ban/jail.d/, предназначенной для хранения именно индивидуальных пользовательских настроек программы. На первый взгляд это может показаться неудобно по сравнению с использованием одного общего конфига /etc/fail2ban/jail.conf. Однако, на деле, при индивидуальной настройке программы это гораздо удобнее т.к. вам нужно будет всего лишь создать свой файл и вставить в него несколько строчек. Смысл в том, что все параметры, указанные в ваших кастомных файлах из директории /etc/fail2ban/jail.d/ сольются с глобальными настройками из /etc/fail2ban/jail.conf, которые в случае дублирования будут переопределены директивами из ваших конфигов. Такой подход позволяет не записывать в ваши кастомные конфиги директивы, уже указанные в /etc/fail2ban/jail.conf, если вас они устраивают, что и бывает в большинстве случаев. Так, например, что бы включить защиту для ssh с параметрами указанными по умолчанию из /etc/fail2ban/jail.conf вам нужно будет в свой кастомный конфиг записать всего лишь две строки вида как в примере ниже, которые включат jail для SSH с параметрами уже заданными в /etc/fail2ban/jail.conf.

# Активация SSH jail
[sshd]
enabled = true

Если же вы захотите переопределить какой либо из дефолтовых параметров для правила(jail), например, bantimemaxretry и port, то тогда допишите эти параметры с их новыми значениями в своем кастомном конфиге как показано в примере ниже для [sshd] jail:

# Активация SSH jail
# с индивидуальными значениями
[sshd]
enabled = true
bantime = 3600
maxretry = 3
# нестандартный порт для SHH
port = 222

В директории /etc/fail2ban/jail.d/ вы можете также создавать не один, а несколько кастомных файлов конфигов вида your-file-name.conf, если, например, захотите организовать свои правила/jails раздельно по группам, записав каждую группу в отдельный файл. Все конфигурационные файлы вида *.conf  из директории /etc/fail2ban/jail.d/ будут прочитаны программой и применены. Таким образом вы можете включить и настроить только нужные вам jails и удобно их организовать и распределить по своим файлам конфигурации в директории /etc/fail2ban/jail.d/.

Внимание! Для [sshd] jail есть нюанс настройки из-за того, что SSH сервер имеет свой функционал ограничения количества (по умолчанию 5) максимальных ошибочных попыток соединения, после превышения которых SSH сервер сам разрывает соединение. Поэтому для того что бы fail2ban успевал срабатывать и блокировал ip в [sshd] значение maxretry должно быть меньше такого же значения для SHH сервера. Если все брать по умолчанию, то значит для [sshd] jail maxretry должно быть менее 5 (4 и меньше). Тогда fai2ban сработает раньше чем произойдет разрыв соединения по инициативе SSH сервера и тогда ip будет успешно забанен. Если же для [sshd] jail maxretry задать как 5 или больше, что будет равно или больше чем у SSH сервера по умолчанию, то fai2ban так и не будет успевать забанить ip, потому что SSH сервер будет разрывать соединение раньше. Учитывая все сказанное и то, что по умолчанию fai2ban имеет maxretry = 5 глобально для всех jails, нужно в вашем кастомном конфиге для [sshd] jail всегда явным образом задавать maxretry меньше 5.
Так же, если вы задаете нестандартный порт для службы и указываете его в вашем jail, например как в примере выше, где для [sshd] jail задан port = 222, то в таких случаях убедитесь, что ваша служба (в примере SSH сервер) действительно работают на этом порту. Иначе если вы оставите SSH на его стандартном порту 22, а в [sshd] jail укажите другой порт, то блокировка не произойдет, т.к. fail2ban будет банить ip на указанном вами в [sshd] порту, а ваш SSH будет работать на другом. Соответственно эффекта не будет. Поэтому всегда перезапускайте вашу службу/демон после изменения его настроек.

 

Использование отдельных конфигов для значений logpath

Второй особенностью конфигурации правил/jails в новой версии Fail2Ban 0.9.x является то, что указание путей к лог файлам защищаемой программы для включаемого jail выполняется не как раньше, когда напрямую указывали путь, а посредством строк подстановки, для которых задание значений путей вынесены в отдельные файлы. Так если раньше для Fail2Ban 0.8.x путь к лог файлу в jail SSH выглядел как:

# Пример logpath в Fail2Ban 0.8.x
[ssh]
enabled  = true
logpath  = /var/log/auth.log

То теперь в версии Fail2Ban 0.9.x путь к лог файлу для правила/jail SSH выглядит в файле /etc/fail2ban/jail.conf как:

# Пример logpath в Fail2Ban 0.9.x
[sshd]
logpath = %(sshd_log)s

где выражение %(sshd_log)s означает подстановку пути из переменной sshd_log, в которой храниться полный путь, записанный/присвоенный в нее в отдельном файле конфигурации - paths-common.conf или paths-debian.conf.

Значение путей для строк подстановки (например для SSH %(sshd_log)s) теперь задается в отдельных файлах, куда были вынесены все настройки путей к логам защищаемых программ. Технически, вы и сейчас можете, как и раньше, указать абсолютный путь к логу программы напрямую в файле /etc/fail2ban/jail.conf или в вашем кастомном конфиге из директории /etc/fail2ban/jail.d/. Но для удобства и универсальности задание путей теперь предлагается выносить в отдельные файлы, а в самом правиле/jail уже указывать для параметра logpath не абсолютный путь, а строку подстановки. Подключение этих дополнительных файлов с путями выполняется в файле /etc/fail2ban/jail.conf в секции [INCLUDES]. В Ubuntu 16.04 по умолчанию там подключается файл paths-debian.conf, в котором так же в начале выполняется подключение еще одного файла - paths-common.conf и предусмотрено подключение в конце файла - paths-overrides.local. Таким образом, по умолчанию для Fail2Ban 0.9.x в Ubuntu 16.04 пути к лог файлам могут быть указаны в следующих файлах из директории /etc/fail2ban/ - paths-common.conf, paths-debian.conf и paths-overrides.local. Подключаются и обрабатываются эти фалы в этом же порядке как они были приведены здесь. Такой подход позволяет не редактировать основной файл /etc/fail2ban/jail.conf для указания нужных путей для jails, а использовать для этого отдельные файлы, что намного удобнее, т.к. позволяет установщику программы уже при ее инсталляции создать эти файлы и указать в них пути свойственные для конкретной версии Linux. Из этого следует главный вывод, что при установке Fail2Ban 0.9.x в Ubuntu пути уже будут автоматически сконфигурированы и прописаны, поэтому, в большинстве случаев, их не приходиться править. Достаточно бывает только включить нужные вам jails в ваших кастомных конфигах, не задумываясь при этом об задании путей к лог файлам. Однако, понимание того как организовано задание путей для параметра logpath в новой версии Fail2Ban 0.9.x позволит вам разобраться с настройками в тех случаях, когда потребуется выполнить нестандартную настройку путей не предусмотренную заранее (см. пример настройки mysqld ниже).

 

Установка, настройка Fail2Ban 0.9.x в Ubuntu

Этот пакет есть в репозитории Ubuntu и для установки Fail2Ban 0.9.x нужно выполнить в терминале команду:

sudo apt-get install fail2ban

 

Основные параметры jails:

ignoreip - IP адреса, которые не должны быть заблокированы. Можно задать список IP-адресов раздельных пробелами, маску подсети, или имя DNS-сервера.
bantime - время блокировки(бана) в секундах, по истечении которого IP-адрес удаляется из списка заблокированных.
maxretry - количество подозрительных совпадений, после которых применяется правило. Для [ssh] - это число неудавшихся попыток логина, после которых происходит блокировка.
enabled - значение true указывает? что данный jail активен, false выключает действие правила.
port - указывает на каком порту или портах запущен целевой сервис. Стандартный порт SSH-сервера - 22, или его буквенное наименование - ssh.
filter - имя фильтра с регулярными выражениями, по которым идет поиск подозрительных совпадений в журналах защищаемой программы. Фильтру sshd соответствует файл /etc/fail2ban/filter.d/sshd.conf. Этот параметр в большинстве случаев формируется для имеющихся в Fail2Ban jails автоматически, настройки чего вы увидите в файле /etc/fail2ban/jail.conf, поэтому явно его задавать нужно если вы, допустим, настраиваете свой фильтр.
logpath - путь к log файлу журнала защищаемой программы, который программа Fail2ban будет читать и обрабатывать с помощью заданного для правила фильтра. В Fail2Ban 0.9.x пути задаются через подстановку переменных, значения для которых задаются в отдельных файлах (см. выше структуру конфигурации)

 

Для активации нужных вам правил/jails вам необходимо записать их в ваш пользовательский конфиг, который вы можете создать в директории /etc/fail2ban/jail.d/, или вы можете использовать уже сгенерированный при установке программы предлагаемый пользовательский конфиг /etc/fail2ban/jail.d/defaults-debian.conf, который можно открыть для редактирования в редакторе nano набрав в терминале Ubuntu команду:

sudo nano /etc/fail2ban/jail.d/defaults-debian.conf

По умолчанию в этом файле /etc/fail2ban/jail.d/defaults-debian.conf уже будет активирован один jail для SSH строками кода:

# jail включенный в Ubuntu по умолчанию
[sshd]
enabled = true

 

Для добавления, включения и настройки нужных вам правил допишите в этот файл (/etc/fail2ban/jail.d/defaults-debian.conf) необходимые вам jail с нужными параметрами. При активации ваших правил дописывайте в них только те параметры из приведенных выше для jails, которые вы хотите переопределить по отношению к указанным в файле конфигурации /etc/fail2ban/jail.conf их значениям по умолчанию. Сама по себе активация/включение jails выполняется через параметр: enabled = true. Для удобства, откройте на просмотр основной файл /etc/fail2ban/jail.conf, который содержит все предусмотренные в Fail2Ban правила/jails с заданными для них по умолчанию параметрами и копируйте от туда нужные вам для активации jails и их параметры в ваш кастомный конфиг. Также этот файл содержит и глобальные параметры для всех jails по умолчанию. Редактировать этот файл не нужно, его необходимо использовать как подсказку при написании и включении ваших jails. Если, помимо включения jails, вы хотите переопределить и установить для них своих параметры, отличные от значений для них из /etc/fail2ban/jail.conf, то просто допишите их в свои jails в вашем пользовательском конфиге и они переопределят дефолтовые значения из /etc/fail2ban/jail.conf. Так же в своем кастомном конфиге вы можете переопределить и глобальные параметры для jails заданные по умолчанию указав их в секции [DEFAULT].

В примере ниже продемонстрировано переопределение глобальных параметров (bantime, findtime и maxretry) для всех jails и выполнено активация/включение (enabled = true) правил/jails: [sshd], [sshd-ddos], [apache-auth], [apache-badbots], [apache-overflows], [apache-shellshock], [mysqld-auth] с заданием/переопределением некоторых параметров jails.

# /etc/fail2ban/jail.d/defaults-debian.conf
# пример пользовательского конфига c jails

# переопределение default параметров для всех jails
[DEFAULT]
bantime   = 3600
findtime  = 1800
maxretry  = 2

# SSH jail
[sshd]
enabled   = true
maxretry  = 3
bantime   = 10800
findtime  = 3600

# ddos SSH jail
[sshd-ddos]
enabled  = true
maxretry = 3
bantime  = 10800

# APACHE JAILS
[apache-auth]
enabled  = true
maxretry = 3
bantime  = 10800
findtime = 3600

[apache-badbots]
enabled = true

[apache-overflows]
enabled = true

[apache-shellshock]
enabled = true

# MYSQL JAIL
[mysqld-auth]
enabled   = true
# путь к лог файлу задан в примере напрямую
# и должен соответствовать таковому из my.cnf MySQL
logpath   = /var/log/mysql/error.log
maxretry  = 3
bantime   = 10800
findtime  = 3600
# с этим JAIL имеется проблема в регулярном выражении фильтра,
# которую нужно устранить правкой - детали см. в описании ниже

После завершения редактирования пользовательского конфига /etc/fail2ban/jail.d/defaults-debian.conf сохраните его и перезапустите Fail2Ban набрав в терминале Ubuntu команду:

sudo service fail2ban restart

Если при перезапуске будут сообщения об ошибках, то детально причину их возникновения нужно искать в логе программы  Fail2Ban в файле /var/log/fail2ban.log

 

Проверка правил и фильтров в Fail2Ban

Программа Fail2Ban предоставляет для проверки, тестирования и настройки ваших правил/jails и фильтров следующие утилиты командной строки:

  • fail2ban-client - полезена для просмотра и управления jails
  • fail2ban-regex - полезена для проверки и тестирования регулярных выражений фильтров

 

Проверка Fail2Ban jails

 

Для того, что бы посмотреть какие правила (jails) Fail2Ban в настоящий применены и работают нужно выполнить в терминале команду:

sudo fail2ban-client status

# результат выполнения команды
Status
|- Number of jail:  6
`- Jail list: apache-auth, apache-gdayedit, apache-noscript, apache-overflows, sshd, sshd-ddos

В результате выполнения этой команды вам будет выведено число - количество активных jails и список их названий. Если в этом списке будут не все ваши jails, то значит какие то из них не активировались. Наиболее частая причина этого может быть в том, что Fail2Ban не может найти лог файл защищаемой программы, поэтому проверьте значение параметра logpath для вашего jails (см.выше описание структуры конфигов). Например, я столкнулся с тем, что для [mysqld-auth] параметр logpath по умолчанию указан не тот что мне нужен, поэтому я переопределил значение logpath = /var/log/mysql/error.log для [mysqld-auth], что бы оно соответствовало моим настройками MySQL.

Для того что бы посмотреть детали по конкретному правилу/jail нужно набрать в терминале команду:

# пример, детали для jailjail sshd
sudo fail2ban-client status sshd

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

# пример, детали для jail apache-auth
sudo fail2ban-client status apache-auth

Status for the jail: apache-auth
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     5
|  `- File list:        /var/log/apache2/error.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   xxx.xxx.x.x

В результате выполнения этой команды вам будет показана детальная информация для выбранного активного правила/jail. Для фильтров будет показано текущее количество неудачных попыток авторизации, общее количество неудачных попыток авторизации, абсолютный путь к лог файлу защищаемой программы - удобно для проверки, что бы убедиться в его правильности. Для предпринятых Fail2Ban действий будет указано количество заблокированных в текущий момент ip адресов, общее количество заблокированных ip за все время и список заблокированных в настоящий момент ip адресов.

 

Проверка Fail2Ban фильтров

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

fail2ban-regex <logfile> <failregex> <ignoreregex>

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

Например для тестирования суммарно всех failregex из фильтра для sshd jail нужно выполнить в терминале команду:

fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

 

Или, если вы хотите включить проверку ignoreregex, то необходимо указать файл яильтра два раза, где второй для проверки именно ignoreregex (см. выше полный синтаксис fail2ban-regex).

Например, для тестирования суммарно всех failregex и ignoreregex из фильтра для sshd jail нужно выполнить в терминале команду:

fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf /etc/fail2ban/filter.d/sshd.conf

Так же команда fail2ban-regex принимает дополнительные опции, такие как:

  • -v, --verbose - выводить подробную информацию
  • --print-all-missed - напечатать все пропущенные фильтром строки
  • --print-all-ignored - напечатать все проигнорировали фильтром строки
  • --print-all-matched - напечатать все совпавшие строки

Пример тестирования фильтра apache-noscript jail failregex и ignoreregex с дополнительными параметрами:

fail2ban-regex -v --print-all-missed /var/log/apache2/error.log /etc/fail2ban/filter.d/apache-noscript.conf /etc/fail2ban/filter.d/apache-noscript.conf

 

Целесообразно выполнять регулярные проверки работы jails и фильтров и в особенности после каждого обновления отслеживаемых программ. Это связано с тем, что форматы журналов (логов) программ могут быть периодически изменяться, в особенности после обновления программ. Это может привести к тому что регулярные выражения фильтров уже перестанут работать и не будут вылавливать строки с ошибками авторизации. Приведу свой пример ситуации. После установки Fail2Ban на Ubuntu 16.04 server неправильно работал фильтр для правила/jail [mysqld-auth]. Само правило было включено, параметр logpath был задан правильно, уровень логирования MySQL был задан равным 3, что значить писать сообщения, предупреждения и ошибки. При имитации ошибок авторизации к MySQL записи в лог файле программы появлялись, однако фильтр Fail2Ban не видел их. Причина такого поведения фильтра оказалась в том, что регулярное выражение для failregex было настроено на выборку строк лога вида [Warning], а MySQL писал строки с ошибками как [Note] строки:

Version: '5.7.12-0ubuntu1'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu)
2016-06-11T15:57:34.367109Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)

Соответственно, регулярное выражение было нацелено не на то, и как следствие фильтр не работал как нужно. Проблема эта легко была устранена корректировкой регулярного выражения в failregex фильтра. После чего правило/jail [mysqld-auth] стало работать и блокировать ip, с которых выполнялось имитация подбора паролей к MySQL. Данный пример наглядно демонстрирует необходимость и важность периодической проверки на работоспособность jails b фильтров.

Вы так же можете создавать сои собственные фильтры на основе имеющихся по умолчанию. Описанные выше инструменты командной строки Fail2Ban позволят вам выполнить их тщательную проверку перед использованием. Вы также можете не ограничиваться только блокировкой ip, а добавить к этому дополнительные действия, например, отправка email или другие в ответ на появление в логах отслеживаемой программы записей об ошибках авторизации.

 

Разблокировка ip бана

Общий вид команды для разблокировки ip забаненого Fail2Ban выглядит следующим образом:

fail2ban-client set <jail> unbanip <ip>

Например, для разблокирования ip для sshd jail нужно набрать в терминале ниже следующую команду, где вместо xxx.xxx.xx.x нужно указать заблокированный ip:

sudo fail2ban-client set sshd unbanip xxx.xxx.xx.x

 

Так же разблокировку ip можно выполнить и через iptables утилиту.

# смотрим наличие правил в iptables:
iptables -L

# ищем номер правила в iptables с заблокированным ip:
iptables -L fail2ban-SSH -v -n --line-numbers

# удаляем найденный ip из заблокированных
iptables -D fail2ban-SSH [номер цепочки]

 

Файлы журналов

Для информации привожу здесь пути к файлам журналов распространенных программ Ubuntu:

  • /var/log/auth.log  - это основной системный лог авторизации, содержит все подключения и попытки входа в систему, в том числе и для SSH;
  • /var/log/apache2/error.log  - лог по умолчанию для apache2 куда пишутся и попытки HTTP авторизации;
  • /var/log/mysql/error.log - лог MySQL, в него также пишутся попытки авторизации.

 

 

Скринкаст: Fail2Ban 0.9.x в Ubuntu 16.04

В скринкасте показана установка, настройка Fail2Ban версии 0.9.x, особенности конфигурации новой версии, структура конфигурационных файлов и фильтров, регулярные выражения фильтров и их изменение на примере mysqld-auth фильтра, настройка и включение пользовательских правил-jails sshd и apache-auth, переопределение настроек по умолчанию, bantime, findtime, maxretry, enabled, тестирование работы apache-auth jail, перезапуск Fail2Ban, просмотр включенных jails и детальной информации по ним, блокировка ip клиента при http авторизации, просмотр заблокированных/забаненных ip, разблокировка забаненных ip адресов, тестирование регулярных выражений фильтров Fail2Ban.

Смотреть скринкаст - Fail2Ban 0.9.x в Ubuntu 16.04

Содержание скринкаста:

Смотреть на YouTube скринкаст: Fail2Ban 0.9.x в Ubuntu 16.04