SSL защита подключений к Asterisk (Let's encrypt)

by Anton Chernousov aka GITA-DEV


Опубликовано: 27 Авг 2018 (последние правки 2 месяца, 2 недели)


SSL защита подключений к Asterisk (Let's encrypt)

Наверное каждый кто работал с SIP-технологиями знает, что обмен данными по порту 5060 осуществляется в незащищенном виде и использовать программные телефоны без защиты соединения не рекомендуется, так как ваш пароль можно легко перехватить в управляющем потоке. И если простые аппаратные телефоны вообще в принципе не имеют защиты трафика при помощи SSL и могут использоваться только в рамках локальной или VPN-сети, то программные телефоны уже наверное все поддерживают защиту соедиенения.


Большая инструкция по настройке безопасных звонков (с использованием криптозащиты соединения) имеется на официальном сайте Asterisk: https://wiki.asterisk.org/wiki/display/AST/Secure+Calling+Tutorial, в данной статье рассматривается метод защиты соедеиенения с использованием самоподписанных серверного и клиентского сертификатов. Клиентский сертификат поддерживается мягко говоря не всеми софтфонами не говоря уже о аппаратных VOIP-телефонах (а если и поддерживается, то могут быть нюансы).

В рамках цикла статей по настройке FreePBX я сейчас расскажу как настроить защиту соединения применительно именно к FreePBX, а в дальнейшем уже рассмотрим защиту соединения применительно к чистому Asterisk (когда с циклом по FreePBX закончим и у вас появится некоторый опыт работы с IP-телефонией).

Настройки FreePBX для защиты обмена данными по протоколу PJSIP выглядят следующим образом.

Соотвественно нам необходимо задать файлы сертификатов и ключи которые будут использоваться при шифровании трафика, выбрать режим SSL и обеспечить проверку сервера и клиента (или проверять опционально). Начнем с генерации сертификата который мы будем использовать для теста работоспособности шифрования. FreePBX довольно дружелюбная система (именно поэтому мы с нее и начали) и генерировать сертификаты мы можем при помощи специального плагина с одноименным наименованием.

Установите плагин если он у вас еще не установлен и переходите в раздел Admin -> Certificate manager.

Как вы наверное догадались, нам сейчас потребуется удалить самоподписанный сертификат и создать сертификат Let's encrypt.

Указываем имя хоста, адрес электронной почты и т.п.

Если вы уже используете сертификат от Let's encrypt для зашиты Nginx, то вы можете использовать обходной маневр, и создать самоподписанный сертификат на этот же хост, но потом подменить его сертификатом от Let's encrypt уже установленным в системе.

После того как мы подготовили наш валидный или самоподписанный сертификат мы переходим в настройки PJSIP протокола Settings -> Asterisk SIP Settings -> PJSIP. Как вы наверное догадались мы теперь просто выбираем сертификат созданный в Cert Manager.


Применение параметров TLS-соединения требует парезапуска демона Asterisk:

# /etc/init.d/asterisk restart

Механизм проверки TLS-соединения я подробно описывал в статье "Настройка шифрования трафика протоколов SMTP и IMAP сертификатами let's Encrypt (EXIM+Dovecot)". И вот таким образом выглядит подключение с использованием самоподписанного сертификата:

$ openssl s_client -connect pbx.gita-dev.ru:5061 -tls1 -servername pbx.gita-dev.ru
CONNECTED(00000003)
depth=0 CN = pbx.gita-dev.ru, O = GITA-DEV
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = pbx.gita-dev.ru, O = GITA-DEV
verify return:1
---
Certificate chain
 0 s:/CN=pbx.gita-dev.ru/O=GITA-DEV
  i:/CN=pbx.gita-dev.ru/O=GITA-DEV

И соответственно использование валидного сертификата от Let's encrypt:

$ openssl s_client -connect pbx.gita-dev.ru:5061 -tls1 -servername pbx.gita-dev.ru
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = pbx.gita-dev.ru
verify return:1
---
Certificate chain
 0 s:/CN=pbx.gita-dev.ru
  i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
  i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---

Подменить самоподписанный сертификат реальным сертификатом Let's encrypt можно следующими командами:

# cat /etc/letsencrypt/live/pbx.gita-dev.ru/privkey.pem > /etc/asterisk/keys/pbx.gita-dev.ru.key
# cat /etc/letsencrypt/live/pbx.gita-dev.ru/cert.pem > /etc/asterisk/keys/pbx.gita-dev.ru.crt
# cat /etc/letsencrypt/live/pbx.gita-dev.ru/fullchain.pem > /etc/asterisk/keys/pbx.gita-dev.ru.pem

И лучше сделать сделать символические ссылки к реальным обновляемым сертификатам Let's encrypt чем городить такие костыли. Теперь нам остается лишь проверить как это будет работать в реальных условиях при помощи любого программного телефона с поддержкой TLS.



Обратите внимание на статьи:


Скрипт сборки VOIP клиента Linphone из исходных кодов (для Ubuntu Linux)

Скрипт сборки VOIP клиента Linphone из исходных кодов (для Ubuntu Linux)

Flexisip, Linphone и еще несколько технологий представляют собой OpenSource часть VOIP-инфраструктуры разрабатываемой Belledonne Communications и на данный момент это единственное решение IP-телефонии в Linux где помимо голосовых звонков, дополнительно представлен полноценный групповой чат и видео-звонки. Одним из главных минусов этой технологии является ее слабая распространенность и как следствие она недостаточно документирована, но как показывает практика официальной документации вполне хватает, а в случае чего можно и в исходные коды залезть.


Сборка и установка дополнительных кодеков для Asterisk (Codec Translators)

Сборка и установка дополнительных кодеков для Asterisk (Codec Translators)

Небольшая шпаргалка как в FreePBX-core добавить проприетарные кодеки. Часть кодеков вы можете использовать бесплатно, а например для кодека g729a вам придется приобрести лицензию. Лицензии покупаются на количество конкурентных подключений и для кодека g729a лицензия стоит 8 долларов, что не так уж и дорого если у вас не колл-центр.


Настройка Fail2ban для Asterisk (FreePBX)

Настройка Fail2ban для Asterisk (FreePBX)

Небольшое описание того, как я возился с настройкой Fail2ban в Centos 7. Что интересно, штатные правила конфигурации для FirewallD с виду работают, добавляют заблокированные адреса в соответствующие цепочки, но подключения клиентов все равно не блокируются. Для Asterisk который является просто лакомым кусочком для разного рода жуликов работать без Fail2Ban крайне опасно.


Сборка VoIP-клиента Linphone из исходных кодов с поддержкой проприетарных видео и аудио кодеков

Сборка VoIP-клиента Linphone из исходных кодов с поддержкой проприетарных видео и аудио кодеков

Этот вопрос я уже несколько раз рассматривал, но как оказалось данные немного устарели и сборка новой версии из Github репозитрия осуществляется немного сложнее и появились новые специфичные подводные камни. Правда стоит отметить, что клиент для Linux и Windows стал выглядеть гораздо лучше хотя в продакшн тащить его я не советую, он еще слишком сырой.


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .

Блог это некоммерческий проект! Если вам понравился мой блог и то что я пишу помогло вам на практике, то можете сказать спасибо материально.