Fail2ban asterisk настройка ubuntu

Обновлено: 06.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

Используя Asterisk внутри организации без проброса портов в Интернет обычно хватает настройки брендмауэра. Что делать если вы хотите чтобы сотрудники подключались удаленно? Правильно, открываете порт 5060 наружу во всеобщий доступ. Буквально через несколько минут после этого в логах можно лицезреть кучу попыток подбора пароля. Защититься от этого поможет Fail2Ban. Рассмотрим как происходит настройка Fail2Ban для Asterisk.

Настраивать fail2ban я буду на Asterisk 18 установленной в ОС Centos 8. Перед началом установки необходимо подключить EPEL репозиторий. Он у вас скорее всего уже подключен но проверить не помешает.

Подключение репозитория EPEL
Установка Fail2Ban

Устанавливать буду в Centos 8 с помощью менеджера пакетов dnf. В предыдущих версиях Centos используйте менеджер пакетов yum

После установки в каталоге /etc/fail2ban будет такая структура конфигурационных файлов

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

Конфигурационные файлы считываются сверху вниз. Последний считанный файл имеет высший приоритет. В данном случае при существовании фалов с расширением local будут более приоритетны.

Настройка защиты Asterisk в Fail2Ban

Чтобы не изменять стандартный файл настроек jail.conf создадим jail.local с необходимыми параметрами.

Создание файла конфигурации jail.local

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

Далее следуют секции с описанием конкретных jail. Их может быть несколько. Рассмотрим параметры тюрьмы [asterisk]

В конфиге я прописал что если в течение 10 секунд будет 4 и более неудачных запроса (из тех что фильтруются), то адрес будет заблокирован на 720 секунд. Подсеть 127.0.0.1/8 находится в белом списке. Для фильтрации я указал отдельный файл журнала для наглядности.

Добавление файла журнала Asterisk для мониторинга fail2ban

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

Откроем файл /etc/asterisk/logger.conf

В секцию [logfiles] добавляем строку

После перезапуска сервиса будет создан новый файл по пути /var/log/asterisk/fail2ban куда будут сохранятся все события с детализацией уровня notice

Запуск сервиса fail2ban

Запустим сервис для проверки что все установлено верно и запускается

Добавление fail2ban в автозагрузку

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

Просмотр текущего статуса

Проверить текущее состояние сервиса fail2ban можно так

Мониторинг работы fail2ban

Для мониторинга активности fail2ban используется утитилита fail2ban-client. Введите fail2ban-client в консоли чтобы посмотреть список доступных параметров.

Просмотр статуса всех настроенных jail

Увидеть более детальную статистику по конкретной тюрьме можно указав её название

В случае изменения настроек в файл jail.local их необходимо перечитать, делается это командой

Проверка работы

Проверим что все настройки верны и fail2ban блокирует подборку паролей. Для этого я запущу софтфон и намеренно буду вводить неправильный пароль. Спустя некоторое время меня забанили, что называется доигрался 🙂

Давайте окунемся в гущу событий и посмотрим лог программы fail2ban

По записям видно что мена заблокировали в 14:44 и разблокировали 14:56. Ровно 12 минут или 720 секунд, как раз то что мы указывали в файле jail.local

Снятие блокировки

Если нет времени ждать, то можно снять блокировку вручную

Рассмотренная в статье настройка Fail2Ban для Asterisk не представляет особой сложности. Я рассмотрел основные моменты, но как всегда есть возможности для более тонкой настройки. Инструмент очень обширный, читайте man там много интересного :). Спасибо за внимание и до новых встреч.

Рекомендую к просмотру видео по настройке Fail2Ban для Asterisk

Любой сервис, доступный из Интернета, подвержен атакам злоумышленников. Если сервис требует аутентификации, несанкционированные пользователи и боты будут пытаться проникнуть в систему путем перебора учетных данных. К примеру, сервис SSH станет объектом атак ботов, которые попытаются пройти аутентификацию с помощью стандартных учетных данных. К счастью, сервисы типа fail2ban помогают смягчить такие атаки. Сервис fail2ban динамически корректирует […]

Fail2ban

Любой сервис, доступный из Интернета, подвержен атакам злоумышленников. Если сервис требует аутентификации, несанкционированные пользователи и боты будут пытаться проникнуть в систему путем перебора учетных данных.

К примеру, сервис SSH станет объектом атак ботов, которые попытаются пройти аутентификацию с помощью стандартных учетных данных. К счастью, сервисы типа fail2ban помогают смягчить такие атаки.

Сервис fail2ban динамически корректирует правила брандмауэра, чтобы заблокировать адреса, которые безуспешно пытаются войти в систему определенное количество раз.

Основная идея fail2ban заключается в отслеживании логов общих сервисов для выявления ошибок аутентификации.

Когда fail2ban мониторит логи сервиса, он смотрит на настроенный для этого сервиса фильтр. Фильтр предназначен для определения сбоев аутентификации этого конкретного сервиса на основе сложных регулярных выражений. Шаблоны регулярных выражений определяются в переменной failregex.

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

Действие по умолчанию – блокировка потенциально вредоносного хоста/IP-адреса путем изменения правил брандмауэра iptables. Вы можете расширить это действие – настроить электронные уведомления администратора с данными о злоумышленнике или строками лога, которые вызвали указанное действие.

Вы также можете изменить цель действия и указать что-то другое вместо стандартного iptables. Этот параметр может быть настолько сложным или простым, насколько этого требует ваша установка; в fail2ban доступно множество различных конфигурационных файлов и опций брандмауэра.

По умолчанию fail2ban блокирует адрес на 10 минут в случае обнаружения трех неудачных попыток авторизации в течение 10 минут. Количество неудачных попыток аутентификации, необходимое для блокировки адреса, переопределяется в разделе SSH конфигурационного файла по умолчанию – он разрешает до 6 попыток. Администратор может настроить этот параметр самостоятельно.

При использовании цели по умолчанию (iptables) для отслеживания SSH-трафика при запуске сервиса fail2ban создает новую цепочку. Он добавляет новое правило в цепочку INPUT, которая направляет весь TCP-трафик, направленный на порт 22, в новую цепочку. В новой цепочке fail2ban вставляет одно правило, которое возвращается в цепочку INPUT.

Это заставляет трафик прыгать в новую цепочку, а затем возвращаться обратно. Сначала это не влияет на трафик. Однако когда IP-адрес превышает количество попыток аутентификации, в начало новой цепочки добавляется правило, которое будет сбрасывать трафик от этого IP-адреса. Когда срок блокировки истечет, правило iptables будет удалено. Цепочка и связанные с ней правила удаляются при выходе из fail2ban.

В данной статье настроим конфигурацию fail2ban для asterisk и ssh. В качестве стенда для выполнения настройки служит centos 7 + Asterisk 15.7.2.

Инструмент Fail2ban не доступен в официальном репозитории CentOS, но его можно получить в EPEL. Пакет самого репозитория EPEL (Extra Packages for Enterprise Linux) можно добавить из официального репозитория CentOS.

Теперь можно установить пакет fail2ban:

После завершения установки используйте инструмент systemctl, чтобы запустить и включить автозапуск fail2ban:

Проверьте что всё в порядке

Сервис Fail2ban хранит настройки в каталоге /etc/fail2ban. В нём можно найти файл jail.conf, содержащий стандартные настройки.

Этот файл перезаписывается при обновлении пакета Fail2ban, потому его редактировать нельзя. Вместо этого нужно создать новый файл по имени jail.local. Значения в файле jail.local будут переопределять jail.conf.

Файл jail.conf содержит раздел [DEFAULT], после которого следует раздел для индивидуальных сервисов. Файл jail.local может переопределить любое из этих значений. Файлы применяются в алфавитном порядке:

Любой из файлов может содержать раздел [DEFAULT], который выполняется первым, а затем – разделы для индивидуальных сервисов. Последнее значение, установленное для данного параметра, имеет приоритет.

Создадим файл jail.local с настройками для asterisk и ssh в текстовом редакторе:

Вставьте в файл следующий код:

Этот файл переопределяет параметры:

После раздела [DEFAULT] идут разделы для определенных сервисов, которые могут использоваться для переопределения настроек по умолчанию. Как правило, в этих разделах переопределяются только значения, которые отличаются от стандартных значений.

Раздел для сервиса asterisk будет иметь следующие параметры:

Раздел для сервиса ssh будет иметь следующие параметры:

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

Сохраните и закройте файл. Перезапустите fail2ban при помощи systemctl для применения внесенных изменений:


Мануал

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

В настоящее время существует множество попыток брута и мошенничества с VoIP, нацеленные на Asterisk, FreePBX и любую другую систему PBX в Интернете.

Раз вы уже потратили какие-то средства и решили купить АТС, можно сделать шаг , который позволит сэкономить вам пропускную способность и защитить ваш бизнес.

Чтобы упростить нашу работу, мы будем использовать VoIPBL, который является распределенным черным списком VoIP, который направлен на защиту от мошенничества с VoIP и минимизацию злоупотребления сетью, имеющей общедоступные PBX’s.

Как VoIPBL защищен?

Функция VoIPBL Geolocation позволяет блокировать весь сетевой трафик из стран, с которыми сети не нужно связываться, или которые являются известными создателями вредоносной активности.

На ссайте вы можете проверить, находится ли ваш IP-адрес в черном списке.

Как установить VoIPBL

Черный список VoIP зависит от Fail2ban, чтобы реализовать черный список на вашем сервере PBX.

Убедитесь, что установлен пакет fail2ban и запущен сервис:

Для Ubuntu и других ос семейства Debian выполните:

Если вы используете CentOS 6 или любое другое семейство RHEL 6, установите iptables-services и fail2ban без 2ban-systemd

Настройки по умолчанию для Fail2ban находятся в ./etc/fail2ban/jail.conf

Базовая конфигурация fail2ban будет иметь мониторинг ssh. Давайте добавим это в файл /etc/fail2ban/jail.local.

Добавьте следующий контент:

Затем запустите и включите службу fail2ban

Загрузите скрипт voipbl.sh и поместите в /usr/local/bin/

Сделайте исполняемым скрипт:

В приведенном выше примере используется iptables.

Если ваша система поддерживает ipset, вы можете использовать следующий скрипт:

Затем добавьте новый jail Fail2ban в /etc/fail2ban/jail.conf:

Теперь определите действия Blacklist для протокола Fail2ban по адресу /etc/fail2ban/action.d/voipbl.conf.

Теперь мы можем создать файл задания cron для обновления правил каждые 3 часа:

Теперь мы можем создать файл задания cron для обновления правил каждые 3 часа:

Когда это будет сделано, перезапустите fail2ban daemon, чтобы включить защиту от VoIP-мошенничества:

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