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

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

 
 
Логотип GITA-DEV

Автор: Черноусов Антон aka Gita-Dev
Опубликовано: 27 Авг 2018 (последние правки 1 месяц)

admin asterisk cv dev freepbx git letsencrypt live pbx smtp ssl tar voip символические ссылки

 

Большая инструкция по настройке безопасных звонков (с использованием криптозащиты соединения) имеется на официальном сайте 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.

 

Похожие статьи

Установка и обновление SSL-сертификатов Let's encrypt в Centos 7

Установка и обновление SSL-сертификатов Let's encrypt в Centos 7

Представляю вашему вниманию самый простой способ получить Let's encrypt сертификат в Centos 7. Более сложные методы мы рассмотрим в дальнейшем, а сейчас я продемонстрирую как установить certbot в Centos и получить Let's encrypt сертификат при помощи плагина webroot.


Установка FreePBX на Centos 7

Установка FreePBX на Centos 7

Перевод официальной документации по установке FreePBX в Centos 7. Я прошелся по всем этапам установки и удостоверился, что все работает. Казалось бы, чего там может быть непонятно, просто бери и вводи команды последовательно из официальной документации, но как оказалось переведенная инструкция достаточно актуальная штука.


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

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

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


Плагины которые необходимо установить в FreePBX-Core для полноценной работы

Плагины которые необходимо установить в FreePBX-Core для полноценной работы

В качестве логического продолжения цикла статей по сборке FreePBX Core необходимо рассказать, о том как устанавливать плагины из репозитариев исходного кода. Если вы устанавливали стандартный FreePBX, то наверное у вас разбегались глаза от количества элементов меню, но если вы устанавливаете все по моей инструкции для FreePBX-core, то вы наверное наоборот удивились, что пунктов меню очень мало. Вы можете установить плагины через стандартное меню администрирования плагинов или установить их самостоятельно собрав пакет плагина.


Основы настройки и управления FreePBX

Основы настройки и управления FreePBX

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


Пример настройки транка voip.kz в FreePBX

Пример настройки транка voip.kz в FreePBX

Есть такой известный в Казахстане провайдер услуг IP-телефонии как voip.kz с которым мне недавно довелось поработать, точнее его транк потребовалось добавить в Asterisk для приема входящих звонков и совершения исходящих. Как показала практика конфигурацию методом тыка мне подобрать не удалось и пришлось общаться со службой тех. поддержки провайдера.


Отзывы и комментарии