Kuidas ĂŒhendada Zabbix tĂ€rniga karbist vĂ€lja

Ühes varasemas artiklis "Zabbix – makropiiride laiendamine" RÀÀkisin teile, kuidas saada autoriseerimisseanss ja asendada see kohaliku hostimakroga. Selles artiklis rÀÀgin teile, kuidas ĂŒhendada Zabbix Asteriskiga ilma vĂ€liste skriptide ja tarkvarata.

Idee nende kahe sĂŒsteemiga “sĂ”pru teha” sĂŒndis juba ammu, ilma tĂ€iendavat tarkvara vĂ”i skripte installimata. Kiire guugeldamine andis palju vĂ”imalikke lahendusi, kĂ”ik taandus sellele, et laadige skriptid (Pyha, Bash, Python jne) serverisse ĂŒles ja olete rahul. Tahtsin rakendada jĂ€lgimist "kastist vĂ€ljas" - ilma vĂ€liste skriptideta ja lisatarkvara installimise serverisse koos jĂ€lgimise ja PBX-iga.

Kokku veetsin sellega 4 tööpĂ€eva, kuid tulemus oli seda vÀÀrt. AMI liidese, madala taseme tuvastamise, trigerite ja mis kĂ”ige tĂ€htsam – PBX-i ja kĂ”igi muude sĂ€tete ĂŒhendamine vĂ”tab nĂŒĂŒd umbes 15 minutit.

Saadaval on Zabbix 4.4, umbes 100 tĂŒkki Asteriski versiooni 13. MĂ”nel PBX-il on FreePBX-i veebiliides, mĂ”nel on tĂŒhi konsool, hunnik nippe ja integreerimine sissehelistamisplaani kaudu.

Andmete vastuvÔtmine PBX-ist

Esimene ja peamine punkt, mis tuleb lahendada, on andmete hankimine partnerite ja SIP-i registreerimiste kohta. Selleks on PBX-l AGI, AMI, ARI ja SSH konsooli liidesed. Arusaadavatel pÔhjustel ma lisamooduleid ei kaalunud.

KÔigepealt tuleb vÀlja mÔelda, mis need agi, ami, ari on...

  • AGI - skriptide kasutamine valimisplaanis. Kasutatakse peamiselt kĂ”nede haldamiseks.
  • AMI - suudab anda kogu vajaliku teabe, töötab pordi 5038 kaudu, sarnaselt Telnetiga. Meile sobib!
  • ARI - kaasaegne, moodne, JSON. VĂ”imalusi on palju, andmevorming on Zabbixi jaoks arusaadav, aga minu jaoks pole peamist asja: lonksu registreerimist kontrollida ei saa. Teine puudus on see, et eakaaslaste jaoks on vĂ”rgus/offline ainult kaks olekut, kuigi olekuid on rohkem ja neid on kasulik diagnoosimisel arvesse vĂ”tta.
  • SSH suudab kĂ”ike, kuid mĂ”nikord pole see "turvalisuse pĂ”hjustel" lubatud. Kaalutlused vĂ”ivad olla erinevad, ma ei hakka nendesse laskuma.

Kuid kÔigi oma puudustega katab ARI 90% kÔigist seirevajadustest.

Zabbix ja Telnet – minu pettumus

Tunnen AMI-d hĂ€sti, omal ajal rakendasin kadude jĂ€lgimist vestlustes kaugkontorite jaotusega, kĂ”nede haldamine jne. Telneti puhul on samuti kĂ”ik vĂ€ga selge: ava ĂŒhendus, saada kĂ€sud ja loe vastus. Seda ma ka tegin, kuid tulemus valmistas mulle pettumuse.

Zabbixi Telnet ei ole sama mis konsooli oma. LinuxSee on veidi lihtsam ja loodud standardseks sisselogimise/parooli autentimiseks. Kui autentimisloogika on erinev ja sisselogimise/parooli paari ei kĂŒsita, tekib viga. PĂ€rast ebaĂ”nnestunud katset autentimisnĂ”udest mööda hiilida hakkasin uurima Telneti mooduli lĂ€htekoodi.

Sain aru, et kuni pole traditsioonilist sisselogimise ja parooli kĂŒsimist, ei liigu ma edasi. LĂ”bu pĂ€rast eemaldasin koodist kĂ”ik autoriseerimisega seonduva ja panin kĂ”ik uuesti kokku. Töötab! Kuid see ei vasta nĂ”uetele. Lase kĂ€ia


Tuleme tagasi otsingu juurde

Lugesin uuesti ARI dokumentatsiooni, tegin lisatestid - siin pole lonksu registreerimist. On pidusööke, on vestlusi, on pĂ”lvpĂŒksid, aga registreerimisi pole. Mingil hetkel ma isegi mĂ”tlesin, et kas meil on tĂ”esti vaja raisakotka registreerimist?

Naljakal kokkusattumusel saabub sel hetkel kasutajalt teine ​​pĂ€ring, millel on probleem vĂ€ljaminevate kĂ”nedega. Probleem oli selles, et sip-i registreerimine kĂŒlmus ja see lahendati lihtsalt mooduli taaskĂ€ivitamise teel.

asterisk -rx "sip reload"

Tore oleks AMI-le veebi kaudu juurde pÀÀseda: see lahendaks kĂ”ik probleemid, mĂ”tlesin. Hakkan selles suunas kaevama ja sĂ”na otseses mĂ”ttes viib esimene otsingurida ametliku Asteriski dokumentatsioonini, mis ĂŒtleb, et minu ĂŒlesannete jaoks on olemas valik veebis vĂ”imalik failis /etc/asterisk/manager.conf, mille jaotises tuleb mÀÀrata YES [ĂŒldine]

PÀrast seda vormi tavalise veebipÀringu kaudu http://ats:8089/mxml?action=SIPshowregistry saame kogu vajaliku teabe.

FreePBX-liidese kasutamisel ei saa seda vÔimalust veebi kaudu lubada, see tuleb lubada konsooli kaudu, tehes faili manager.conf muudatusi. FreePBX ei kustuta seda, kui veebi kaudu konfiguratsioonimuudatusi tehakse.

Olen pikka aega töötanud mitmesuguste Asteriski integratsioonidega, kuid ma pole seda funktsiooni kunagi kuskil maininud. Olin ĂŒllatunud, et keegi ei kirjelda seda PBX-iga suhtlemise meetodit. Selle teema kohta oli isegi eriti kasulik infot otsida: praktiliselt pole midagi vĂ”i kasutati hoopis teistsuguste ĂŒlesannete jaoks.

WEB AMI – milline metsaline?

Valiku lisamine veebis vĂ”imalik viilima manager.conf andis tĂ€ieliku juurdepÀÀsu ATS-i haldusele veebi kaudu. KĂ”ik tavalise AMI kaudu saadaolevad kĂ€sud on nĂŒĂŒd veebis, PBX-st saab sĂŒndmusi kuulata pistikupesa kaudu. TööpĂ”himĂ”te ei erine konsooli AMI-st. PĂ€rast selle valiku aktiveerimist saate PBX-iga ĂŒhendust vĂ”tta jĂ€rgmistel aadressidel:

https://ats:8089/manager — lihtsa liidesega veebileht pĂ€ringute testimiseks ja kĂ€sitsi saatmiseks. KĂ”ik vastused vormindatakse loetavasse HTML-i. Ei sobi vĂ€ga jĂ€lgimiseks.
https://ats:8089/rawman — ainult tekstivĂ€ljund, konsooli AMI-ga sarnane vorming
https://ats:8089/mxml - ainult tekstivÀljund XML-vormingus. Meile sobib!

Kuidas ĂŒhendada Zabbix tĂ€rniga karbist vĂ€lja

Siis mĂ”tlesin: „See on lahendus! NĂŒĂŒd saab kĂ”ik valmis! Lihtne-peezy sidruni squeezey”, aga rÔÔmustada oli veel vara. Vajaliku teabe saamiseks piisab GET-pĂ€ringu kasutamisest koos vajalike toimingutega tegevus, mis vastusena tagastab xml-i koos kĂ”igi registreerimiste ja nende olekute loendiga. See kĂ”ik on suurepĂ€rane, kuid kĂŒpsisest seansi meeldejĂ€tmiseks vajate luba. Kui testite brauseris, ei mĂ”tle te sellele protsessile.

Autoriseerimisprotsess

KĂ”igepealt kĂ€sitleme aadressi http://ats:8089/mxml?action=login&username=zabbix&secret=zabbix, saadab server meile koos autoriseerimisseansiga kĂŒpsise. HTTP-pĂ€ring nĂ€eb vĂ€lja selline:

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

Vastus:

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>

Seal töötamiseks on vaja maja_id="6f5de42c", st autoriseerimiskĂŒpsis ise.
Sisu, millele peate lihtsalt vastust kontrollima"Autentimine aktsepteeritud" JĂ€rgmisena peame kĂ”igi PBX-serveri kĂ”nede puhul lisama pĂ€ringule autoriseerimiskĂŒpsise.

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

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

Lugege, kuidas hankida autoriseerimiskĂŒpsist ja kasutada seda muudes pĂ€ringutes: "Zabbix – makropiiride laiendamine»

Zabbixis jÀlgimiselementide loomiseks kasutan automaatset tuvastamist.

Automaatne tuvastamine

Registreerumiste automaatseks tuvastamiseks ja kaaslaste olekute jĂ€lgimiseks peate vĂ”tma ĂŒhendust jĂ€rgmisel aadressil: https://ats:8089/mxml?action=SIPshowregistry vĂ”i https://ats:8089/mxml?action=SIPpeers

Vastuseks saadab PBX meile XML-vastuse:

<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>

Vastuses on palju prĂŒgi, nii et eeltöötluses filtreerime selle malli jĂ€rgi XPath: //response/generic[@host]
Siis algab lĂ”bu. Tuvastamisega töötamiseks ja elementide dĂŒnaamiliseks loomiseks peab vastus olema JSON-vormingus. XML-i automaatsete tuvastamiste jaoks ei toetata.

XML-i JSON-iks teisendamiseks pidin natuke mÀngima automaatse asendamisega, mille jaoks tegin JS-is skripti

Kuidas ĂŒhendada Zabbix tĂ€rniga karbist vĂ€lja

Huvitav punkt: ATS-i vastuses on kĂ”ik parameetrid ĂŒmbritsetud ĂŒksikute jutumĂ€rkidega ja pĂ€rast malli rakendamist //response/generic[@host] need asendatakse kahekordsetega.

Elementide loomiseks kasutame muutujaid XML-vastusest (nĂŒĂŒd JSON).

Kuidas ĂŒhendada Zabbix tĂ€rniga karbist vĂ€lja

SIP register

Sip registreerimisel kasutame kolme muutujat: kasutajanimi, vÔÔrustaja, port. Olin elemendi nimetusega rahul 111111@login.mtt.ru:5060, Ma ei ole leidnud ĂŒhtegi olukorda, kus oleks vaja kasutada kĂ”iki viit muutujat.

Peamine element, mis saab teavet kĂ”igi registreerimiste kohta, TĂ€rn – AMI SIPshowregistry. Kord minutis teeb see GET-pĂ€ringu https://ats:8089/mxml?action=SIPshowregistry, mille jĂ€rel edastatakse vastuse XML-andmed sĂ”elumiseks kĂ”igile sĂ”ltuvatele elementidele. Iga registreeringu jaoks loon sellest sĂ”ltuva elemendi. See on mugav, kuna saame ajakohase teabe ĂŒhe pĂ€ringu, mitte iga pĂ€ringu kohta eraldi. Sellel teostusel on mĂ€rkimisvÀÀrne puudus - protsessori koormus.

Kuni 100 sÔltuva elemendi testimisel ma koormust ei mÀrganud, kuid 1700 elemendiga andis see protsessorile tuntava 15 sekundilise koormuse. Pidage seda meeles, kui teil on palju sÔltuvaid elemente.

Koormuse laiali hajutamise vĂ”i elemendi jaoks erinevate kĂŒsitlussageduste seadmise vĂ”imalusena saate töötlusloogika igale elemendile eraldi liigutada.

Ma ei salvesta saadud teavet pĂ”hielemendis. Esiteks, ma ei nĂ€e selleks vajadust ja teiseks, kui vastus on ĂŒle 64K, siis Zabbix katkestab selle.

Kuna me kasutame sÔltuva elemendi jaoks tÀielikku XML-vastust, peame eeltöötluses saama selle elemendi vÀÀrtuse. LÀbi XPath seda tehakse nii:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ osariik)
Registreerimisolekute jaoks ei kasutanud ma tekstiolekuid, vaid teisendasin need JavaScripti abil numbriliseks:

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

SIP Peers

Analoogiliselt SIP registreeringutega on Asteriski pÔhielement - AMI SIPshowregistry, millele lisatakse sÔltuvad.

See loob kaks sÔltuvat elementi:

  • Peer staatus teksti kujul
  • Seadme reaktsiooniaeg – kui olek on OK, siis kirjutatakse seadme reaktsiooniaeg, vastasel juhul “-1”

Tee elemendi enda juurde on veidi lihtsam XPath:

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

Teise elemendi jaoks kasutasin eraldamiseks JavaScripti reaktsiooniaeg kaaslase olekust, kuna need salvestatakse koos:

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

JĂ€reldus

Valmis lahendus vĂ”ib olla keeruline ega ole kohe selge. Suurendab paindlikkust ja kaasaskantavust erinevate sĂŒsteemide vahel

Head ja kerget integratsiooni kÔigile! Mall ja juhised seadistamiseks GitHub.

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster