Приветствую Вас Гость | RSS Воскресенье
10.08.2025, 23:22
Мой сайт
Форма входа
Главная Регистрация Вход
Меню сайта
Мини-чат
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Поиск
Календарь
«  Апрель 2014  »
Пн Вт Ср Чт Пт Сб Вс
 123456
78910111213
14151617181920
21222324252627
282930
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » 2014 » Апрель » 22 » Защита от прослушивания SIP c помощью — TLS + SRTP + шиф�
    03:58
     

    Защита от прослушивания SIP c помощью — TLS + SRTP + шиф�

    13 июля в 21:11

    Защита от прослушивания SIP c помощью — TLS + SRTP + шифрованный туннель и телефона Yealink T26p tutorial

    image
    У вас паранойя? Вам кажется что вас постоянно хотят подслушать? Ведете важные переговоры? Тогда вам сюда!
    В этой заметке я расскажу об основных сложностях при настройке телефона Yealink T26p.
    Для начала мы заставим телефон поднять шифрованный туннель с сертификатами до сервера OpenVPN, а потом пустить внутри тунеля SIP с шифрованной через сертификаты сигнализацией и голосом! (TLS + SRTP).
    Кому интересно прошу под кат.


    Для начала предлагаю ознакомится со схемой работы.
    image
    Смысл работы в следующем — телефоны подключены из любой точки через интернет. Они поднимают шифрованный канал до единственного торчащего в мир порта OpenVPN сервера. А далее с этого сервера телефония идет в недра корпоративной сети, к спрятанному там серверу Asterisk. Но как вы можете заметить, канал до сервера OpenVPN у нас шифрованный, а вот внутри корпоративной сети где много обслуживающего персонала, можно перехватить трафик SIP на каком нибудь из шлюзов и в последствии расшифровать, и узнать о чем был разговор! Этот кусочек сети специально пометил красной линией. Поэтому мы настроим на астериске SRTP + TLS и будем шифровать еще и трафик внутри сети — чтобы он был защищен от недобросовестных работников компании. Таким образом, круг лиц имеющих доступ к разговорам, очень сильно сужается.

    Для установки сервера OpenVPN я использовал dvd образ Centos 6.4. На установке останавливаться не буду- все стандартно.



    Чиним сразу глюк локали.
    export LC_CTYPE=en_US.UTF-8

    Включаем форвардинг на сетевых интерфейсах.
    nano /etc/sysctl.conf #Найти и заменить net.ipv4.ip_forward = 1

    Включаем загрузку сетевого интерфейса при запуске.
    nano /etc/sysconfig/network-scripts/ifcfg-eth0 #Найти и заменить. ONBOOT=yes

    Обновляем CentOS.
    cd /usr/src/ yum update -y

    Добавляем нужный репозиторий.
    wget http://fedora.ip-connect.vn.ua/fedora-epel/6/i386/epel-release-6-8.noarch.rpm rpm -Uvh epel-release-6-8.noarch.rpm

    Ставим требуемые пакеты.
    yum install openvpn git bridge-utils -y

    EasyRSA тепер отдельно и на гитхабе — поэтому:
    git clone https://github.com/OpenVPN/easy-rsa.git cp -r /usr/src/easy-rsa/easy-rsa /etc/openvpn/

    Советую для последующих добавлений и изменений скопировать оригинальный конфиг VPN и закоментировать там все строки, потом будет удобно искать нужные команды для добавления и их синтаксис.
    cp /usr/share/doc/openvpn-2.3.1/sample/sample-config-files/server.conf /etc/openvpn/ nano /etc/openvpn/server.conf #Закоментировать все в конфиге и оставить для наглядности, потом вставляем : port 1194 proto udp dev tun0 ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt cert /etc/openvpn/easy-rsa/2.0/keys/server.crt key /etc/openvpn/easy-rsa/2.0/keys/server.key dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem server 172.19.7.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "route 172.19.7.0 255.255.255.0" keepalive 10 120 user root group root persist-key persist-tun status openvpn-status.log log /var/log/openvpn.log verb 3 mute 20 comp-lzo no

    Меняем метод шифрования с sha256 на MD5 т.к. телефон не понимает первый метод. В сборке easy-rsa есть 3 варианта файла openssl, менять будем во всех сразу чтобы не выяснять какой будет использовать система при генерации ключей и сертификатов.
    cp /etc/openvpn/easy-rsa/2.0/openssl-0.9.6.cnf /etc/openvpn/easy-rsa/2.0/openssl-0.9.6.cnf.orig && sed -e 's/default_md.*=.*sha256/default_md = md5 /g' /etc/openvpn/easy-rsa/2.0/openssl-0.9.6.cnf.orig > /etc/openvpn/easy-rsa/2.0/openssl-0.9.6.cnf cp /etc/openvpn/easy-rsa/2.0/openssl-0.9.8.cnf /etc/openvpn/easy-rsa/2.0/openssl-0.9.8.cnf.orig && sed -e 's/default_md.*=.*sha256/default_md = md5 /g' /etc/openvpn/easy-rsa/2.0/openssl-0.9.8.cnf.orig > /etc/openvpn/easy-rsa/2.0/openssl-0.9.8.cnf cp /etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf.orig && sed -e 's/default_md.*=.*sha256/default_md = md5 /g' /etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf.orig > /etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf

    Далее меняем дефолтные значения
    nano /etc/openvpn/easy-rsa/2.0/vars export KEY_SIZE=1024 export KEY_COUNTRY="RU" export KEY_PROVINCE="CA" export KEY_CITY="Moscow" export KEY_ORG="YOURCOMPANY" export KEY_EMAIL="info@YOURCOMPANY.ru" export KEY_OU="MY"

    Можно приступать к генерации сертификатов:


    Перейдем в нужную директорию, где будем генерировать ключи и сертификаты
    cd /etc/openvpn/easy-rsa/2.0 [root@test 2.0]# source ./vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/2.0/keys [root@test 2.0]# ./clean-all #Создаем самоподписной корневой сертификат и ключ, все ответы можно оставить по умолчанию, кроме Common Name [root@test 2.0]# ./build-ca Generating a 1024 bit RSA private key .........++++++ .......................++++++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [RU]: State or Province Name (full name) [CA]: Locality Name (eg, city) [Moscow]: Organization Name (eg, company) [YOURCOMPANY]: Organizational Unit Name (eg, section) [changeme]: Common Name (eg, your name or your server's hostname) [changeme]:test Name [changeme]: Email Address [mail@host.domain]:

    Создаем сертификат и ключ для сервера
    Все ответы можно оставить по умолчанию
    [root@test 2.0]# ./build-key-server server Generating a 1024 bit RSA private key .........................++++++ .............................++++++ writing new private key to 'server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [RU]: State or Province Name (full name) [MOSCOW]: Locality Name (eg, city) [MOSCOW]: Organization Name (eg, company) [YOURCOMPANY]: Organizational Unit Name (eg, section) [changeme]: Common Name (eg, your name or your server's hostname) [server]: Name [changeme]: Email Address [mail@host.domain]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/2.0/openssl-0.9.8.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'RU' stateOrProvinceName :PRINTABLE:'MOSCOW' localityName :PRINTABLE:'MOSCOW' organizationName :PRINTABLE:'YOURCOMPANY' organizationalUnitName:PRINTABLE:'changeme' commonName :PRINTABLE:'server' name :PRINTABLE:'changeme' emailAddress :IA5STRING:'mail@host.domain' Certificate is to be certified until Mar 20 06:56:48 2023 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated

    Генирируем ключ Диффи-Хелмана
    [root@test 2.0]# ./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ...................................................+.................................................................+...................+..+.........................................................................................................................................+...........+.......................................................+....+..................................................................................................+......................................................................+.................................................................................................+............................+.....................................................................+.............++*++*++*

    Генерируем клиентский ключ (для каждой машины или телефона он должен быть свой)
    Все ответы оставляем по умолчанию
    [root@test 2.0]# ./build-key client1 Generating a 1024 bit RSA private key .++++++ ......++++++ writing new private key to 'client1.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [RU]: State or Province Name (full name) [CA]: Locality Name (eg, city) [Moscow]: Organization Name (eg, company) [YOURCOMPANY]: Organizational Unit Name (eg, section) [changeme]: Common Name (eg, your name or your server's hostname) [client1]: Name [changeme]: Email Address [mail@host.domain]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/2.0/openssl-0.9.8.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'RU' stateOrProvinceName :PRINTABLE:'CA' localityName :PRINTABLE:'Moscow' organizationName :PRINTABLE:'YOURCOMPANY' organizationalUnitName:PRINTABLE:'changeme' commonName :PRINTABLE:'client1' name :PRINTABLE:'changeme' emailAddress :IA5STRING:'mail@host.domain' Certificate is to be certified until Mar 20 07:01:46 2023 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated

    Подготовка файла для подсоединения телефона:


    Создаем папку — внутри должна лежать папка keys и файл vpn.cnf.
    Пример vpn.cnf — вместо XXX естественно ваш адрес сервера:
    client dev tun proto udp remote XXX.XXX.XXX.XXX 1194 resolv-retry infinite nobind ca /yealink/config/openvpn/keys/ca.crt cert /yealink/config/openvpn/keys/client1.crt key /yealink/config/openvpn/keys/client1.key verb 3 mute 20 comp-lzo no

    Внутри папки keys должны лежать соответственно три файла — ca.crt, client1.crt, client1.key. Имена файлов в конфиге и в папке должны соответствовать. Файлы вытаскивать с сервера после генерации любым удобным способом.
    После этого ставим 7zip и архивируем файл vpn.cnf и папку keys в tar архив без сжатия. Либо можете на линуксе из папки с файлом vpn.cnf и папкой keys запустить:
    tar cvf connect.tar ./vpn.cnf ./keys

    Заходим в веб интерфейс телефона. Идем на вкладку Network > Advanced > Vpn. Ставим active = enabled, импортируем файл и нажимаем внизу submit.
    image

    Если телефон не схавал файлик можете его перезагрузить. Увидеть что он подключился к нашему серверу — посмотрев логи:
    tail -n100 -f /var/log/openvpn.log

    Настройка TLS + SRTP на Asterisk.


    Настройку с нуля писать не буду ибо статей море, и мои тоже есть. Расскажу как же сделать сертификаты, включить шифрование и впихнуть все это в телефон.
    Итак на астере надо сделать Certificate Authority.
    mkdir /etc/cert cd /etc/cert/ root@server-sip1:/etc/cert# openssl genrsa -des3 -out ca.key 4096 Generating RSA private key, 4096 bit long modulus .......................++ ...............................++ e is 65537 (0x10001) Enter pass phrase for ca.key: Verifying - Enter pass phrase for ca.key: root@server-sip1:/etc/cert# root@server-sip1:/etc/cert# root@server-sip1:/etc/cert# openssl req -new -x509 -days 365 -key ca.key -out ca.crt Enter pass phrase for ca.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:RU State or Province Name (full name) [Some-State]:MOSCOW Locality Name (eg, city) []:MOSCOW Organization Name (eg, company) [Internet Widgits Pty Ltd]:YOURCOMPANY Organizational Unit Name (eg, section) []:VoIP Common Name (eg, YOUR name) []:YUORCOMPANY CA Email Address []:INFO@YOURCOMPANY.RU root@server-sip1:/etc/cert# root@server-sip1:/etc/cert# root@server-sip1:/etc/cert# ls ca.crt ca.key root@server-sip1:/etc/cert#

    CA создали — далее нужно загрузить в телефон файл ca.crt чтобы он знал что данному СА можно доверять — закладка Security > Trusted Certificates.
    image
    Создание и подпись сертификата сервера и для телефонов — описываю для сервера, а для телефона процедуру повторить.
    root@server-sip1:/etc/cert# openssl genrsa -out key-server.pem 1024 Generating RSA private key, 1024 bit long modulus .....++++++ ...++++++ e is 65537 (0x10001) root@server-sip1:/etc/cert# openssl req -new -key key-server.pem -out req-server.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:RU State or Province Name (full name) [Some-State]:MOSCOW Locality Name (eg, city) []:MOSCOW Organization Name (eg, company) [Internet Widgits Pty Ltd]:YOURCOMPANY Organizational Unit Name (eg, section) []:VoIP Common Name (eg, YOUR name) []:server Email Address []:info@yourcompany.ru Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: root@server-sip1:/etc/cert# root@server-sip1:/etc/cert# root@server-sip1:/etc/cert# root@server-sip1:/etc/cert# openssl x509 -req -days 365 -in req-server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out cert-server.crt Signature ok subject=/C=RU/ST=MOSCOW/L=MOSCOW/O=Yourcompany/OU=VoIP/CN=server/emailAddress=info@yourcompany.ru Getting CA Private Key Enter pass phrase for ca.key: root@server-sip1:/etc/cert#

    Подготовка сертификата для Астериска.
    Структура файла для астера должна выглядеть следующим образом — вначале файл сертификата следующего вида:
    -----BEGIN CERTIFICATE----- MIIDvDCCAyWgAwIBAgIJAPMabsMiJJQPMA0GCSqGSIb3DQEBBQUAMIGbMQswCQYD [...] CfITDxcJBZfeXIPZP52+8FSMlm5985uMvao+emlIUGk11rY61Amxr387grDvgOaI -----END CERTIFICATE-----

    Потом сразу файл ключа:
    -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQCqRw0jpQFn+f+lnDZiZzCRca9ojgu2brO+Q56jnqorvCIlYFC0 [...] FT65O46u6Vmp1gPbNklOEg7TtZUtfacPY2PyeP4KoHaG -----END RSA PRIVATE KEY-----

    Скомпоновать можно через cat:
    root@server-sip1:/etc/asterisk/cert# cat /etc/cert/key.pem > /etc/asterisk/cert/asterisk.pem root@server-sip1:/etc/asterisk/cert# cat /etc/cert/cert-server.crt >> /etc/asterisk/cert/asterisk.pem

    Теперь прописываем в файле sip.conf (или sip_general_custom.conf если это Elastix или FreePBX)
    tcpenable=yes tcpbindaddr=0.0.0.0 tlsenable=yes tlsbindaddr=0.0.0.0 tlscertfile=/etc/asterisk/cert/asterisk.pem tlscafile=/etc/cert/ca.crt

    Когда все готово нужно на конкретном extension включить TLS и SRTP.

    Таким же образом готовим файл для телефона и загружаем его в меню Security > Server Certificates
    image

    Данной статьей ни в коем случае не хочу претендовать на полноту материала. Но очень хотелось донести эти важные нюансы настройки для человека который может с этим в последствии столкнуться. У меня на выяснения всех нюансов выписки и подготовки сертификатов для телефона и астериска ушла неделя. Если у вас есть предложения как можно сделать — лучше\быстрее\правильнее, то с удовольствием почитаю в комментариях!

    Update. При настройке телефона Business HD IP DECT Phone W52P выяснилась особенность заливки в него конфигов. Нужно в путях прописывать без "/yealink":
    ca /config/openvpn/keys/ca.crt cert /config/openvpn/keys/client1.crt key /config/openvpn/keys/client1.key
    В дополнение хотелось бы сказать что телефон Business HD IP DECT Phone W52P в пароле Asterisk-а на extension понимает символ "&", а телефон Yealink T26p не понимает.
    Для лучшей стабильности в телефоне на закладке Accounts изменили Login expire на 600 и Subscribe period 300.
    Просмотров: 252 | Добавил: riefortion | Рейтинг: 0.0/0
    Всего комментариев: 0

    Copyright MyCorp © 2025Создать бесплатный сайт с uCoz