Кирилл Страхов
27.06.2022
1871704

Asterisk и let’s Encrypt

В последнее время, из-за пандемии и не только, наблюдается тенденция перевода сотрудников на удаленку. Такой переход позволяет компаниям экономить на оборудовании, зарплатах, аренде и обслуживании офиса. АТС в этом случае переносится в облако или к ней предоставляется удаленный доступ через Интернет. Особенно это актуально для аутсорсинговых call-центров услугами, которых пользуются банки, страховые компании и т.д.. […]

В последнее время, из-за пандемии и не только, наблюдается тенденция перевода сотрудников на удаленку. Такой переход позволяет компаниям экономить на оборудовании, зарплатах, аренде и обслуживании офиса. АТС в этом случае переносится в облако или к ней предоставляется удаленный доступ через Интернет. Особенно это актуально для аутсорсинговых call-центров услугами, которых пользуются банки, страховые компании и т.д.. В подобных случаях стоило бы подумать о защите внутренних и внешних звонков. И тут к нам на помощь приходит SIP over TLS и SRTP. 

SIP over TLS (Transport Layer Security) – шифрует информацию передаваемую по SIP. Позволяет снизить эффект от DoS-атак (Denial of Service – отказ в обслуживании), при которой на сервер поступает  большое количество недействительных запросов INVITE с целью вызвать перегрузку системы. Эти атаки относительно просто реализовать, и они мгновенно отражаются на пользователях системы. SIP реализует схему, которая гарантирует, что для установления связи между вызывающим абонентом и доменом вызываемого абонента используется безопасный транспортный механизм с шифрованием (TLS). Также использование TLS позволяет исключить риск MITM-атаки (Man in the middle — атака «человек посередине»), которая может быть использована для перехвата аутентификационных данных таких, как пароль и имя пользователя. Пароль в SIP хэшируется с использованием MD5, который уже давно не рекомендуется к использованию. В дополнение к этому TLS полностью шифрует SIP, и злоумышленник не сможет получить и анализировать информацию о звонках абонента, которая в дальнейшем может быть использована, например, в социальной инженерии. Шифрование речевых данных в задачи SIP не входит.

SRTP (Secure Real-time Transport Protocol) – это профиль безопасности для RTP (Real-Time Transport Protocol — транспортный протокол в реальном времени), предназначенный для обеспечения шифрования, проверки подлинности и целостности сообщений речевых данных. Используется для минимизации рисков DoS-атак, защиты от атак повторного воспроизведения, при которых переданные ранее данные могут быть записаны и использованы для имитации аутентичности. Также SRTP защищает разговор абонентов от прослушивания.

Далее в статье будет описан сценарий настройки сервера IP-телефонии Asterisk с использованием сертификата от Let’s Encrypt с проверкой DNS, позволяющей подтверждать запросы на выдачу сертификатов по DNS-записи, а не путем предоставления содержимого по HTTP. Такая проверка также позволяет выпускать wildcard-сертификаты, которые потом могут быть использованы, например, на web-сервере или сервере не имеющим доступа в Интернет.

Для написания данной статьи использовалось следующее ПО: CentOS 7.9, Asterisk 18.11.2, Certbot 1.26.0, MicroSIP 3.20.7, Phonerlite 3.3

Для начала подключаем репозиторий EPEL (Extra Packages for Enterprise Linux), в котором содержится snap, с помощью которого мы установим последнюю версию certbot. Certbot — это ACME-клиент от Фонда Электронных Рубежей, написанный на Python и обеспечивающий простой и быстрый способ получения сертификатов. Certbot рекомендован Let’s Encrypt.

$ sudo yum install epel-release -y

Устанавливаем python3 и snapd 

$ sudo yum install -y python3 snapd

Запускаем сервис snapd и устанавливаем certbot

$ sudo systemctl start snapd.service
$ sudo systemctl enable snapd
$ sudo ln -s /var/lib/snapd/snap /snap
$ sudo snap install --classic certbot

После завершения установки видим сообщение:
certbot 1.26.0 from Certbot Project (certbot-eff✓) installed

Создадим нужные для запуска Certbot ссылки:

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Мы можем убедиться, что Certbot успешно установлен:

$ certbot --version
certbot 1.26.0

Теперь нам нужно загрузить и установить хук acme-dns-certbot, что позволит клиенту Certbot работать в режиме проверки DNS.

Загрузим копию скрипта:

$ wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py

После завершения загрузки сделаем скрипт исполняемым:

$ chmod +x acme-dns-auth.py

Затем отредактируем скрипт с помощью любого текстового редактора так, чтобы он использовал Python 3 при запуске:

$ nano acme-dns-auth.py

Добавляем 3 в конец первой строки, сохраняем и выходим:

#!/usr/bin/env python3

Доустанавливаем модуль requests для python3

$ pip3 install requests

Перемещаем скрипт в каталог с Certbot Let’s Encrypt, что бы он мог его загрузить:

$ sudo mv acme-dns-auth.py /etc/letsencrypt/

Чтобы начать использовать acme-dns-certbot, нам необходимо выполнить первоначальную настройку и выдать хотя бы один сертификат.

$ sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.example.com

Мы используем аргумент —manual, чтобы отключить все функции автоматической интеграции, позволяющий просто выпустить сертификат.

С помощью аргумента —manual-auth-hook указываем certbot использовать хук acme-dns-auth

Аргумент —preferred-challenges используется для того, чтобы certbot отдал предпочтение проверке DNS.

Мы также должны указать certbot делать паузу, прежде чем пытаться проверить сертификат, с помощью аргумента —debug-challenges. Это позволит нам создать CNAME запись, необходимую для acme-dns-auth.

Далее по запросу certbot вводим свой email адрес.

Вместо example.com укажите свой домен в аргументе -d

Соглашаемся с условиями обслуживания.

Соглашаемся или не соглашаемся получать письма от Фонда Электронных Рубежей.

Далее видим сообщение с просьбой добавить CNAME запись в нашей DNS зоне.

Please add the following CNAME record to your main DNS zone:
 _acme-challenge.example.com CNAME 256791df-17d7-4c53-a303-33a0fc037feb.auth.acme-dns.io.

Делаем паузу и добавляем CNAME запись в нашей DNS зоне, выставляем параметр TTL как можно меньше, чтобы эта запись обновлялась в кэше DNS-серверов как можно быстрее:

рис. 1

После добавления записи жмем Enter и если все хорошо видим сообщение:

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2022-07-26.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let’s Encrypt:   https://letsencrypt.org/donate
* Donating to EFF:                    https://eff.org/donate-le
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

Теперь приступим к пересборке Asterisk с модулем SRTP.

Если вы устанавливали зависимости с помощью скрипта install_prereq из каталога contrib/scripts, который находится в папке с исходниками, то ничего доустанавливать не нужно. Если нет, то устанавливаем библиотеку libsrtp:

$ yum install -у libsrtp-devel

Пересобираем Asterisk с модулем SRTP:

$ cd /usr/local/src/asterisk-18.11.2/
$ sudo ./configure --without-pjproject-bundled --libdir=/usr/lib64
$ sudo make menuselect

Выбираем модуль res_srtp сохраняемся и выходим.

рис. 2

Устанавливаем Asterisk:

$ sudo make 
$ sudo make install

Копируем файлы сертификата и закрытого ключа:

$ sudo mkdir /etc/asterisk/keys
$ sudo cp /etc/letsencrypt/live/example.com/privkey.pem /etc/asterisk/keys/asterisk.key
$ sudo cp /etc/letsencrypt/live/example.com/fullchain.pem /etc/asterisk/keys/asterisk.cert

Если у вас появится ошибка доступа к каталогу  /etc/letsencrypt/live/, то выдаем права на этот каталог и копируем сертификаты:

$ sudo chmod 755 /etc/letsencrypt/live/

После копирования меняем права, оставляем только пользователю root:

$ sudo chmod 700 /etc/letsencrypt/live/

Меняем владельца на пользователя под, которым запускается Asterisk и выдаем права на каталог /etc/asterisk/keys/:

sudo chown -R asterisk:asterisk /etc/asterisk/keys
sudo chmod go-rwx /etc/asterisk/keys/asterisk.cert /etc/asterisk/keys/asterisk.key

После того как мы собрали Asterisk с необходимым модулем и скопировали файлы сертификата и ключа, нужно прописать в sip.conf следующие параметры:

[general]
tlsenable=yes
tlsbindaddr=0.0.0.0:5061
tlscertfile=/etc/asterisk/keys/asterisk.cert
tlsprivatekey=/etc/asterisk/keys/asterisk.key
tlscipher=ALL

tlsenableвключаем TLS.
tlsbindaddrуказываем Asterisk слушать для TLS порт 5061 на всех адресах.
tlscertfile указываем путь к сертификату.
tlsprivatekeyуказываем путь к закрытому ключу.
tlscipherпараметр, указывающий, какие алгоритмы шифрования SSL использовать или не использовать.

Далее указываем пирам использовать TLS (параметр transport) и SRTP (параметр encryption):

transport=tls
encryption=yes

Выполняем:

$ sudo asterisk -rx "sip reload"

И проверяем доступность TLS на потру 5061 командой:

$ openssl s_client -connect 127.0.0.1:5061

Вывод должен быть таким:

рис. 3

Вы можете создать скрипт для автоматического обновления сертификата и запускать его с помощью cron, пример скрипта:

#!/bin/bash
# Обновляем сертификат
/usr/bin/certbot renew --force-renewal --quiet
# Копируем сертификат и ключ
cp /etc/letsencrypt/live/example.com/privkey.pem /etc/asterisk/keys/asterisk.key
cp /etc/letsencrypt/live/example.com/fullchain.pem /etc/asterisk/keys/asterisk.cert
# Меняем владельца, устанавливаем права на сертификат и ключ
chown -R asterisk:asterisk /etc/asterisk/keys
chmod 600 /etc/asterisk/keys/asterisk.cert /etc/asterisk/keys/asterisk.key
# перезагружаем sip.conf
/usr/sbin/asterisk -rx "sip reload"

Далее настраиваем софтфоны для работы SIP через TLS и SRTP:

MicroSIP:

MicroSIP
рис. 4 — MicroSIP

MicroSIP
рис. 5

PhonerLite:

PhonerLite
рис. 6 — PhonerLite

PhonerLite
рис. 7

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

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

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

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

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


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

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