Иван Санников
06.06.2019
12622

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 значит модули загружены и работают

 

Проверка наличия драйвера PJSIP в Asterisk

Для проверки наличия SRTP необходимо выполнить команду

asterisk -rx ‘module show like srtp’

Если в выводе не показан ни один модуль то необходимо пересобрать Asterisk с использованием данного модуля.

проверка наличия модуля SRTP — модуль отсутсвует

Для установки 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

 

Установка модуля res_srtp

4) Далее шаги соответствуют стандартной установке Asterisk (make и make install)

5) Далее необходимо перезагрузить Asterisk командой systemctl restart asterisk

6) Далее необходимо загрузить модуль, выполнив в консоли Asterisk`а команду module load res_srtp.so

 

загрузка модуля res_srtp.so

Полностью установка Asterisk с поддержкой SRTP и PJSIP рассмотрена на примере Asterisk 13 в статье

Теперь команда asterisk -rx ‘module show like srtp’ покажет, что модуль находится в сотсоянии Running.

 

 

проверка наличия модуля SRTP — модуль загружен

Обратите внимание, что после перезагрузки Asterisk`а модуль придется снова подгружать вручную, чтобы избежать этого необходимо корректно настроить файл /etc/asterisk/modules.conf

 Для этого необходимо или включить автозагрузку всех модулей установив опцию autoload = yes,  или же прописать в явном виде подгрузку модуля опцией

load = res_srtp.so

 

прописывание загрузки модуля srtp в файл modules.conf

Перед тем как настраивать транспорт для драйвера PJSIP необходимо сгенерировать сертификаты. Для этого необходимо выполнить следующие шаги.
1) в директории /etc/asterisk создать поддиректорию keys командой mkdir /etc/asterisk/keys

Для создания ключей в исходниках Asterisk присутсвует специальный скрипт ast_tls_cert, находящий в поддиректории contrib/scripts/

По-умолчанию срок выдачи генерируемого сертификата год, чтобы увеличить срок необходимо поправить скрипт заменив число 365 в параметре -days на любое необходимое, например,  3650 — это выдаст сертификат сроком на 10 лет.

 

правка скрипта для выдачи сертификата TLS на 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

Команда выводит данные о сертификате.

 

проверка настроек TLS

Настройка секций 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

 

секции aor, auth, endpoint

 

Данных параметров достаточно для минимальной настройки TLS+SRTP для PJSIP

Подписаться
Уведомление о
guest
2 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Denis
Denis
24.04.2020 17:27

Как бороться с этим
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

Denis
Denis
24.04.2020 17:36
Reply to  Denis

если уже добился коннекта то упираемся в это
[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)

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.