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

Как выглядит брутфорс

Брутфорс (Brute-force) — это атака перебором паролей. Злоумышленник массово подбирает ключи к SIP-аккаунту, чтобы совершать звонки за ваш счет. В логах Asterisk (/var/log/asterisk/full) это проявляется как бесконечный поток ошибок регистрации.

Пример атаки в консоли:

[2026-05-15 10:00:01] NOTICE[2145] res_pjsip/pjsip_distributor.c: Request 'REGISTER' from '<sip:101@1.2.3.4>' failed for '192.168.10.50:5060' (callid: 87452) - No matching endpoint found
[2026-05-15 10:00:02] NOTICE[2145] res_pjsip/pjsip_distributor.c: Request 'REGISTER' from '<sip:101@1.2.3.4>' failed for '192.168.10.50:5060' (callid: 87453) - Failed to authenticate

Без защиты атакующий не только подберет пароль, но и перегрузит CPU запросами.

Инструменты защиты: Файрвол и Fail2Ban

Мы используем два эшелона обороны:

  1. Файрвол (Firewall) — это фильтр на входе. В FreePBX Distro за него отвечает firewalld. Он пропускает только разрешенный трафик.
  2. Fail2Ban — это защита от брутфорса. Утилита читает логи Asterisk. Если она видит подозрительную активность (например, 5 ошибок за минуту), то дает команду файрволу выполнить блокировку по IP атакующего.

Взаимодействие компонентов показано на Схеме 1.

Настройка Firewalld

Сначала ограничим доступ к портам. В firewalld работа строится через зоны:

  • Trusted: добавьте сюда IP офисов и провайдеров.
  • Public: все остальные. Здесь SIP-порты (5060/5061) должны быть закрыты или строго ограничены.

Пример: разрешим SSH (порт 22) только для вашего доверенного IP:

# Удаляем публичный доступ к SSH
firewall-cmd --zone=public --remove-service=ssh --permanent
# Разрешаем доступ конкретному адресу
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.5" service name="ssh" accept' --permanent
firewall-cmd --reload

Конфигурация Fail2Ban под капотом

Во FreePBX есть модуль Intrusion Detection, но администратору важно понимать структуру файлов. Настройки хранятся в /etc/fail2ban/jail.local.

💡 Правило: Не редактируйте jail.conf — он затрется при обновлении. Используйте только jail.local.

Настройка «тюрьмы» (Jail)

Пример секции для защиты PJSIP:

[asterisk]
enabled  = true
filter   = asterisk
port     = 5060,5061
logpath  = /var/log/asterisk/full
maxretry = 5
findtime = 600
bantime  = 3600
ignoreip = 127.0.0.1/8 192.168.1.0/24
  • maxretry: лимит попыток до бана.
  • findtime: окно времени (в секундах) для подсчета попыток.
  • bantime: длительность блокировки.
  • ignoreip: ваш «белый список». Обязательно внесите свои сети, чтобы не забанить себя из-за опечатки.

Как работают фильтры

Fail2Ban ищет атаки с помощью регулярных выражений (Regex) в файлах /etc/fail2ban/filter.d/.

Пример Regex для поиска ошибок PJSIP: ^.*NOTICE.* res_pjsip/pjsip_distributor.c: Request '.*' failed for '<HOST>:.*' - (No matching endpoint found|Failed to authenticate).*$

Мониторинг и управление

Проверяйте работу защиты через консоль:

КомандаДействие
fail2ban-client statusСписок активных «тюрем»
fail2ban-client status asteriskСтатистика и список забаненных IP
fail2ban-client set asterisk unbanip <IP>Разблокировать адрес

🛡️ Совет: Для борьбы с постоянными атаками используйте динамические списки ipset. Это позволяет блокировать тысячи IP без нагрузки на систему.

Мы закрыли периметр от массовых атак. Но файрвол не защитит от перехвата данных внутри сети. Чтобы исключить прослушивание разговоров, в следующем уроке мы настроим шифрование трафика с помощью TLS и SRTP.

Понравился урок?

Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей

Продолжить в Telegram