artem
18.03.2015
47310

Настройка TLS в Asterisk. Шифруем SIP и RTP

Если вы фанат(параноик) безопасности то эта статья для вас. Мы рассмотрим настройку безопасного SIP в астериск а так же будем шифровать голос с помощью SRTP.

Конфигурация:
Centos 6.5 minimal x86_64
Asterisk 11.16.0 собранный с srtp
Cофтфоны: Blink 0.9.1.2, Zoiper 3.6, Bria3.3.0 (IOS), Acrobits 5.6 (IOS), Zoiper 1.19 (Android), Bria 3.0.5 (Android), Zoiper 3.3 (Linux)
Телефоны: Snom 820, Grandstream 1450, Fanvil C58P

Немного теории. Как известно, asterisk для сигнального протокола SIP использует UDP порт 5060 (обычно) а так же передает эту информацию в открытом виде, поэтому, перехватив траффик, мы можем получить всю информацию касательно номеров и собственно, сам разговор. Помочь с данной проблемой нам сможет SIP по TLS, который уже в свою очередь будет шифровать сигнальные данные используя при этом порт 5061 (обычно) TCP,  поэтому, даже перехватив траффик, злоумышленник получит информацию в зашифрованном виде, но это касается только SIP протокола, голос шифровать нужно отдельно, тут нам поможет SRTP. Стоит отметить, что использовать только TLS без SRTP не имеет смысла, так как медиа траффик остается без шифрования.

Стоит отметить, что использование TLS не панацея, и не защитит вас от MITM-атак (Man in the middle, человек посередине) если не используется проверка подлинности сертификатов.
Теперь практика. На момент написания статьи мы использовали последнюю актуальную версию asterisk из 11 ветки 11.16.0 (качаем тут) Так же нам понадобится собрать астериск с поддержкой SRTP, для этого нам нужна библиотека libsrtp 1.4.4 (скачать можно тут)

Для начала можно попробовать установить libsrtp из репозитория линукса:

yum install libsrtp-devel

Если пакета нет, то переходим к ручной установке.

Установка libsrtp:

tar zxvf srtp-1.4.4.tgz
cd srtp
./configure CFLAGS=-fPIC
make && make install


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

tar zxvf asterisk-11-current.tar.gz
cd asterisk-11*
./configure —libdir=/usr/lib64 (libdir используем если у вас система x86_64)
makemenuselect (если libsrtp был установле нверно, то в ResourceModules увидим res_srtp)
make && make install

После того как мы собрали астериск с необходимым модулем, нужно настроить sip.conf для работы с TLS, но сначала нам потребуется создать необходимые сертификаты. Необходимый скрипт уже есть в скачанном нами архиве с астериском. Переходим в распакованную папку с астериском а далее в /contrib/scripts
Нас интересует ast_tls_cert

Прежде чем генерировать сертификаты, рекомендую зайти в скрипт и поправить все 365 на 3650 или любое другое число, что бы срок выдачи был не год, а 10 лет.
Так же нам необходимо прописать имя хоста в системе. Редактируем /etc/hosts и пишем в конце первой строчки желаемое имя, например pbx.company.ru

Запускаем генерацию сертификатов:

Идеальный вариант это приобрести сертификат подписанный доверенным ЦС, например от Comodo, на 3 месяца дается бесплатно.

./ast_tls_cert -C pbx.company.ru -O «My Company» -d /etc/asterisk/keys

  • C — имя хоста (dns имя) или ip адрес
  • O —  имя нашей организации
  • d —  директория генерация сертификатов

После запуска скрипта, система предложит ввести ключевую фразу для создания ca.key далее ее нужно повторить и ввести еще два раза для создания asterisk.key и asterisk.pem
На этом можно было и закончить, но в WIKI астериска говорится о генерации клиентского сертификата. Выполним необходимые действия а дальше разберемся, так ли необходим этот сертификат.

./ast_tls_cert -m client -c /etc/asterisk/keys/ca.crt -k /etc/asterisk/keys/ca.key -C phone1.company.ru -O «My Company» -d /etc/asterisk/keys -o 100

  • m client — опция которая указывает на создание клиентского сертификата, не серверного
  • с — путь к сертификату CA
  • k — путь к ключу CA
  • С — DNS-имя или ipадрес подключаемого клиента
  • O — имя организации
  • d — путь для генерации ключей
  • o — имя генерируемых ключей (должно совпадать с номером пира)

После запуска скрипта нам потребуется ввести ключевую фразу от ca.key

Ниже список файлов который мы должны были получить:

  • asterisk.crt
  • asterisk.csr
  • asterisk.key
  • asterisk.pem
  • 100.crt
  • 100.csr
  • 100.key
  • 100.pem
  • ca.cfg
  • ca.crt
  • ca.key
  • tmp.cfg

Переходим к sip.conf

[general]
tlsenable=yes
tlsbindaddr=0.0.0.0:5061
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscafile=/etc/asterisk/keys/ca.crt
tlscipher=ALL
tlsclientmethod=tlsv1
tlsdontverifyserver=no

Здесь мы активируем TLC, указываем на каких интерфейсах и какой порт слушать, указываем сертификат астериска а так же сертификат ЦС (если используем самоподписанные сертификаты для пиров) включаем все виды шифрования (более подробно о типах шифрования можно прочитать на официальном сайте openssl), в последней опции мы либо разрешаем(no) проверку сертификата пира, либо не разрешаем(yes)

Конечно, лучше использовать опцию tlsdontverifyserver=no но, на практике с этим много проблем и опция отрабатывает не совсем так как задумано, даже если сертификат не совпадает с проверкой по ca.crt, астериск все равно позволяет совершать вызовы, хоть в консоль и будут сыпаться ошибки. Поэтому рекомендуем использовать tlsdontverifyserver=yes

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

Если вдруг центров сертификации у вас несколько то необходимо использовать опцию tlscapath и указать путь к папке где лежат сертификаты цс. При такой конфигурации названия ца должны иметь хэш имена SSL_CTX_load_verify_locations. Для этого нам потребуется установить пакет openssl-perl в системе и использовать команду c_rehash /путь/ксертфикатам/ца. При этом файл сертификата ца должен быть с расширением не .crt а .pem (просто переименовать) После применения команды в той же папке появятся файлы типа @a53d7cf5.0

Перезапускаем астериск, и проверяем работоспособность порта командой:

openssl s_client -connect 127.0.0.1:5061

Если все верно видим примерно следующее

Теперь выполним настройки в астериске на пире для работы с TLS и SRTP, в sip.conf активируем для пира tls и включим srtp (encryption):

[100]
type=peer
secret=$tr0NgPas5w0rd
host=dynamic
context=local
disallow=all
allow=alaw
transport=tls
encryption=yes
qualify=yes

Делаем sip reload в консоли asterisk и переходим к настройке клиента, используем софтфон Blink, который нам рекомендуют в wiki астериска:
При создании аккаунта указываем sip адрес как номер @ip-asterisk (100@192.168.10.7)

Во вкладке Media в поле RTP Options опция sRTP Encryption: mandatory, это включает шифрованиевсегда.

Во вкладке Server Settings указываем ip сервера, порт 5061 и протокол TLS

Во вкладке Network, MSRP Transport TLS

Во вкладке Advanced указываем открытый и закрытй ключ клиента, который мы генерировали выше, 100.pem

Если хотим проверить подлинность сервера (asterisk) к которому подключаемся,то ставим галку на Verify server, тогда в глобальной вкладке Advanced нам нужно указать сертификат цс, ca.crt либо этот сертификат должен быть установлен в системе. Если же ваш сервер asterisk использует сертификат подписанный доверенным ЦС то эти действия (выбор сертификата или установка) выполнять не нужно.

 
   

После того как софтфон подключился, пробуем совершить вызов на номер 200, у нас это телефон Snom 820 тоже настроенный на tls/srtp. При совершении вызова, справа, на синем фонем появляется значок замка, что информирует нас о использовании протокола TLS (т.е. сигнальная часть, SIP шифруется)

После того как состоялся вызов, появляется еще один значок, замок на оранжевом фоне, что свидетельствует о шифровании медиа трафика (SRTP)


На телефоне Snom 820 это выглядит похожим образом, в левом углу экрана появляется значок замка, а если во время разговора нажать кнопку Message то получаем более подробную информацию о вызове, где видим использование TLS/SRTP


Если по какой-то причине визуально шифрование на телефоне/софтфоне не отображается, всегда можно проверить в астериске, для это нужно выполнить команду sip show channel и идентификатор канала (можно нажать TAB при этом увидим все активные) И так, в поле Transport мы должны увидеть TLS а в поле Media — SRTP

                         

Ниже скриншоты с софтфонов и телефонов на которых работает шифрование вызовов через астериск:

Blink 0.9.1.2 (Windows)

Zoiper 3.6 (Windows)

Bria 3.3.0 (IOS)

 

Acrobits 5.6 (IOS)


Bria 3.0.5 (Android)

 

Zoiper 1.19 (Android)

 

Snom 820

Grandstream 1450

Fanvil C58P

Ну и напоследок  скриншот из Wireshark



На этом все, если вы хотите что бы звонки через вашего оператора тоже шифровались, то сам оператор связи должен поддерживать TLS/SRTP, иначе трафик от клиента до сервера астериска будет в шифрованном виде, а от астериска до оператора в открытом. Одним из таких операторов, который поддерживает шифрование, является SIPNET.

 

 

Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments

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

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

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

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

ближайшие Вебинары

ONLINE

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