Меню

Настройка srtp на asterisk



Настройка SRTP и TLS/SSL в Asterisk

СЕРГЕЙ ЯРЕМЧУК, автор более 800 статей и шести книг. С «СА» с первого номера. Интересы: сетевые технологии, защита информации, свободные ОС, grinder@samag.ru

Настройка SRTP и TLS/SSL в Asterisk

Одной из распространенных атак на VoIP является подбор регистрационной информации и перехват данных. В базовой настройке сервера Asterisk FreeSWITCH, как, впрочем, и у всех остальных, не используется шифрование

Поэтому реализовать MITM очень просто – достаточно изменить DNS или перехватить сеанс (SIP registration hijacking). Всех этих проблем можно избежать, настроив шифрование.

Использование VPN не всегда удобно для конечного пользователя, кроме этого, увеличиваются накладные расходы на передачу пакета, что нередко является причиной задержек и, как следствие, потери качества связи. Также в этом случае шифруется только канал VPN-серверами, внутри сети переговоры идут по незащищенному каналу, поэтому разговор легко перехватить. Кроме этого, для шифрования переговоров можно использовать «штатные» протоколы – SRTP (Secure Real Time Protocol) или ZRTP (Z and Real-time Transport Protocol).

Протокол SRTP (RFC 3711) позволяет шифровать (AES128) голосовой поток, обеспечивать проверку подлинности (HMAC-SHA1) и требует меньших ресурсов для работы. Но он не обеспечивает защиту процесса аутентификации, поэтому вместе с ним обычно задействуется TLS/SSL.

Протокол ZRTP (RFC 6189) специально для VoIP разработан Филиппом Циммерманом, создателем PGP. В отличие от SRTP он обеспечивает безопасную аутентификацию и шифрование данных, хотя и требует больших ресурсов. Во время инициализации звонка ZRTP использует метод обмена ключами Диффи – Хеллмана, для аутентификации применяется SAS (Short Authentication String). Весь разговор шифруется, пара ключей генерируется для каждого сеанса автоматически. Такой подход не требует PKI, и поддержку протокола легко встроить в уже существующие продукты.

VoIP-серверы Asterisk (от 1.8), FreeSWITCH поддерживают оба варианта: SRTP+TLS/SSL и ZRTP. Многие аппаратные и программные софтфоны также могут работать с защищенными данными: Linphone (TLS, SRTP, ZRTP), Blink (TLS, SRTP), Jitsi (TLS, SRTP, ZRTP), MicroSIP (TLS, SRTP).

Настройка TLS в Asterisk

Сервер Asterisk поддерживает TLS между серверами и сервер-клиент. RSA-ключи, используемые для шифрования, можно сгенерировать с помощью команды openssl genrsa, специальных скриптов astgenkey (astgenkey -n keyname) или ast_tls_cert (копируют ключи в /var/lib/asterisk/keys). Последние не всегда доступны в пакетах или специальных дистрибутивах вроде Elastix, взять их можно на SVN-сервере (svnview.digium.com/svn/asterisk/branches/12/contrib/scripts).

Для активации TLS достаточно прописать в настройках (sip.conf) всего несколько команд:

Проверить подключение легко:

$ openssl s_client host localhost port 5061

В настройках клиентской части просто разрешаем использование TLS:

Теперь подключение безопасно, и подсмотреть регистрационные данные нельзя, хотя сами переговоры не шифруются. Чтобы включить SRTP, достаточно добавить одну строку в файле iax.conf или sip.conf:

Перезапускаем настройки командой sip reload/iax2 reload, опционально можно провериться, загружен ли модуль

CLI> module show like res_srtp.so

Это все. Снифер покажет, что используется SRTP и перехват пакетов невозможен. Буква «Е» напротив подключенных клиентов в выводе iax show peers, означает, что шифрование активно.

Рубрика: IP-телефония / HowTo
Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Источник

Настройка SMTP в Postfix для FreePBX Distro

Опубликовано в Asterisk

Систематически очень важно принимать на электронную почту уведомления о сбоях, статистику по вызовам, принятые факсы и вообще состояние системы. Для этого во FreePBX немало встроенных модулей и механизмов, но практически все используют команду sendmail без авторизации на почтовом SMTP сервере, и все наши уведомления и письма, прямиком улетают в спам, или не проходят фильтры почтовых серверов. Для решения этой проблемы целесообразно использовать аутентификацию SMTP. Для нашего примера мы будем использовать учетную запись от почтовика gmail. В системе уже стоит сконфигурированный почтовый сервер Postfix.

После создания учетной записи в gmail необходимо разрешить непроверенные приложения, для того чтобы наш postfix мог без труда подключиться:

Пропишем учетные данные gmail в наш почтовый сервер. Замените smtp_user и smtp_passwd вашим логином и паролем Gmail и выполните следующую команду:

Создаем хеш файл, потому как пароль не храниться в открытом виде, следующая команда создаст файл с именем sasl_passwd.db в директории /etc/postfix/:

Далее необходимо добавить настройки подключения в файл /etc/postfix/main.cf. В нашем случае предполагается, что корневые сертификаты OpenSSL, расположены в /etc/pki/tls/certs/ca-bundle.crt поэтому:

Рестартуем наш почтовый сервер:

Смотрим логи работы сервера:

И делаем тестовую отправку, сообщения на указанный ящик:

Для изменения имя хоста сервера hostname в CentOS:

После выполняем команду:

Далее открываем фал /etc/hosts и редактируем или добавляем строку:

И реcстартуем сеть:

Если вам не очень хочется разбираться с данными настройками можно купить коммерческий модуль SysAdmin Pro для FreePBX с данным функционалом на борту, либо оплатить работу интеграторов, за решения данного вопроса.

Источник

Использование TLS и SRTP в Asterisk

Включение TLS в Asterisk

Transport Layer Security (TLS) обеспечивает шифрование сигнализации, т.е. шифрует ваш SIP трафик. Это необходимо для того, чтобы злоумышленники не смогли разобрать вашу сигнализацию и не смогли бы подключится к вашей АТС, используя украденные логины и пароли. Для настройки TLS между Asterisk и SIP клиентами необходимо сначала создать ключи безопасности, далее произвести необходимую настройку конфигурационных файлов Asterisk и настроить SIP клиенты для работы по протоколу TLS.

Начнем с создания ключей безопасности.

1) Создадим папку, где будут хранится наши ключи безопасности

2) Далее используем скрипт «ast_tls_cert», для создания самоподписанного центра сертификации (Certificate Authority) и сертификата самого Asterisk.

  • Ключ «-C» используется для описания вашего хоста (DNS или IP адрес)
  • Ключ «-O» используется для определения имени вашей организации
  • Ключ «-d» определяет директорию, где будут находится созданные ключи

3) Далее вам будет необходимо ввести пароль для /etc/asterisk/keys/ca.key

4) Далее создастся файл /etc/asterisk/keys/ca.crt

5) Далее необходимо будет ввести пароль, который вы указывали в шаге 3, далее создастся файл /etc/asterisk/keys/asterisk.key

6) Далее автоматически создастся файл /etc/asterisk/keys/asterisk.crt

7) Далее необходимо будет ввести пароль еще раз, далее создастся файл /etc/asterisk/keys/asterisk.pem — комбинация asterisk.key и asterisk.crt

8) Далее создадим сертификат для SIP клиентов.

  • Ключ «-m client» указывает скрипту, что мы создаем клиентский сертификат
  • Ключ «-c /etc/asterisk/keys/ca.crt» указывает какой Certificate Authority мы используем
  • Ключ «-k /etc/asterisk/keys/ca.key» указывает какой ключ для сертификата мы используем
  • Ключ «-C» используется для описания вашего SIP клиента (DNS или IP адрес)
  • Ключ «-O» используется для определения имени вашей организации
  • Ключ «-d» определяет директорию, где будут находится созданные ключи
  • Ключ «-o» определяет имя создаваемого ключа

9) Далее необходимо ввести пароль для доступа к файлу /etc/asterisk/keys/ca.key.

10) Проверим созданные ключи в каталоге /etc/asterisk/keys/. Должны быть следующие файлы:

Далее устанавливаем файлы dmitry.pem и ca.crt на ваш SIP клиент.
* В телефонах Yealink это делается во вкладке Security > Trusted Certificates.
* В телефонах Snom это делается во вкладке Setup > Certificates.

Если вашему SIP клиенту требуются сертификаты .p12, то необходимо ввести следующую команду:

* Если вы не нашли данного скрипта, то можно его создать самому. Ссылка на скрипт сертификата https://github.com/rillian/asterisk-opus/blob/master/contrib/scripts/ast_tls_cert

* Или скачайте скрипт

Настройка файла chan_pjsip в Asterisk

Теперь необходимо настроить драйвер PJSIP для использования TLS.

1) Откройте файл pjsip.conf для редактирования.

2) В файл необходимо дописать следующую информацию:

Здесь описывается протокол TLS, cert_file, priv_key_file и другие опции. Для использования протокола TLS, мы указали файлы, которые были созданы ранее (файлы cert_file и priv_key_file) и включили метод TLS, как TLSv1.

3) Далее необходимо указать SIP клиенту, чтобы он использовал протокол TLS. Пример ниже:

Мы указали SIP клиенту использовать SDES шифрование для RTP.

Настройка файла chan_sip в Asterisk

Если вы используете chan_sip, то необходимо сделать следующую настройку.

1) Откройте файл sip.conf (или sip_general_custom.conf если это Elastix или FreePBX) для редактирования.

2) В файл необходимо дописать следующую информацию:

В этом блоке мы указали, что на нашем сервере есть поддержка протокола TLS:

  • Asterisk будет прослушивать все сетевые карты (по порту 5061 для TLS)
  • Мы указали каталог сертификата TLS
  • Мы указали каталог сертификата Certificate Authority
  • tlscipher=ALL, т.е. Asterisk поддерживает все виды шифрований
  • tlsclientmethod=tlsv1 — т.е указываем, что SIP клиенты поддерживают протокол tlsv1. Если SIP клиенты не поддерживают tlsv1, то эту строку лучше удалить

3) Далее необходимо указать SIP клиенту, чтобы он использовал протокол TLS. Пример ниже:

Asterisk поддерживает три вида транспортных протоколов: udp, tcp и tls. Возможно использование все трех протоколов, для этого необходимо указывать конкретный протокол, в описании SIP клиентов (файл sip.conf).

Включение SRTP в Asterisk

После того, как мы включили поддержку протокола TLS, нам необходимо обезопасить наши медиа данные, т.е. наши разговоры. Для этого мы включим поддержку SRTP (Secure RTP), т.е. шифрование RTP данных.

Поддержка SRTP обеспечивается libsrtp. libsrtp должен быть установлен на сервер перед установкой Asterisk, в противном случае вы будете видеть следующее:

Если все это сделано, то необходимо сделать настройку SIP клиента в файле sip.conf . Добавим строку encryption=yes в настройки пользователя:

Возьмем двух производителей Yealink и Grandstream.

C недавнего времени, правительство России запретило шифровать данные. Все прошивки, которые выкладываются на сайте официального представительства Yealink в России, не поддерживают протокол SRTP. Но это легко устранить, зайдя на официальный сайт Yealink. Там можно скачать последние прошивки, с поддержкой SRTP.

После обновления телефона Yealink (в нашем примере, мы используем Yealink-T21P). Заходим в веб-интерфейс телефона. Далее Account-Advanced. Найдите параметр RTP Encryption (SRTP) и установите его в одно из значений:

  • Compulsory(Обязательно) – постоянно использовать SRTP
  • Optional(По возможности) – использовать SRTP, когда это возможно
  • Disabled(Отключено) – отключение возможности использовать SRTP

Для включения протокола SRTP на телефонах Grandstream. Вам необходимо зайти в веб-интерфейс, далее Accounts-Audio Settings. Найдите параметр SRTP Mode и установите его в одно из доступных значений:

  • Enabled and Forced(Принудительное использование) – использовать SRTP в принудительном порядке
  • Enabled But Not Forced(Не принудительное использование) – телефон предлагает использовать SRTP, но согласен работать и без него, если сервер не поддерживает SRTP
  • Optional(По возможности) – телефон отдает принятие решения на использование SRTP серверу
  • No(Отключено) – отключение возможности использовать SRTP

Если вы в статье нашли ошибки или несоответствия, мы будем благодарны, если вы напишите нам о них в комментариях.

Источник

АТС в контейнере. Asterisk 14 + Nginx + Freepbx 14 + srtp на Centos 7 в lxc-контейнере Proxmox VE 4

В контейнеры, в наше время, можно установить множество интересных систем
но под катом вы сможете найти лишь относительно стандартную инструкцию по установке asterisk+freepbx. Скуку слегка развеет то, что версии всего ПО «последние стабильные», есть шифрование, вместо apache — nginx, а вся установка под недавно «повзрослевший» lxc. На выходе получится достаточно мобильная, компактная и современная IP-АТС, потребляющая в покое 200-300 Мб ОЗУ

0. Перед установкой

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

At this time we only support commercial modules in the distro. Yoy can not take a non distro system and turn it into the distro (Andrew Nagy. Director of Software Engineering)

Для начала нужно создать контейнер с Centos. Если у вас, как и у меня, proxmox ve — удобнее всего это будет сделать через web-интерфейс. Настройки «оборудования» возьмем минимальные. Потом их можно будет увеличить под нужды: cores: 1 memory: 1024 rootfs: 8G swap: 256, а в качестве шаблона ОС используем centos-7-default_20171212_amd64.tar.xz.

Если у вас такой шаблон недоступен для загрузки — выполните на хосте pveam update. После установки и запуска контейнера, я обычно сразу ставлю ssh, т.к. работать со встроенной web-консолью proxmox не очень удобно.

Репозитории и базовые утилиты

Выбор webtatic обоснован дальнейшей установкой php56w, с которым гарантированно хорошо работает freepbx. Но можно попробовать и Remi.

Ставим mariadb, nginx и полезности. Пакет net-tools тоже пригодится, т.к. в centos7 по умолчанию нет ifconfig, с которым работает freepbx.

Freepbx пока не поддерживает php7, поэтому ставим рекомендованный 5.6.

Запускаем mariadb и nginx, отключаем apache, правим php.ini. Иначе вы не сможете обновлять модули freepbx через web-интерфейс.

После можно запустить mysql_secure_installation но без установки пароля root – этого требует установщик freepbx.

Теперь, когда у нас есть рабочая «заготовка» LEMP-сервера, можно сделать бэкап системы, чтобы потом можно было откатиться назад или использовать бэкап для приготовления другого сервера. Это займет меньше минуты, а полный архив получится около 350МБ.

В принципе, у нас все готово к установке asterisk. SIP и PJSIP мы поставим при сборке через опцию —with-pjproject-bundled. Не хватает лишь srtp для включения поддержки шифрования медиа. Тут небольшой затык, т.к. в документации к asterisk 14 сказано, что для работы srtp нужна libsrtp не ниже 1.5.4, теоретически поддерживается libsrtp 2.х, но практически нужно использовать именно 1.5.4 для достижения стабильного результата. То есть, версия 1.4.4 из репозиториев не пойдет, и нам нужно ее собрать самим.

На всякий случай, можно проверить наличие библиотеки в точке назначения

и через ldconfig

Хинт! Если не указывать make shared_library, то по умолчанию make собирает архивную библиотеку libsrtp.a, и требует промежуточного теста make runtest. Если вам нужна именно libsrtp.a, то заранее скачайте словарь для этого теста.

Скачиваем и разворачиваем Asterisk:

На этом этапе можно, с помощью любезно предоставленного разработчиками, скрипта проверить наличие необходимых пакетов и установить их. Так как мы уже установили часть пакетов, рекомендую выполнять такую проверку в режиме test .

Из вывода скрипта уберем mysql-devel, srtp-devel, а gmime22-devel заменим на gmime-devel. На данный момент пакеты lame и jansson в репозиториях свежие, поэтому мы их тоже поставим из репозиториев:

Далее, загружаем источники звуковых файлов и запускаем конфигурацию asterisk

Если все прошло без ошибок, то запускаем меню конфигурации

Включаем поддержку mp3, выбираем нужные пакеты звуковых файлов в Core Sound Packages, Music On Hold File Packages и Extras Sound Packages. Так же, на всякий случай, проверяем наличие пункта res_srtp в Resource Modules. Готово. Далее:

Теперь можно попробовать запустить asterisk и проверить — подхватил ли он модуль srtp:

Asterisk работает, теперь смотрим загружен ли модуль srtp. В консоли asterisk выполняем:

Если модуль не загружен — пробуем его загрузить:

Если все прошло нормально — останавливаем службу и отключаем автозагрузку asterisk. В дальнейшем его будет запускать служба freepbx.

Заводим пользователя asterisk и выдаем ему права на каталоги

Настраиваем nginx и php-fpm. Для этого удаляем все файлы в /etc/nginx/conf.d/ и /etc/php-fpm.d/, а вместо них создаем свои. В примере указан доступ по IP машины:

Запуск nginx тоже ставим от пользователя asterisk. Иначе не будет работать module admin во freepbx:

Разрешаем автозагрузку php-fpm и перезапускаем nginx:

Update (18.03.2019): Так как свежий астериск работает с mysql через adaptive_odbc — для работы CDR-reports необходимо поставить odbc-коннектор. Можно поставить mysql connector

Однако, хоть CDR и CEL будут работать, вся кириллица будет кракозябрами UTF8.
Чтобы все было корректно — лучше поставить mariadb connector. На данный момент, стабильная версия 3.0.8. Скачиваем, распаковываем и регистрируем библиотеку libmaodbc.so

Теперь нужно в /etc/odbcinst.ini прописать драйвер, добавив секцию:

А, в /etc/odbc.ini изменить драйвер на MariaDB:

Скачиваем и устанавливем FreePBX:

Проверяем. Если все прошло нормально, то мы должны попасть в админку FreePBX по IP-адресу, который указывали в /etc/nginx/conf.d/freepbx.conf Можно задать админский пароль/email и посмотреть ошибки, если таковые имеются.

Далее создаем юнит systemd для автозагрузки freepbx:

Останавливаем freepbx, запускаем службу, проверяем:

Если все хорошо, поздравляю! Ваша АТС готова!

Возможные ошибки, с которыми я столкнулся при написании инструкции:

— Если на веб-gui висит ошибка cannot communicate with Asterisk: Проверьте пароли. /etc/asterisk/manager.conf и /etc/amportal.conf пароль из manager.conf секция [admin] должен совпадать с паролем из amportal.conf

— Если какой-то из модулей помечен, как tampered: Выполните в консоли fwconsole ma refreshsignatures , перезапустите службу freepbx и попробуйте обновить модуль онлайн

Всем спасибо за внимание! Буду рад комментариям и поправкам

Отдельное спасибо Generick, otkachov и chents за найденные неточности!

Источник

Читайте также:  Настройка смарт часов q100s
Adblock
detector