Схема підключення

Безпека підключення
При передачі SIP сигналізації по UDP та використанні RTP для передачі голосу вся інформація передається у відкритому вигляді, що робить можливим перехоплення третіми особами реєстраційних данних та аудіо дзвінка.
Для забезпечення безпеки клієнтських підключень з боку lifecell застосовується шифрування сигнального і голосового трафіку за рахунок використання протоколів SIP TLS та SRTP.
Протокол TLS має на увазі обмін сертифікатами та перевірку сертифіката сервера від довіреного центру сертифікації.
Авторизація та реєстрація
Для здійснення вихідних дзвінків можливі два варіанти авторизації:
- Авторизація за логіном (номеру телефону) і паролю
- Авторизація по IP адресою
Точки підключення в залежності від типу авторизації:
Image Modified
При схемі підключення сервер-сервер кожна номерна лінія конфигурується як окремий SIP канал зі своїми данними для авторизації. Наприклад, в Asterisk в файлі sip.conf створюються окремі піри (peer), що описують SIP канали в сторону SIP GW lifecell окремо для кожного номера.
Для отримання вхідних дзвінків можливі два варіанти маршрутизації:
- Реєстрація на SIP GW ( "c реєстрацією")
- Маршрутизація дзвінків на статичний IP адреса ( "без реєстрації")
У варіанті "з реєстрацією", кожну номерну лінію необхідно "зареєструвати". Наприклад, в Asterisk для цього необхідно використовувати директиву register в файлі sip.conf в секції [general].
У варіанті "без реєстрації", клієнту необхідно повідомити статичну адреса (або список адрес) і порт куди необхідно маршрутизувати виклики.
На фаєрволі з боку клієнта повинен бути дозволений обмін SIP сигналізацією з SIP GW lifecell, а також обмін голосовою інформацією з усім діапазоном RTP медіа серверів lifecell.
Зміни в налаштуваннях залежно від типу підключення
...
Expand |
---|
title | Dynamic IP, З реєстрацією |
---|
|
sip.conf register = tls://380931700000:PASSWORD@msbc.lifecell.ua:5061/380931700000; (SRTP) або register = tls://380931700000:PASSWORD@msbc.lifecell.ua:5081/380931700000; (RTP) [380931700000] type = friend insecure = port,invite username = 380931700000 secret = PASSWORD host = msbc.lifecell.ua port = 5061 ;(5061 – SRTP, 5081 - RTP) transport = tls encryption = yes ;(yes - SRTP/no - RTP) context = fromLifecell disallow = all allow = alaw allow = ulaw extentions.conf [fromLifecell] exten => 380931700000,n,Dial(Sip/900) |
Expand |
---|
|
sip.conf register = tls://380931700000:PASSWORD@csbc.lifecell.ua:5061/380931700000; (SRTP) [380931700000] type = friend insecure = port,invite username = 380931700000 secret = PASSWORD host = csbc.lifecell.ua port = 5061 transport = tls encryption = yes context = fromLifecell disallow = all allow = alaw allow = ulaw extentions.conf [fromLifecell] exten => 380931700000,n,Dial(Sip/900) |
Expand |
---|
|
[380931700000] type = friend insecure = port,invite username = 380931700000 host = csbc.lifecell.ua port = 5071 transport = tls encryption = yes context = fromLifecell disallow = all allow = alaw allow = ulaw extentions.conf [fromLifecell] exten => 380931700000,n,Dial(Sip/900) |
Expand |
---|
|
sip.conf register = tls://380931700000:PASSWORD@csbc.lifecell.ua:5081/380931700000; (RTP) [380931700000] type = friend insecure = port,invite username = 380931700000 secret = PASSWORD host = csbc.lifecell.ua port = 5081 transport = tls encryption = no context = fromLifecell disallow = all allow = alaw allow = ulaw extentions.conf [fromLifecell] exten => 380931700000,n,Dial(Sip/900) |
...
Приклад конфігурації Asterisk PBX
Warning |
---|
Увага! Для того, щоб дзвінки не обривались на 30-й секунді, версія Asterisk повинна бути не нижче 1.8.21.0 або 11.3.0. |
Expand |
---|
title | Створення сертификату сервера |
---|
|
1. Створити папку, где будуть зберігатися ключі безпеки yourcompany.com -O "YourCompanyName" -d /etc/asterisk/certificate
2. Створити самоподпісанний центр сертифікації (Certificate Authority) та сертифікат самого Asterisk. Для цього можна використовувати скрипт "ast_tls_cert". # cd /etc/asterisk/certificate/ # wget https://raw.githubusercontent.com/rillian/asterisk... # chmod +x ast_tls_cert # ./ast_tls_cert -C pbx.yourcompany.com -O "YourCompanyName" -d /etc/asterisk/certificate
Ключ "-C" використовується для опису вашого хоста (DNS або IP адреса) Ключ "-O" використовується для визначення імені вашої організації Ключ "-d" вказує директорію, где будуть зберігатися створені ключі
3. Ввести пароль для /etc/asterisk/certificate/ca.key
4. Автоматично створюється файл /etc/asterisk/certificate/ca.crt
5. Ввести пароль, який ви вказали в пункті 3, автоматично створюються файли /etc/asterisk/certificate/asterisk.key /etc/asterisk/certificate/asterisk.crt
6. Ввести пароль ще раз, створюється файл /etc/asterisk/certificate/asterisk.pem как комбинация asterisk.key та asterisk.crt
7. Додати сертифікати lifecell в ca.crt. cat >> /etc/asterisk/certificate/ca.crt <<EOF |
Expand |
---|
|
-----BEGIN CERTIFICATE----- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt 43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg 06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEiTCCA3GgAwIBAgIQAlqK7xlvfg1sIQSyGuZwKzANBgkqhkiG9w0BAQsFADBh MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD QTAeFw0xNzExMDYxMjIzNTJaFw0yNzExMDYxMjIzNTJaMFwxCzAJBgNVBAYTAlVT MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j b20xGzAZBgNVBAMTElRoYXd0ZSBSU0EgQ0EgMjAxODCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBAMoIXuVTipccHkMvtoqnVumLhEOorJ16VYJ6FEuGty+P Up8cyrEgW2+6It2mnC142ukGCE6+E6bry7s+uQUMPkrh8DIfE071BsVHc4k+gKOL 8QEkm6OZZpJraK0NLbTNcqL0+ThaZaa0jFPBCBqE+P0u8xF1btxqMSmsDYfMk2B4 3yW6JlmRxoNSNabKnLgoGs7XHO4Uv3ZcZas4HnnpfMxJIyaiUlBm0Flh/6D+mkwM n/nojt4Ji7gVwaQITCacewbb/Yp0W1h+zWOkkS9F8Ho8lAuKfLIFqWeTn2jllWNg 2FiVX+BV75OnETt85pLYZkTgq72nj82khXhBJFTn2AMCAwEAAaOCAUAwggE8MB0G A1UdDgQWBBSjyF5lVOUweMEF6gcKalnMuf7eWjAfBgNVHSMEGDAWgBQD3lA1VtFM u2bwo+IbG8OXsj3RVTAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUH AwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8CAQAwNAYIKwYBBQUHAQEEKDAm MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQgYDVR0fBDsw OTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0R2xvYmFs Um9vdENBLmNybDA9BgNVHSAENjA0MDIGBFUdIAAwKjAoBggrBgEFBQcCARYcaHR0 cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzANBgkqhkiG9w0BAQsFAAOCAQEARE2F 5d0cgozhZNWokCLfdhhl6mXSOyU3SoPamYcWfLH1CzMwD8a1+pFvwHIQfvlwXFH8 MrjB3C+jVobNbVWRrgqS3Jsa0ltRH/Ffs6ZTgP4WJYm1SNpUbgR7LWUD2F+PTvKB M/gf9eSyqP4OiJslYaa38NU1aVAxZI15o+4xX4RZMqKXIIBTG2V+oPBjQ1oPmHGA C/yWt2eThvb8/re7OpSpUdJyfGf97XeM4PiJAl6+4HQXhjwN7ZPZKrQv9Ay33Mgm YLVQA+x9HONZXx9vvy8pl9bu+NVYWKGxzGxBK0CBozmVUCeXQPJKPTZleYuNM18p U1P8Xh1CDguM+ZEoew== -----END CERTIFICATE----- EOF |
Expand |
---|
|
1. В файлі sip.conf (або sip_general_additions.conf, якщо використовується Elastix/FreePBX) необхідно дописати наступне: [general] tlsenable=yes tlsbindaddr=0.0.0.0 tlscertfile=/etc/asterisk/certificate/asterisk.pem ; локальний сертифікат tlscafile=/etc/asterisk/certificate/ca.crt ; довірений центр сертифікації tlscipher=ALL tlsclientmethod=tlsv1
У цьому блоці вказано, що на сервері є підтримка протокола TLS з наступними параметрами: * Asterisk слухає усі сереживні карти (порт 5061 для TLS) * Директорія сертифікату TLS * Директорія сертифікату Certificate Authority * Asterisk підтримує усі види шифрування * SIP клієнти підтримують протокол tlsv1 (якщо SIP клієнти не підтримують tlsv1, цю строку кріще видалити)
2. Якщо у вас в sip.conf не прописано параметр tlsdontverifyserver=yes необхідно додати 2 сертификата, які висилає lifecell, в кінець файлу /etc/asterisk/certificate/ca.crt (див. п.7 попереднього розділу) |
Expand |
---|
title | Налаштування реєстрації в sip.conf |
---|
|
У разі вибору параметра "з реєстрацією", кожну номерну лінію необхідно "зареєструвати". Для SRTP: register => tls://38044232XXXX:verysecretpass@csbc.lifecell.ua:5061/38044232XXXX; прописується для кожної номерної лінії. Для RTP: register => tls://38044232XXXX:verysecretpass@csbc.lifecell.ua:5081/38044232XXXX; прописується для кожної номерної лінії. У варіанті "без реєстрації" реєструвати лінію не потрібно. |
Expand |
---|
title | Налаштування peer в sip.conf |
---|
|
[38044232XXXX] ; peer, SIP-канал в сторону lifecell, прописується для кожної номернії лінії. host=csbc.lifecell.ua ; DNS ім'я, інакше можливі помилки при валідації TLS сертифіката якщо вказана IP адреса port=5061 ; (port=5061 для SRTP; port=5081 для RTP; port=5071 для авторизації по IP) transport=tls insecure=port,invite encryption=yes ; (для SRTP або encryption=no для RTP) type=friend username=38044232XXXX fromuser=38044232XXXX secret=verysecretpass ;тільки для авторизації за паролем context=incoming disallow=all allow=ulaw allow=alaw [1001] ; внутрішній номер type=friend username=1001 secret=1001 host=dynamic transport=udp encryption=no context=outgoing disallow=all allow=ulaw allow=alaw Налаштування extensions.conf [incoming] exten => 38044232XXXX,1,Dial(Sip/1001) exten => 38044232XXXX,n,Playback(vm-nobodyavail) exten => 38044232XXXX,n,Hangup() [outgoing] exten => _X.,1,Dial(Sip/38044232XXXX/${EXTEN}) exten => _X.,n,Hangup() Якщо у вас декілька каналів (наприклад, 38044232XXX1, 38044232XXX2), можливо налаштувати почергове використання для кожному наступного виклику: exten => _X.,1,Gotoif(${DB_EXISTS(provider/next)}?4) exten => _X.,2,Set(DB(provider/next)=38044232XXX1) exten => _X.,3,Goto(1) exten => _X.,4,GoSub(${DB_RESULT},1) exten => _X.,5,Dial(SIP/${DB_RESULT}/${EXTEN},30) exten => _X.,6,Congestion() exten => _X.,7,Hangup() exten => 38044232XXX1,1,Set(DB(provider/next)=38044232XXX2) exten => 38044232XXX1,n,Return exten => 38044232XXX2,1,Set(DB(provider/next)=38044232XXX1) exten => 38044232XXX2,n,Return У результате перший виклик поступає на номер 38044232XXX1, другий - на номер 38044232XXX2, третій - знову на номер 38044232XXX1 і т.д. Налаштування rtp.conf [general] rtpstart=10000 rtpend=20000 |
Expand |
---|
|
Завжди повинен бути Content-Type: application/sdp |
Приклад конфігурації PJSIP