Knowledgebase

7. Asterisk 15 LXC Centos 7 SIP TLS SRTP

7. Asterisk 15 LXC Centos 7 SIP TLS SRTP

 

Данный опус является частью единого цикла заметок o CLI.  Для его написания использовалось множество различных источников (скилы крутых специалистов, статьи с тематических сайтов, техническая документация, комментарии с форумов и социальных сетей и т. д и т. п.).  К сожалению, указать все источники точно не представляется  возможным!  По этому,  в конце заметки,  будет указана ссылка только  на основной источник.  Материалы,  использованные для написания заметки, изменялись автором под конкретную задачу! Вам, скорее всего, тоже  придется поступить аналогичным образом для получения желаемого результата) 

 

Нужна консультация или помощь в решении IT вопроса? Пожалуйста, в таком случае  заполните форму запроса на Sytes.ru!

В статье предполагается, что сервер терминалов уже прошел предварительную настройку и работает. Все скриншоты соответствуют Windows Server 2016.

Asterisk настройка TLS SRTP для PJSIP

asterisk-pjsip-tls-srtpНастроим защищенное подключение SIP клиентов к Asterisk 14 за NAT, используя драйвер PJSIP, транспорт TLS и шифрование голоса SRTP.

См. также SIP TLS SRTP Asterisk

На входе у нас Asterisk 14 скомпилированный с поддержкой srtp:

 yum install  libsrtp libsrtp-devel
 ./configure --libdir=/usr/lib64 --with-crypto --with-ssl=ssl --with-srtp

Transport Layer Security (TLS) обеспечивает шифрование сигнализации SIP. Это способ защитить информацию о вызовах от man in the middle. SRTP обеспечивает шифрование голоса. Для настройки TLS между Asterisk и SIP клиентом требуется:

  1. Создать ключи шифрования.
  2. Настроить транспорт драйвера PJSIP для использования TLS.
  3. Настроить PJSIP Endpoint и SIP клиент для использования TLS и SRTP.

Убедитесь что модуль res_srtp.so загружен.

*CLI> module show like srtp
Module                         Description                              Use Count  Status      Support Level
res_srtp.so                    Secure RTP (SRTP)                        0          Running              core
1 modules loaded

Если нет, попытайтесь загрузить его:

*CLI> module load res_srtp.so
Loaded res_srtp.so
 Loaded res_srtp.so => (Secure RTP (SRTP))

Asterisk TLS keys

Сперва создадим само-подписанные сертификаты и ключи шифрования.

Создать директорию для ключей:

  mkdir /etc/asterisk/keys

С исходниками Asterisk поставляется скрипт для создания ключей:

  cd  /usr/src/asterisk-14*/contrib/scripts/

в моем случае, это Asterisk 14, но пойдет и 13, и м.б. 12. Выполните скрипт с тремя ключами:

./ast_tls_cert -C pbx.asterisk-pbx.ru -O "asterisk-pbx.ru" -d /etc/asterisk/keys
  • «-C» - укажите домен или ip адрес
  • «-O» - укажите имя
  • «-d» - директория для ключей
 

ast_tls_cert 

В ходе выполнения этой операции, вам будет предложено ввести секретную фразу и повторить ее два раза. Сохраните пароль, в дальнейшем он понадобится для генерации пользовательских сертификатов. В результате будут созданы следующие файлы и помещены в директорию заданную ключом 'd' :

  • asterisk.crt
  • asterisk.csr
  • asterisk.key
  • asterisk.pem
  • ca.cfg
  • ca.crt
  • ca.key
  • tmp.cfg

Далее создадим клиентский сертификат, все то же, только параметров побольше. Здесь понадобиться ввести ключевую фразу, заданную при создании сертификата сервера.

  ./ast_tls_cert -m client -c /etc/asterisk/keys/ca.crt -k /etc/asterisk/keys/ca.key -C pbx.asterisk-pbx.ru -O "asterisk-pbx.ru" -d /etc/asterisk/keys -o zvezdo4kin
  • «-m client» - получить клиентский сертификат.
  • «-c /etc/asterisk/keys/ca.crt» - указать наш же 'Certificate Authority'.
  • «-k /etc/asterisk/keys/ca.key» - указать ключ для 'Certificate Authority'.
  • «-C» - хост или ip адрес, те же, что и для сервера
  • «-O» - имя компании, то же что и для сервера.
  • «-d» - директория с ключами
  • «-o» - имя для клиентского сертификата.

В итоге получим такие файлы:

  • zvezdo4kin.crt
  • zvezdo4kin.csr
  • zvezdo4kin.key
  • zvezdo4kin.pem

Когда с сертификатами и ключами покончено, можно переходить к настройке Asterisk.

Asterisk TLS SRTP PJSIP

Создадим транспорт pjsip и пользовательcкий аккаунт.

/etc/asterisk/pjsip.conf

transport pjsip

[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5066
cert_file=/etc/asterisk/keys/asterisk.crt
priv_key_file=/etc/asterisk/keys/asterisk.key
domain=pbx.asterisk-pbx.ru
external_media_address=123.123.123.111
external_signaling_address=123.123.123.111
local_net=192.168.0.0/16
method=tlsv1
allow_reload=true

Специфические настройки транспорта для TLS налицо:

  • protocol=tls
  • cert_file=/etc/asterisk/keys/asterisk.crt
  • priv_key_file=/etc/asterisk/keys/asterisk.key
  • method=tlsv1

Сервер находится за NAT, поэтому укажем внешний медиа и сигнальный адрес:

  • external_media_address=123.123.123.111
  • external_signaling_address=123.123.123.111

Будем работать по порту 5066

  • bind=0.0.0.0:5066

На шлюзе/роутере пробросьте диапазон портов RTP (tcp и udp) и сигнальный порт 5066 (tcp и udp)

pjsip endpoint, aor, auth

[zvezdo4kin]
type=aor
max_contacts=1
remove_existing=yes

[zvezdo4kin]
type=auth
auth_type=userpass
username=zvezdo4kin
password=mypassword

[zvezdo4kin]
type=endpoint
transport=transport-tls
direct_media=no
aors=zvezdo4kin
auth=zvezdo4kin
context=from-zvezdo4kin
dtls_cert_file=/etc/asterisk/keys/zvezdo4kin.crt
dtls_private_key=/etc/asterisk/keys/zvezdo4kin.key
disallow=all
allow=opus
allow=alaw
allow=ulaw

force_rport=yes
ice_support=yes
rewrite_contact=yes

dtmf_mode=rfc4733
media_encryption=sdes

В параметрах ENDPOINT пользовательского аккаунта зададим метод шифрования голоса:

  • media_encryption=sdes

Применим настройки рестартом asterisk (иначе транспорт не поднять) и убедимся, что он взлетел:

*CLI> pjsip show transport transport-tls

Transport:  <TransportId........>  <Type>  <cos>  <tos>  <BindAddress....................>
==========================================================================================

Transport:  transport-tls             tls      0      0  0.0.0.0:5066

 ParameterName              : ParameterValue
 ============================================================
 allow_reload               : false
 async_operations           : 1
 bind                       : 0.0.0.0:5066
 ca_list_file               :
 ca_list_path               :
 cert_file                  : /etc/asterisk/keys/asterisk.crt
 cipher                     :
 cos                        : 0
 domain                     : pbx.asterisk-pbx.ru
 external_media_address     : 123.123.123.111
 external_signaling_address : 123.123.123.111
 external_signaling_port    : 0
 local_net                  : 192.168.0.0/255.255.0.0
 method                     : tlsv1
 password                   :
 priv_key_file              : /etc/asterisk/keys/asterisk.key
 protocol                   : tls
 require_client_cert        : No
 tos                        : 0
 verify_client              : No
 verify_server              : No
 websocket_write_timeout    : 100

В дальнейшем, изменения в настройках транспорта, можно будет применять командой core reload, если при настройке транспорта указать allow_reload=true, иначе, по умолчанию, только рестартом.

Теперь осталось, только настроить SIP клиент.

Asterisk TLS SRTP SIP клиент

Софтфон Zoiper прекрасно работает с SRTP, как в десктопном, так и мобильном варианте на Android. Для iPhone хорошо себя зарекомендовала Bria.

Zoiper > Preference > Accounts > General
Стандартные настройки авторизации SIP

asterisk-pjsip-zoiper-tls-srtp

Zoiper > Preference > Accounts > Advanced

  • Use Rport - включить
  • Use Rport Media - включить
  • Use TLS Transport - выбрать
  • TLS with SDES SRTP - выбрать

Tls Client Certificate
Предварительно скопируйте сертификаты в доступную smb директорию

  • Certificate File - пользовательский сертификат 'user.pem'
  • Use sertificate As - Use Certificate

asterisk-pjsip-zoiper-tls-srtp-advanced

Zoiper > Preference > Advanced > Security
TLS options:

  • Extra CA Certificate (PEM) - пользовательский сертификат 'user.pem'
  • Local Domain Certificate - включить и загрузить 'asterisk.pem'
  • Disable Certificate Verification - включить

Страшная надпись предупреждает об опасности: DANGEROUS! DO NOT USE!
Но так как, мы используем само-подписанный сертификат, если не выключить верификацию, то ркгистрация не удастся. Нас предупреждают о опасности использования не удостоверенных доверенным издателем сертификатов, так же как браузер предупреждает, что сайт использует self-signed сертификат.

  • Protocol Suite - TLS v1

asterisk-pjsip-zoiper-tls-srtp-preference-advanced

Когда регистрация успешно завершена, сделаем звонок. Иконка с закрытым замком указывает на защищенное соединение.

zoiper call encrypted srtp tls

Тестирование

Хорошо бы еще убедиться, что сигнализация и голос зашифрованы. Это можно сделать при помощи приложения tcpdump

для сигнализации:

  tcpdump -nqt -s 0 -A -vvv -i eth0 port 5061

где eth0 сетевой интерфейс.

Для голоса:

  tcpdump -nqt -s 0 -A -vvv -i eth0 portrange 10000-20000

 

 Настройка Asterisk

 

Если у вас есть профессиональный интерес в расширении данной статьи – заполните форму запроса!

Cпасибо автору!

Заметка распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

 

     Источник:

  • SIP TLS SRTP
  • 0 Users Found This Useful
Was this answer helpful?

Related Articles

Настройка аsterisk 17 - SIP АТС LXC CentOS 7

  Здесь  показана рабочая инструкция, по которой можно выполнить настройка Аsterisk 17 для LXC...

Установка настроек, подключение абонентов и проверка внутренних звонков в Asterisk

Астериск у нас уже установлен. Для отладки использую бесплатную софтовую звонилку 3CXPhone 6-й...

Установка голосовой почты в Asterisk

Устанавливаем  голосовую почту в в Asterisk   Продолжаем наращивать функционал voip атс. В...

Установка asterisk в OS CentOS 7

Asterisk  и Freepbx  на Centos 7 Asterisk — бесплатное решение для организации voip телефонии....

Установка и настройка Freepbx в OS Сentos 7

Установка и настройка Freepbx на Сentos 7 Скачиваем последнюю версию Freepbx с сайта...