Asterisk: Ошибка SIP 403 Forbidden (Отклонено). Проверка и настройка ACL
Архитектура SIP аутентификации и суть отбоя 403
Ответ SIP 403 Forbidden (Доступ запрещен / Отклонено) от сервера Asterisk означает, что сервер понял запрос (формат пакета корректен), но категорически отказывается его выполнять. В отличие от 401 Unauthorized (требуется пароль), 403 означает, что проблема не в пароле, а в нарушении политик безопасности. Чаще всего причиной является отбой на уровне списков контроля доступа (ACL - Access Control Lists), блокировка по IP-адресу, неверный домен (Realm) или запрет маршрутизации вызова в диалплане (Context). Бизнес-риски: отвал транков провайдера, недоступность удаленных филиалов.
Типовые причины 403 Forbidden в Asterisk
| Источник блокировки | Симптом в логе (CLI) | Где искать проблему |
|---|---|---|
IP ACL (permit/deny) | Registration from... failed for 'X.X.X.X' - Device does not match ACL | Настройки sip.conf или pjsip.conf (endpoint/acl). |
Контекст (Context) | Call from '100' to extension '8900' rejected... no context | Настройки диалплана (extensions.conf). |
Fail2Ban (Iptables) | Пакеты вообще не доходят до Asterisk (нет лога), клиент видит 403/Timeout. | Локальный Firewall сервера Linux. |
Траблшутинг ACL в chan_sip и PJSIP
Сценарий 1: Проверка и настройка ACL в chan_sip (sip.conf)
Если вы используете устаревший драйвер chan_sip, защита строится на параметрах `deny` и `permit`.
[100] (Экстеншен абонента)
type=friend
secret=StrongPass123
context=office
host=dynamic
Запрещаем всё
deny=0.0.0.0/0.0.0.0
Разрешаем локальную сеть и IP филиала (Обязательно ПРИМЕНИТЬ ПОСЛЕ deny)
permit=192.168.1.0/255.255.255.0
permit=10.0.0.0/255.0.0.0Если сотрудник пытается подключиться из дома (домашний IP не входит в permit), он получит 403 Forbidden.
Сценарий 2: ACL в современном стеке res_pjsip (pjsip.conf)
В PJSIP контроль доступа настраивается в секции [acl] или непосредственно в [endpoint].
Глобальный список доступа (в файле acl.conf или pjsip.conf)
[office_acl]
type=acl
deny=0.0.0.0/0.0.0.0
permit=192.168.1.0/24
Привязка ACL к эндпоинту
[100]
type=endpoint
context=office
disallow=all
allow=alaw
acl=office_acl ; Применение спискаТиповые ошибки администраторов
- Порядок правил в chan_sip: Правило
permitДОЛЖНО идти послеdeny. Если вы напишете сначала permit, а потом deny=0.0.0.0/0, Asterisk заблокирует всех, так как последнее правило перетирает предыдущие (в старом синтаксисе). - Игнорирование NAT: Если клиент за NAT, Asterisk видит внешний (белый) IP-адрес роутера, а не локальный IP телефона. Если вы прописали в ACL
permit=192.168.10.5(IP телефона за NAT), сервер отдаст 403. Нужно разрешать внешний IP провайдера.
Открытый наружу порт 5060 — это гарантия взлома за 24 часа. Специалисты ITSTM внедрят многоуровневую защиту: от настройки гео-ACL в PJSIP и интеграции Fail2Ban до установки пограничного контроллера сессий (SBC), защитив ваши средства от фрод-трафика.
Частые вопросы (FAQ)
Как увидеть причину 403 в консоли Asterisk?
Зайдите в консоль (asterisk -rvvvv). Для chan_sip введите 'sip set debug on'. Для pjsip введите 'pjsip set logger on'. В SIP-дампе вы увидите входящий пакет REGISTER или INVITE и ответ Asterisk на него. Там же будет текстовая причина отбоя.
Провайдер шлет 403 Forbidden при попытке исходящего звонка. Почему?
Asterisk передает провайдеру неверный CallerID (номер звонящего). Провайдеры жестко фильтруют поле 'From' в SIP INVITE. Убедитесь, что параметр 'fromuser' в настройках транка совпадает с вашим выданным многоканальным номером.
Телефон зарегистрирован (статус OK), но звонки между внутренними абонентами отбиваются 403?
В 90% случаев это ошибка диалплана. В настройках телефона прописан context=default, в котором нет правил обработки звонков (exten =>). Asterisk отказывается маршрутизировать звонок и отдает 403.
Что такое alwaysauthreject=yes?
Это важнейший параметр безопасности в sip.conf. Он заставляет Asterisk всегда отвечать 401 Unauthorized на неверные пароли И неверные логины. Если он выключен (no), то на несуществующий логин сервер ответит 404 (Not Found), а на существующий — 401, что позволяет хакерам перебрать базу логинов (User Enumeration). На ACL отбивает 403.