TLS SRTP для драйвера PJSIP в Asterisk 15
В рамках данной статьи будет рассмотрена настройка шифрования SIP и RTP трафика при использовании драйвера PJSIP. Шифрование протокола SIP будет происходить с помощью TLS, а вместо не шифрованного протокола RTP будет использоваться защищенный протокол SRTP. Шифрование только протокола SIP недостаточно, так как если оставить незашифрованным RTP поток, то при перехвате трафика злоумышленник сможет без проблем прослушать вызовы.
Конфигурация используемой системы:
— Centos 7
— Asterisk 15.6.1 собранный с поддержкой SRTP и PJSIP
Сначала необходимо убедиться что Asterisk собран с поддержкой SRTP и PJSIP и если это не так то пересобрать установив необходимые пакеты.
Проверить наличие драйвера PJSIP в Asterisk можно командой:
asterisk -rx „module show like pjsip“
Данная команда выведет список всех модулей относящихся к PJSIP. Если в отображаемом списке статус модулей стоит Running значит модули загружены и работают
Для проверки наличия SRTP необходимо выполнить команду
asterisk -rx ‘module show like srtp’
Если в выводе не показан ни один модуль то необходимо пересобрать Asterisk с использованием данного модуля.
Для установки SRTP следует выполнить следующие шаги:
1) Установить библиотеку SRTP c помощью команды
yum install libsrtp libsrtp-devel -y
2) Перейти в директорию с исходниками Asterisk и сконфигурировать установку командой:
./configure —libdir=/usr/lib64 —with-crypto —with-ssl=ssl —with-srtp
3) В окне выбора устанавливаемых модулей (make menuselect) необходимо в разделе Resource Modules включить установку модуля res_srtp
4) Далее шаги соответствуют стандартной установке Asterisk (make и make install)
5) Далее необходимо перезагрузить Asterisk командой systemctl restart asterisk
6) Далее необходимо загрузить модуль, выполнив в консоли Asterisk`а команду module load res_srtp.so
Полностью установка Asterisk с поддержкой SRTP и PJSIP рассмотрена на примере Asterisk 13 в статье
Теперь команда asterisk -rx ‘module show like srtp’ покажет, что модуль находится в сотсоянии Running.
Обратите внимание, что после перезагрузки Asterisk`а модуль придется снова подгружать вручную, чтобы избежать этого необходимо корректно настроить файл /etc/asterisk/modules.conf
Для этого необходимо или включить автозагрузку всех модулей установив опцию autoload = yes, или же прописать в явном виде подгрузку модуля опцией
load = res_srtp.so
Перед тем как настраивать транспорт для драйвера PJSIP необходимо сгенерировать сертификаты. Для этого необходимо выполнить следующие шаги.
1) в директории /etc/asterisk создать поддиректорию keys командой mkdir /etc/asterisk/keys
Для создания ключей в исходниках Asterisk присутсвует специальный скрипт ast_tls_cert, находящий в поддиректории contrib/scripts/
По-умолчанию срок выдачи генерируемого сертификата год, чтобы увеличить срок необходимо поправить скрипт заменив число 365 в параметре -days на любое необходимое, например, 3650 — это выдаст сертификат сроком на 10 лет.
2) запустить скрипт для генерации сертификатов командой
./ast_tls_cert -C pbx.company.ru -O «Test Company» -d /etc/asterisk/keys
В процессе генерации будет запрошен ввод ключевой фразы для генерации ca.key, также понадобиться ввести тотже код и для генерации asterisk.key.
3) Следующий шаг — генерация клиентского сертификата командой
./ast_tls_cert -m client -c /etc/asterisk/keys/ca.crt -k /etc/asterisk/keys/ca.key -C client1.company.ru -O «Test Company» -d /etc/asterisk/keys -o 100
При генерации клиентского ключа необходимо будет указать ту же ключевую фразу, что задавали при генерации сертификата сервера.
После генерации сертификатов необходимо настроить Asterisk на работу с TLS.
Сначала необходимо в секции описания транспортных протоколов файла /etc/asterisk/pjsip.conf, создать секцию с описанием TLS.
Ее примерный вид следующий:
[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5061
cert_file=/etc/asterisk/keys/asterisk.crt
priv_key_file=/etc/asterisk/keys/asterisk.key
domain=pbx.company.ru
external_media_address=1.1.1.1
external_signaling_address=1.1.1.1
local_net=192.168.170.0/24
method=tlsv1
Краткое описание параметров секции
bind — указывает Asterisk, что TLS будет работать на порту 5061
cert_file — указывает путь к файлу сертификата, сгенерированного на предыдущем этапе
priv_key_file — указывает путь к файлу приватного ключа, сгенерированного на предыдущем этапе
external_media_address — указывает внешний ip-адрес АТС при нахождении ее за NAT`ом
external_signaling_address — указывает внешний ip-адрес АТС при нахождении ее за NAT`ом
При подключении внешних абонентов на маршрутизаторе необходимо обязательно пробрасывать порт 5061 TCP и диапазон голосовых портов UDP, на Asterisk
Для разрешения в дальнейшем применения изменений транспорта командой asterisk -rx „core reload“ необходимо дополнительно указать в секции транспорта параметр allow_reload=true
Для проверки настроек TLS можно воспользоваться командой
openssl s_client -connect 127.0.0.1:5061
Команда выводит данные о сертификате.
Настройка секций endpoint, auth, aor
Основным отличием настроек данных секций от стандартный в PJSIP является наличие опции media_encryption=sdes
Описание секций файла pjsip.conf дано в статьеПример настройки:
[100]
type=aor
max_contacts=1
remove_existing=yes
[100]
type=auth
auth_type=userpass
username=100
password=StrongPasswd
[100]
type=endpoint
transport=transport-tls
direct_media=no
aors=100
auth=100
context=from-internal
disallow=all
allow=opus
allow=alaw
allow=ulaw
force_rport=yes
rewrite_contact=yes
dtmf_mode=rfc2833
media_encryption=sdes
Данных параметров достаточно для минимальной настройки TLS+SRTP для PJSIP
Остались вопросы?
Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.
Как бороться с этим
openssl s_client -connect 127.0.0.1:5061
140203553085248:error:0200206F:system library:connect:Connection refused:crypto/bio/b_sock2.c:110:
140203553085248:error:2008A067:BIO routines:BIO_connect:connect error:crypto/bio/b_sock2.c:111:
connect:errno=111
если уже добился коннекта то упираемся в это
[root@localhost asterisk]# openssl s_client -connect 127.0.0.1:5061
CONNECTED(00000003)
write:errno=104
—
no peer certificate available
—
No client certificate CA names sent
—
SSL handshake has read 0 bytes and written 299 bytes
Verification: OK
—
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)