Настройка Fail2Ban и файрвола
Мы уже научились диагностировать ошибки в диалплане и разбираться с маршрутизацией, но в открытой сети 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
Мы используем два эшелона обороны:
- Файрвол (Firewall) — это фильтр на входе. В FreePBX Distro за него отвечает
firewalld. Он пропускает только разрешенный трафик. - 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