Соната - сервер за обезбедување SIP

Не знам со што да го споредам обезбедувањето. Можеби со мачка? Се чини дека е можно без него, но со него е малку подобро. Особено ако работи))

Формулација на проблемот:

  1. Сакам да поставам SIP телефони брзо, лесно и безбедно. Кога инсталирате телефон, а уште повеќе кога го реконфигурирате.
  2. Многу продавачи имаат свои формати за конфигурации, свои алатки за генерирање конфигурации и свои начини за заштита на конфигурациите. И навистина не сакам да се занимавам со сите.
  3. Многу решенија за обезбедување, а) се фокусирани на еден продавач или еден телефонски систем, б) се прилично незгодни за имплементација, многу скрипти, параметри, brrr...

Во врска со точка 3, ќе дадам коментар дека има одлични системи за обезбедување за FreePBX, за FusionPBX, за Kazoo, каде што шаблони за телефони од различни продавачи се јавно достапни. Постојат комерцијални решенија каде што можете исто така да ја конфигурирате работата на телефони од различни производители во модулот за обезбедување, на пример, Yeastar PBX.

Хабре исто така е полн со рецепти за тоа како да поставите уреди од различни продавачи: време, два. Но, како што велат, сите системи имаат фатална маана. Така, ќе направиме свој велосипед.

свој формат

Како што велат во xkcd, ако не сакате да се занимавате со 14 формати - излезе со 15-ти. Затоа, ние користиме општи поставки за кој било телефон и правиме сопствен формат за конфигурација json.

Нешто како ова:

{
   "key": "sdgjdeu9443908",
   "token": "590sfdsf8u984",
   "model": "gxp1620",
   "vendor": "grandstream",
   "mac": "001565113af8",
   "timezone_offset": "GMT+03",
   "ntp_server": "pool.ntp.org",
   "status": true,
   "accounts": [
      {
         "name": "Мобилон",
         "line": 1,
         "sip_register": "sip.mobilonsip.ru",
         "sip_name": "sip102",
         "sip_user": "sip102",
         "sip_password": "4321",
         "sip_auth": "sip102"
      }
   ]
}

Значи, во кој било телефон треба да ги конфигурирате линиите за локално време и SIP. Сè е едноставно овде. Можете да видите повеќе примери тука.

обезбедување на вашиот сопствен сервер

Во прирачниците на производителот обично има точка каде што пишува: земете CSV, запишете ја вашата најава-лозинка-мак-адреса, генерирајте датотеки користејќи ја нашата сопствена скрипта, ставете ги под веб-серверот Apache и сè ќе биде во ред.

Следниот пасус од прирачникот обично ви кажува дека можете исто така да ја шифрирате генерираната конфигурациска датотека.

Но, сите овие се класици. Современиот пристап со смути и Твитер вели дека треба да направите готов веб-сервер кој нема да биде моќен како Apache, туку ќе прави само една мала работа. Генерирајте и испраќајте конфигурации користејќи врска.

Да застанеме тука и да запомниме дека скоро сите SIP телефони сега можат да примаат конфигурации преку http/https, така што не размислуваме за други имплементации (ftp, tftp, ftps). Потоа, секој телефон ја знае својата MAC адреса. Затоа, ќе направиме две врски: една лична - врз основа на клучот на уредот, втората општа, која работи со комбинација на заеднички токен и MAC адреса.

Исто така, нема да се задржам на нула-конфигурација, т.е. поставување на телефонот од почеток, т.е. го вклучивте во мрежата и почна да работи. Не, во моето сценарио, вие го приклучувате на мрежата, го правите прелиминарното поставување (поставете го да ја прима конфигурацијата од серверот за обезбедување), а потоа пиете пина колада и го реконфигурирате телефонот по потреба преку обезбедувањето. Дистрибуцијата на опцијата 66 е одговорност на серверот DHCP.

Патем, јас сум целосно уморен да кажувам „обезбедување“, па зборот е скратен на „обезбедување“, ве молам не ме клоцајте.

И уште нешто: нашиот сервер за обезбедување нема UI, т.е. кориснички интерфејс. Можеби засега, но не сум сигурен, бидејќи... Не ми треба. Но, постои API за зачувување/бришење поставки, добивање листа на поддржани продавачи, модели, сè е опишано според каноните на спецификацијата на swagger.

Зошто API, а не UI? Бидејќи Јас веќе имам сопствен телефонски систем, потоа имам извор на ингеренциите, каде што само треба да ги земам овие податоци, да го составам потребниот json и да го објавам на серверот за обезбедување. И серверот за обезбедување, според правилата наведени во датотеката json, ќе му ја даде на бараниот уред неговата конфигурација или не ако уредот не е точен или не ги исполнува критериумите наведени во овој json.

Соната - сервер за обезбедување SIP

Вака испадна микросервисот за обезбедување. Се јави соната, изворниот код е достапен на GitHub, исто така постои подготвена докерска слика, пример за употреба на докер тука.

Клучни карактеристики:

  • во секој случај, ограничен пристап до конфигурацијата по време, стандардно 10 минути. Ако сакате повторно да ја направите конфигурацијата достапна, повторно објавете ја конфигурацијата.

  • еден формат за сите продавачи, сите прилагодувања се отстранети во соната, испраќате стандардизиран json, конфигурирате каква било достапна опрема.

  • сите конфигурации издадени на уредите се евидентирани, сите проблематични области може да се видат во дневникот и може да се видат грешките

  • Можно е да се користи една заедничка врска со токен; секој телефон добива своја сопствена конфигурација со наведување на Mac адресата. Или лична врска преку клуч.

  • API за управување (управување) и обезбедување на конфигурации на телефони (обезбедување) се поделени по порти

  • Тестови. За мене беше многу важно да го поправам форматот на издадената конфигурација и да ги покријат сите вообичаени ситуации на издавање конфигура со тестови. Така што сето тоа функционира јасно.

Конс:

Засега, шифрирањето не се користи на кој било начин во Соната. Оние. секако можеш да почнеш да користиш https со ставање nginx пред соната на пример. Но, сè уште не се користени сопственички методи. Зошто? Проектот е сè уште млад, ги лансираше своите први сто уреди. И, се разбира, собирам идеи и повратни информации. Понатаму, за да биде сè безбедно, за да не може да се шмркаат конфигурите на мрежата, веројатно вреди да се замарате со клучеви за шифрирање, tls и ежот со нив, но ова ќе биде продолжение.

Недостаток на интерфејс. Можеби ова е значителен недостаток за крајниот корисник, но за системски администратор, алатката за конзола е поважна од полноправна апликација. Имаше планови да се направи алатка за конзола, но не сум сигурен дали е потребна?

Резултатот?

Мал и едноставен веб-сервер за обезбедување на неколку модели на телефони со API за управување.

Уште еднаш, како ова треба да функционира?

  1. Инсталирање на соната.
  2. Креираме json конфигурација и ја објавуваме во соната.
  3. Потоа добиваме врска за обезбедување од соната.
  4. Потоа ја означуваме оваа врска во телефонот.
  5. Уредот ја вчитува конфигурацијата

Има само два чекори во следното работење:

  1. Креираме json конфигурација и ја објавуваме во соната
  2. Уредот ја вчитува конфигурацијата

Кои телефони ќе бидат промовирани?

Продавачи Grandstream, Fanvil, Yealink. Конфигурациите во продавачот се горе-долу исти, но може да се разликуваат во зависност од фирмверот - може да биде потребно дополнително да се тестира.

Кои правила можете да ги поставите?

Со време. Можете да го одредите времето до кое конфигурацијата ќе биде достапна.
Со мак адреса. При поднесување на конфигурацијата преку личната врска на уредот, ќе се провери и Mac адресата.
Со ip. По IP адреса од каде е поднесено барањето.

Како да комуницирате со соната?

Преку API, правење http барања. API ќе биде достапен при вашата инсталација. Бидејќи API ја поддржува спецификацијата за swagger, што можете да ја користите онлајн алатка за тест барања до API.

Во ред, одлично. Прекрасни работи, како да го пробате?

Најлесен начин е да се распореди докер-слика врз основа на складиште соната-примерок. Складиштето содржи инструкции за инсталација.

Што ако знам node.js?

Ако имате искуство со користење на JavaScript, тогаш брзо ќе сфатите како сè функционира овде.

Дали ќе има развој на Соната?

Делумно ги постигнав моите цели. Понатамошниот развој е прашање на моите задачи на тема автоматизирање на поставувањето телефон. Исто така, постои можност да ги проширите конфигурациите за да ги конфигурирате копчињата на телефонот, да додадете обезбедување на адресарот, можеби нешто друго, напишете во коментарите.

Резиме и признанија

Ќе ми биде драго да имам конструктивни предлози/приговори/коментари и прашања, бидејќи... Можеби тој опишал нешто неразбирливо.

Искажувам благодарност и до сите мои колеги кои помогнаа, советуваа, тестираа и обезбедија/донираа телефони за тестови. Во реалноста, многу луѓе со кои комуницирав на работа се вклучени во проектот во различен степен, AsterConfд, во разговори и е-пошта. Фала за идеите и размислувањата.

Извор: www.habr.com

Додадете коментар