суббота, 24 сентября 2016 г.

Почему использовать аппаратные телефоны с TLS в VOIP из мира - это плохая идея.

Собственно купил я телефон своим коллегам аппаратный. Пока один.
Работает он неплохо, До поры до времени.
Здесь нужно понимать, что IP-телефоны хардверные предназначены для использования ВНУТРИ офиса. И программная АТС должна стоять в ОФИСЕ.
Если хотим чтобы телефон всегда был онлайн - никаких извращений с шифрованием голосового трафика трафика по SRTP между этим телефоном и сессионной авторизации с использованием TLS городить не нужно.
Именно номера локальных телефонов нужно элементарно описать в SIP-сервере как SIP-пиры без шифрования трафика и с использованием протокола UDP. Тогда они доступны всегда и мгновенно.

Почему?
Во-первых шифрование трафа в локалке бессмысленно. Если конечно Вы не работайте в компании где все коллеги спецслужбы которые следят за Вами. В таком случае надо смотреть в сторону ieee 802.1x. Эта локалка стоит за корпоративным интернет-шлюзом. Шифрование немного ухудшает качество голоса (я заметил да).
А во вторых что САМОЕ ужасное - так это TLS. Телефону нужно переустановить соединение с сервером после устранения сетевых проблем (если они возникли). Для этого нужно заново пройти TLS -рукопожатие (Handshake), обменяться серт-инфой. Инженера Д-ЛИНК(а) не слишком заморочились с этим гемором в прошивке телефона. Потому если сервер телефонии ребутается то при включеном в аппаратном телефоне TLS-шифровании голоса он отпадает на рандомное время от минуты до бесконечности.

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

Иначе Вы заебетесь ребутать телефоны. Пользователям.
Ну или посмотреть модели от CISCO, говорят в них как бы с этим меньше проблем. Попробую - отпишусь.

четверг, 22 сентября 2016 г.

Настройка простого сервера IP-телефонии ASTERISK с SSL / TLS шифрованием.

У меня тут спросили как настроить SIP сервер чтоб пользователи могли звонить друг другу и все ихние разговоры были зашифрованы. Рассказываю на практике.
Первый шаг - купить VPS, сервер для виртуальной АТС.
Чисто технически подойдет на основе openvz. Ресурсов ASTERISK кушает мало (в районе нескольких мегабайт ОЗУ на звонок), процессор тоже почти не грузит и даже на гиге RAM и 1-2 ядрах CPU выдержит немалое количество клиентов. Практически Asterisk нормально обслуживает до 280 одновременных звонков, выше начинаются проблемы. Если хотите обслуживать большее количество абонентов, советую использовать FreeSwitch.
И вообще для телефонии важна приоритезация трафика, потому как бы есть необходимость настройки шейпинга где только можно. Иначе Васян с его торентами будет мешаться Вам в офисе болтать по SIP'у.

Настройка SIP-телефонии сводиться к 2 этапам
1) Генерация сертификата, которым по TLS протоколу будет шифроваться SIP трафик.
2) Редактирование конфигурации ASTERISK.

Установить asterisk всегда можно из репозиториев, он есть во всех линуксах. В дебьяне / убунте через apt-get install, в centos через yum install

1) Генерим серт!
Информация по генерации TLS серта была взята с этой статьи, автору спасибо https://habrahabr.ru/post/186530/

создаем папочку mkdir /etc/asterisk/certificates/ переходим в нее cd /etc/asterisk/certificates/

openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
openssl genrsa -out key-server.pem 1024
openssl req -new -key key-server.pem -out req-server.csr
openssl x509 -req -days 365 -in req-server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out cert-server.crt
cat /etc/asterisk/certificates/key.pem > /etc/asterisk/certificates/asterisk.pem
cat /etc/asterisk/certificates/cert-server.crt >> /etc/asterisk/certificates/asterisk.pem

В результате этих действий у нас будет достаточно файлов, из которых нам понадобиться только
/etc/asterisk/certificates/asterisk.pem
/etc/asterisk/certificates/ca.crt

все остальное нафиг не нужно, можно удалять. а эти файлы нужно забэкапить.
для надежности файл /etc/asterisk/certificates/asterisk.pem можно изучить любым текстовым редактором, его содержимое должно соответствовать

-----BEGIN RSA PRIVATE KEY-----
ТУТ ДАННЫЕ КЛЮЧА (КАША цифробукв в разных регистрах)
-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
ТУТ ДАННЫЕ СЕРТА (КАША цифробукв в разных регистрах)
-----END CERTIFICATE-----

Содержимое второго файла должно быть:

-----BEGIN CERTIFICATE-----
ТУТ ДАННЫЕ СЕРТА (КАША цифробукв в разных регистрах)
-----END CERTIFICATE-----


На этом закончили.

2) Переходим ко второму этапу - конфигурирование ASTERISK'a

Привожу пример файлов конфигурации. Создадим 2 пользователей с номерами 111 и 222 и разрешим звонить друг другу.

/etc/asterisk/sip.conf

[general]
tlsenable=yes
tlsbindaddr=0.0.0.0:5061
tlscertfile=/etc/asterisk/certificates/asterisk.pem
tlscafile=/etc/asterisk/certificates/ca.crt
tlsclientmethod=tlsv1
dtmfmode=RFC2833
promiscredir = no        ; не запрещаем редиректы между юзерами (перевод звонка на другого)
nat=yes
accept_outofcall_message = yes
outofcall_message_context = messages
auth_message_requests = yes

[111]
host=dynamic
disallow=all
allow=alaw
context=default
type=friend
username=111
nat=yes
transport=tls
encryption=yes
secret=USER_PASSWORD

[222]
host=dynamic
disallow=all
allow=alaw
context=default
type=friend
username=222
nat=yes
transport=tls
encryption=yes
secret=USER_PASSWORD

/etc/asterisk/extensions.conf

[default]
exten => 111,1,Dial(SIP/111)
exten => 222,1,Dial(SIP/222)

[messages]
exten => _XXX,1,MessageSend(sip:${EXTEN},"${CALLERID(name)}"${MESSAGE(from)})

Вот и все, пользователи 111 и 222 могут звонить друг другу с шифрованием голоса и обмениваться текстовыми сообщениями. Это МИНИМАЛЬНАЯ конфигурация секурного сервера телефонии.
Для добавления пользователей нужно редактировать эти два файла. первый файл описывает пользователя и его пароль, а второй файл описывает права пользователя. В контексте мы создаем первый диалплан и разрешаем его использовать пользователям.

Останется только установить софтофон на ваш андроид-смартфон / яблофон / ПК / или купить аппаратный SIP телефон.
Для смартов настоятельно рекомендую клиент bria, он радует качеством звука.
В следующих статьях я расскажу как настроить остальной функционал (по мере надобности). А Астериск умеет все.

1) Аудиоконференции с неограниченым количеством участников. Вызов всех участников отдела в конфу по звонку на определенный номер и добавление себя же (реализуется костылями).
2) Видеоконференции с неограниченым количеством участников.
3) Маршрутизация звонков входящих и исходящих, музыка вместо гудков, перенаправление на секретаря, Голосовое меню.
4) Пиринг с мобильными и городскими операторами через SIP транки и просто через аналоговое оборудование. Поддержка аналогового оборудования для создания мостов
5) Запись разговоров в аудиофайлы (если нужно).
6) Голосовая почта


Для просмотра активных звонков (кто кому звонит и сколько времени) есть команда
asterisk -vvvvvrx 'core show channels' | grep call

Для просмотра подключеных к серверу и готовых звонить / принимать звонки клиентов (айпи, время подключения) есть команда
asterisk -r -x 'sip show peers' | grep -v 'Unspecified'