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-сервере или сервере не имеющим доступа в Интернет.
Для начала подключаем репозиторий 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 адрес.
Соглашаемся с условиями обслуживания.
Соглашаемся или не соглашаемся получать письма от Фонда Электронных Рубежей.
Далее видим сообщение с просьбой добавить 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-серверов как можно быстрее:
После добавления записи жмем 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 сохраняемся и выходим.
Устанавливаем 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
Вывод должен быть таким:
Вы можете создать скрипт для автоматического обновления сертификата и запускать его с помощью 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:
PhonerLite:
И напоследок, если вы хотите чтобы ваши звонки до SIP оператора тоже шифровались, вам нужен оператор, который предоставляет данную услугу, например SIPNET.
Остались вопросы?
Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.