Безопасность asterisk: ограничение переводов звонков только местными номерами
Если Вы хотите обезопасить Ваш asterisk от взлома, то одним из мероприятий будет ограничение возможностей по переводу звонков. Поскольку в большинстве фирм нет реальной необходимости переводить звонки на внешние (мобильные/.../международные) номера, а сама возможность таких переводов звонков сама по себе является потенциальным источником проблем, то возникает желание что-то с этим сделать, чтобы обезопасить себя от взлома.
Максимальным вариантом защиты в данном случае, конечно же, будет полное отключение возможности переводов звонков: в этом случае вероятность взлома Вашей АТС таким способом равна нулю :)
Но мы не будем заходить так далеко, и ограничим возможности переводов звонков местными номерами: как сопровождаемый перевод (attended transfer), так и слепой перевод (blind transfer).
Что может входить в обработку переводов звонков
Обработка переводов звонков по умолчанию предусматривает следующие действия: при нажатии определенной клавиши (или последовательности клавиш - DTMF кодов) asterisk выполняет запрос номера телефона, после чего осуществляется попытка перевода звонка на указанный номер в пределах контекста абонента, выполняющего перевод звонка. Добавляя свою обработку перевода звонка, мы можем ограничивать как список абонентов, которым разрешен перевод звонков, так и список номеров, на которые можно переводить звонки. Кроме того, в случае неудачного перевода звонка мы можем попытаться вернуть звонок тому, кто его перевел.
Чем плоха обработка переводов звонков по умолчанию:
- нет возможности вернуть звонок тому, кто его перевел;
- нет ограничений по переводу (перевод ограничен контекстом того абонента, который переводит звонок).
Как настроить обработку переводов звонков
Будем исходить из того, что сам перевод звонков у Вас уже настроен. Для того, чтобы показать астериску кто здесь главный, что мы хотим включить обработку переводов звонков, определим глобальную переменную TRANSFER_CONTEXT. Её значением будет имя контекста диалплана, куда будут попадать все переводимые звонки.
Пример простейшей обработки перевода звонков:
Что здесь неправильно:
- Разрешены переводы куда угодно кому угодно. К примеру, позвонив из города на местный номер, можно перевести этого местного абонента куда угодно (например, на платный номер).
- Перевод осуществляется только на SIP аккаунты.
- Если у Вас в локальном контексте есть какие-то обработки для местных номеров, при переводе звонка обработки не сработают (и нельзя, к примеру, перевести звонок на группу номеров).
Что нам нужно от перевода звонков
- Ограничить перевод звонков только местными номерами (в данном примере мы исходим из того, что местные номера - 4-значные).
- Переводить звонки не только на SIP аккаунты, но и IAX, DAHDI, а также группы номеров.
- Если для местного номера включена обработка (например, переадресация при неответе или голосовой ящик), то нужно чтобы эта обработка выполнялась.
Чтобы выполнить эти задачи, выполним следующие шаги:
- В качестве шаблона номеров используем не "_X.", а "_XXXX".
В этом случае в набираемом номере могут быть строго 4 цифры.
- Для решения 2 и 3 задачи используем контекст Local.
Пример обработки перевода звонков
Пример дополнительного повышения эффективности от обработки переводов звонков - см. статью "Возврат звонка после безусловного / "слепого" перевода" (обратите внимание: там стоит неправильный экстеншен, с точки зрения безопасности).
P.S.: Обратите внимание: при нажатии кнопки Transfer на IP телефонах, перевод осуществляется средствами самого телефона, а не asterisk, поэтом данные ограничения не срабатывают.
Статья опубликована: 31.07.2016
|