7. Asterisk 15 LXC Centos 7 SIP TLS SRTP
Данный опус является частью единого цикла заметок o CLI. Для его написания использовалось множество различных источников (скилы крутых специалистов, статьи с тематических сайтов, техническая документация, комментарии с форумов и социальных сетей и т. д и т. п.). К сожалению, указать все источники точно не представляется возможным! По этому, в конце заметки, будет указана ссылка только на основной источник. Материалы, использованные для написания заметки, изменялись автором под конкретную задачу! Вам, скорее всего, тоже придется поступить аналогичным образом для получения желаемого результата)
Asterisk настройка TLS SRTP для PJSIP
Настроим защищенное подключение 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 клиентом требуется:
Убедитесь что модуль 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
В ходе выполнения этой операции, вам будет предложено ввести секретную фразу и повторить ее два раза. Сохраните пароль, в дальнейшем он понадобится для генерации пользовательских сертификатов. В результате будут созданы следующие файлы и помещены в директорию заданную ключом 'd' :
Далее создадим клиентский сертификат, все то же, только параметров побольше. Здесь понадобиться ввести ключевую фразу, заданную при создании сертификата сервера.
./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
В итоге получим такие файлы:
Когда с сертификатами и ключами покончено, можно переходить к настройке 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 налицо:
Сервер находится за NAT, поэтому укажем внешний медиа и сигнальный адрес:
Будем работать по порту 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 пользовательского аккаунта зададим метод шифрования голоса:
Применим настройки рестартом 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
Zoiper > Preference > Accounts > Advanced
Tls Client Certificate
Предварительно скопируйте сертификаты в доступную smb директорию
Zoiper > Preference > Advanced > Security
TLS options:
Страшная надпись предупреждает об опасности: DANGEROUS! DO NOT USE!
Но так как, мы используем само-подписанный сертификат, если не выключить верификацию, то ркгистрация не удастся. Нас предупреждают о опасности использования не удостоверенных доверенным издателем сертификатов, так же как браузер предупреждает, что сайт использует self-signed сертификат.
Когда регистрация успешно завершена, сделаем звонок. Иконка с закрытым замком указывает на защищенное соединение.
Тестирование
Хорошо бы еще убедиться, что сигнализация и голос зашифрованы. Это можно сделать при помощи приложения tcpdump
для сигнализации:
tcpdump -nqt -s 0 -A -vvv -i eth0 port 5061
где eth0 сетевой интерфейс.
Для голоса:
tcpdump -nqt -s 0 -A -vvv -i eth0 portrange 10000-20000
Cпасибо автору!
Источник:
https://asterisk-pbx.ru/wiki/asterisk/pjsip-tls-srtp