Meriv çawa Zabbix bi Asterisk re ji qutiyê ve girêdide

Di gotara berê de "Zabbix - berfirehkirina sînorên makro" Min ji we re got meriv çawa danişînek destûrnameyê werdigire û wê di makroyek mêvandar a herêmî de biguhezîne. Di vê gotarê de ez ê ji we re vebêjim ka meriv çawa Zabbix bi Asterisk re bêyî nivîsar û nermalava derveyî ve girêdide.

Fikra "hevaltiyê" ya van her du pergalan demek dirêj berê, bêyî sazkirina nermalava an nivîsarên din, çêbû. Googlêdanek bilez gelek çareseriyên mimkun peyda kir, ew hemî bi vê yekê ve girêdayî bû ku nivîsan (li Pyha, Bash, Python, hwd.) li serverê barkirin, û hûn ê kêfxweş bibin. Min xwest ku çavdêriya "derveyî qutikê" bicîh bikim - bêyî nivîsarên derveyî û sazkirina nermalava zêde li ser serverê bi çavdêrî û PBX.

Min bi tevahî 4 rojên xebatê bi vê yekê re derbas kir, lê encam hêjayî wê bû. Karkirina bi navbeynkariya AMI, vedîtina asta nizm, teşqele, û ya herî girîng, girêdana PBX û hemî mîhengên din naha nêzî 15 hûrdem digire.

Zabbix 4.4 heye, bi qasî 100 perçeyên Asterisk guhertoya 13. Hin PBX bi navgîniya webê ya FreePBX re, hin bi konsolek tazî, komek hîle û entegrasyonê bi navgînek dialplan ve têne.

Distandina daneyan ji PBX

Yekem û xala sereke ya ku divê were çareser kirin bidestxistina daneyan di derbarê peer û qeydên SIP de ye. Ji bo vê armancê, PBX xwedan navberên konsolê AGI, AMI, ARI û SSH ye. Ji ber sedemên diyar, min modulên zêde nehesiband.

Pêşî divê em zanibin ev agî, amî, arî çi ne...

  • AGI - di plansaziyê de nivîsan bikar tînin. Bi gelemperî ji bo rêveberiya bangê tê bikar anîn.
  • AMI - dikare hemî agahdariya pêwîst peyda bike, bi porta 5038, mîna Telnet, dixebite. Li gorî me!
  • ARI - nûjen, nûjen, JSON. Gelek îmkan hene, formata daneyê ji bo Zabbix tê fêm kirin, lê ji bo min tiştek sereke tune: hûn nekarin qeydkirina sip kontrol bikin. Kêmasiyek din jî ev e ku ji bo hevalan tenê du dewlet serhêl / negirêdayî hene, her çend bêtir dewlet hene û bikêr e ku meriv wan di dema teşhîskirinê de li ber çavan bigire.
  • SSH dikare her tiştî bike, lê carinan ji ber "sedemên ewlehiyê" destûr nayê dayîn. Dibe ku fikir cuda bin, ez ê neçim nav wan.

Lêbelê, digel hemî kêmasiyên xwe, ARI% 90 ji hemî hewcedariyên çavdêriyê digire.

Zabbix û Telnet - xemgîniya min

Ez AMI-yê baş dizanim di yek carî de min şopandina windahiyan di danûstendinên bi dabeşkirinê de ji hêla ofîsên dûr ve, rêveberiya bangê, hwd. Bi Telnet re, her tişt jî pir zelal e: pêwendiyê vekin, fermanan bişînin û bersivê bixwînin. Tiştê ku min kir ev bû, lê encamê ez xemgîn kirim.

Telneta Zabbixê ne wekî Telneta konsolê ye. LinuxEw hinekî hêsantir e û ji bo pejirandina têketin/şîfreya standard hatiye sêwirandin. Ger mantiqa pejirandinê cuda be û cotek têketin/şîfreyê neyê xwestin, çewtiyek çêdibe. Piştî ku min hewl da ku pêdiviya pejirandinê derbas bikim, min dest bi lêgerîna koda çavkaniyê ya modula Telnet kir.

Min fêm kir ku heya daxwazek têketin û şîfreya kevneşopî nebe, ez ê pêş de neçim. Tenê ji bo kêfê, min her tiştê ku bi destûrnameyê ve girêdayî ye ji kodê derxist û her tişt ji nû ve ava kir. Works! Lê pêwîstiyan pêk nayîne. Berdewam bike…

Ka em vegerin ser lêgerînê

Min dîsa belgeya ARI-yê ji nû ve xwend, ceribandinên din kir - li vir qeydên sip tune. Ziyafet hene, sohbet hene, bexçe hene, lê qeyd tune. Di hin xalan de ez jî fikirîm, ma em bi rastî hewceyê qeydkirina SIP-ê ne?

Bi rasthatinek balkêş, di vê gavê de daxwazek din ji bikarhêner tê, bi pirsgirêkek bangên derketinê. Pirsgirêk ev bû ku qeydkirina sip dicemidiya û bi tenê ji nû ve destpêkirina modulê hate çareser kirin.

asterisk -rx "sip reload"

Dê pir xweş be ku meriv li ser tevneyê bigihîje AMI: ew ê hemî pirsgirêkan çareser bike, ez fikirîm. Ez di vî alî de dest bi kolandinê dikim, û bi rastî yekem rêza lêgerînê ber bi belgeya fermî ya Asterisk ve diçe, ku dibêje ku vebijarkek ji bo karên min heye. webenabled di dosyayê de /etc/asterisk/manager.conf, ku divê di beşê de ERÊ were danîn [giştî]

Piştî vê yekê, bi riya daxwaznameyek malperê ya birêkûpêk a formê http://ats:8089/mxml?action=SIPshowregistry em hemû agahiyên pêwîst distînin.

Dema ku hûn pêwendiya FreePBX bikar bînin, hûn nikarin vê vebijarkê bi riya webê çalak bikin, hûn hewce ne ku bi guheztina pelê manager.conf bi konsolê ve çalak bikin. Dema ku guhertinên mîhengê bi navgîniya malperê têne çêkirin, FreePBX wê jê nake.

Min demek dirêj bi cûrbecûr entegrasyonên Asterisk re xebitî, lê min çu carî nedîtiye ku ev taybetmendî li deverek hatî behs kirin. Ez şaş bûm ku kes vê rêbazê danûstendina bi PBX-ê re diyar nake. Tewra bi taybetî bikêrhatî bû ku meriv li ser vê mijarê li agahdarî bigere: bi pratîkî tiştek tune an jî ew ji bo karên bi tevahî cûda hate bikar anîn.

WEB AMI - çi celeb cenawir?

Zêdekirina vebijarkek webenabled pelê kirin manager.conf bi riya webê ve gihîştina tevahî rêveberiya ATS peyda kir. Hemî fermanên ku bi navgîniya AMI-ya birêkûpêk ve têne peyda kirin naha li ser tevneyê ne, hûn dikarin bi riya soketek li bûyerên ji PBX-ê guhdarî bikin. Prensîba operasyonê ji konsolê AMI ne cûda ye. Piştî çalakkirina vê vebijarkê, hûn dikarin li navnîşanên jêrîn bi PBX re têkilî daynin:

https://ats:8089/manager - rûpelek malperê bi navgînek hêsan a ji bo ceribandin û şandina bi destan daxwazan. Hemî bersiv di nav HTML-a xwendinê de têne format kirin. Ji bo çavdêriyê ne pir maqûl e.
https://ats:8089/rawman - Tenê derana nivîsê, forma mîna konsolê AMI
https://ats:8089/mxml - Tenê derana nivîsê, di formata XML de. Li gorî me!

Meriv çawa Zabbix bi Asterisk re ji qutiyê ve girêdide

Paşê ez fikirîm: “Çareserî ev e! Niha dê her tişt amade be! Lemûna lîmonê ya hêsan-pişk, "lê ji bo şabûnê pir zû bû. Ji bo bidestxistina agahdariya ku em hewce ne, bes e ku em daxwaznameyek GET bi çalakiya pêwîst bikar bînin çalakî, ku di bersivê de xml bi navnîşek hemî tomar û rewşa wan vedigere. Ev gişt pir xweş e, lê ji bo ku hûn danişînê ji cookie-yê bi bîr bînin divê hûn destûr bidin. Dema ku hûn di gerokê de ceribandin, hûn li ser vê pêvajoyê nafikirin.

Pêvajoya desthilatdariyê

Pêşî em navnîşana navnîşan bikin http://ats:8089/mxml?action=login&username=zabbix&secret=zabbix, di bersivê de, server bi rûniştina destûrnameyê re cookieyek ji me re dişîne. Daxwazek HTTP bi vî rengî xuya dike:

https://ats:8089/mxml?action=login&username=zabbix&secret=zabbix

Host: ats:8089
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1

Bersiv:

GET: HTTP/1.1 200 OK
Server: Asterisk/13.29.2
Date: Thu, 18 Jun 2020 17:41:19 GMT
Cache-Control: no-cache, no-store
Content-type: text/xml
Set-Cookie: mansession_id="6f5de42c"; Version=1; Max-Age=600
Pragma: SuppressEvents
Content-Length: 146

<ajax-response>
<response type="object" id="unknown">
<generic response="Success" message="Authentication accepted"/>
</response>
</ajax-response>

Ji bo ku hûn li wir bixebitin hûn hewce ne mansession_id="6f5de42c", ango cookie destûr bixwe.
Naveroka ku hûn tenê hewce ne ku ji bo bersivê kontrol bikin "Authentication qebûl kirin" Dûv re, ji bo hemî bangên servera PBX-ê, em ê hewce bikin ku cookieyek destûrnameyê li daxwazê ​​zêde bikin.

https://ats:8089/mxml?action=SIPpeers

Host: ats:8089
Connection: close
Cookie: mansession_id="6f5de42c"

Bixwînin ka meriv çawa cookieyek destûrnameyê bistîne û di daxwazên din de li vir bikar bîne: "Zabbix - berfirehkirina sînorên makro»

Ji bo afirandina hêmanên şopandinê li Zabbix ez ê tespîtkirina otomatîk bikar bînim.

Vedîtina otomatîkî

Ji bo ku hûn bixweber qeydan nas bikin û dewletên peer bişopînin, hûn hewce ne ku bi navnîşana jêrîn re têkilî daynin: https://ats:8089/mxml?action=SIPshowregistry an https://ats:8089/mxml?action=SIPpeers

Di bersivê de, PBX bersivek XML ji me re vedigerîne:

<ajax-response>
<response type="object" id="unknown">
<generic response="Success" eventlist="start" message="Registrations will follow"/>
</response>
...
<response type="object" id="unknown">
<generic event="RegistryEntry" host="login.mtt.ru" port="5060" username="111111" domain="login.mtt.ru" domainport="5060" refresh="105" state="Registered" registrationtime="1592502142"/>
</response>
<response type="object" id="unknown">
<generic event="RegistryEntry" host="voip.uiscom.ru" port="5060" username="222222" domain="voip.uiscom.ru" domainport="5060" refresh="105" state="Registered" registrationtime="1592502142"/>
</response>
<response type="object" id="unknown">
<generic event="RegistryEntry" host="voip.uiscom.ru" port="5060" username="333333" domain="voip.uiscom.ru" domainport="5060" refresh="105" state="Registered" registrationtime="1592502142"/>
</response>
...
</ajax-response>

Di bersivê de gelek zibil heye, ji ber vê yekê di pêşprocessing de em wê bi şablonê fîlter dikin XPath: //response/generic[@host]
Paşê şahî dest pê dike. Ji bo ku bi tespîtkirinê re bixebitin û bi dînamîkî hêmanan biafirînin, divê bersiv di formata JSON de be. XML ji bo tespîtên otomatîk nayê piştgirî kirin.

Ji bo veguheztina XML-ê ji JSON-ê, min neçar ma ku hinekî bi veguheztina otomatîkî bileyizim, ji bo ku min di JS de skrîptek çêkir.

Meriv çawa Zabbix bi Asterisk re ji qutiyê ve girêdide

Xalek balkêş: di bersiva ATS-ê de, hemî parametre bi yek tîpan têne dorpêç kirin, û piştî serîlêdana şablonê //response/generic[@host] ew bi yên ducarî têne guhertin.

Ji bo afirandina hêmanan, em guhêrbarên ji bersiva XML (niha JSON) bikar tînin.

Meriv çawa Zabbix bi Asterisk re ji qutiyê ve girêdide

SIP Registry

Ji bo qeydkirina sip em sê guhêrbar bikar tînin: navê bikarhêner, mazûban, bender. Ez bi navê elementê kêfxweş bûm 111111@login.mtt.ru:5060, Min rewşek nedîtiye ku hûn hewce ne ku her pênc guherbaran bikar bînin.

Hêmana sereke ya ku di derbarê hemî qeydkirinê de agahdarî distîne, Asterisk - AMI SIPshowregistry. Deqeyekê carekê ew daxwazek GET dike https://ats:8089/mxml?action=SIPshowregistry, piştî ku bersiva daneya XML ji bo parskirinê ji hemî hêmanên girêdayî re derbas dibe. Ji bo her qeydkirinê ez hêmanek bi wê ve girêdayî diafirînim. Ev hêsan e ji ber ku em agahdariya nûjen di yek daxwazê ​​de distînin, û ne ji bo her daxwazek cuda. Vê pêkanînê kêmasiyek girîng heye - barkirina li ser pêvajoyê.

Dema ceribandina heya 100 hêmanên girêdayî, min guh neda barkirinê, lê bi 1700 hêmanan re, vê yekê 15-duyemîn bargiraniyek berbiçav li ser pêvajoyê da. Ger hejmareke mezin ji hêmanên girêdayî we hebin, vê yekê ji bîr nekin.

Wekî vebijarkek ji bo "berbelavkirina" barkirinê an danîna frekansên dengdanê yên cihêreng ji bo hêmanekê, hûn dikarin mantiqa pêvajoyê biguhezînin her hêmanek cuda.

Ez agahdariya wergirtî di hêmana sereke de hilnagirim. Ya yekem, ez hewcedariya vê nabînim, û ya duyemîn jî, heke bersiv ji 64K zêdetir be, wê hingê Zabbix wê qut dike.

Ji ber ku em bersivek XML ya tevahî ji bo hêmana girêdayî bikar tînin, pêdivî ye ku em nirxa vê hêmanê di pêşdibistanê de bistînin. Bi rêya XPath wusa pêk hatiye:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ rewş)
Ji bo statûyên qeydkirinê, min statûyên nivîsê bikar neanî, lê bi karanîna JavaScript-ê ew veguherand forma hejmarî:

switch(value) {
  case 'Registered':
    return 1;
  case 'Unregistered':
    return 0;
  default:
    return -1;
}

SIP Peers

Li gorî qeydên SIP-ê, hêmanek sereke ya Asterisk heye - AMI SIPshowregistry, ku yên girêdayî lê têne zêdekirin.

Ev du hêmanên girêdayî ava dike:

  • Rewşa peer di forma nivîsê de
  • Dema bersiva cîhazê - heke rewş baş e, wê hingê dema bersivdana cîhazê tê nivîsandin, wekî din "-1"

Rêya hêmanê bixwe hinekî sadetir e XPath:

string(//response/generic[@objectname="{#SIP_PEER_OBEJECTNAME}"]/@status)

Ji bo hêmana duyemîn min JavaScript bikar anî da ku veqetînim dema bersivê ji rewşa peer, ji ber ku ew bi hev re têne hilanîn:

if(value.substring(0,2) == 'OK'){
	return value.match(/(d+)/gm);
}
else {
	return -1;
}

encamê

Çareseriyek ji qutîkê dikare tevlihev be û yekser zelal nebe. Di navbera pergalên cihêreng de nermbûn û veguheztinê zêde dike

Ji her kesî re entegrasyona xweş û hêsan! Şablon û talîmatên ji bo sazkirinê GitHub.

Source: www.habr.com

Ji bo malperên bi parastina DDoS, serverên VPS VDS mêvandariya pêbawer bikirin 🔥 Hostinga malperê ya pêbawer bi parastina DDoS, serverên VPS VDS bikirin | ProHoster