Indlela yokudibanisa iZabbix kunye neAsterisk ngaphandle kwebhokisi

Kwinqaku elandulela eli "Zabbix - ukwandisa imida enkulu" Ndikuxelele indlela yokufumana iseshoni yogunyaziso kwaye uyifake endaweni ye-macro host host. Kule nqaku ndiza kukuxelela indlela yokudibanisa i-Zabbix kunye ne-Asterisk ngaphandle kwezikripthi zangaphandle kunye nesofthiwe.

Ingcamango "yokwenza abahlobo" kwezi nkqubo zimbini yazalwa kwakudala, ngaphandle kokufaka isofthiwe eyongezelelweyo okanye izikripthi. Ukukhawuleza kwe-googling kuvelise izisombululo ezininzi ezinokwenzeka, zonke zibilisiwe kwinto yokuba ulayishe izikripthi (kwiPyha, Bash, Python, njl.) kumncedisi, kwaye uya kuvuya. Ndandifuna ukuphumeza ukubeka iliso "ngaphandle kwebhokisi" - ngaphandle kwezikripthi zangaphandle kunye nokufaka isofthiwe eyongezelelweyo kwiseva ngokubeka iliso kunye ne-PBX.

Ndichithe iintsuku ezi-4 zokusebenza kunye nale nto, kodwa umphumo wawufanelekile. Ukusebenza nge-interface ye-AMI, ukukhangela kwinqanaba eliphantsi, ukubangela, kwaye kubaluleke kakhulu, ukudibanisa i-PBX kunye nazo zonke ezinye izicwangciso ngoku kuthatha malunga nemizuzu ye-15.

I-Zabbix 4.4 iyafumaneka, malunga neengcezu ze-100 ze-Asterisk version 13. Ezinye ii-PBX ziza kunye ne-FreePBX web interface, ezinye zine-console engenanto, iqela lamaqhinga kunye nokudibanisa nge-diaplan.

Ukufumana idatha kwi-PBX

Ingongoma yokuqala kunye neyona nto iphambili ekufuneka isonjululwe kukufumana idatha malunga noontanga kunye nokubhaliswa kwe-SIP. Ngale njongo, i-PBX ine-AGI, AMI, ARI kunye ne-SSH console interfaces. Ngezizathu ezicacileyo, andizange ndithathele ingqalelo iimodyuli ezongezelelweyo.

Kuqala kufuneka sifumanise ukuba ezi agi, ami, ari...

  • I-AGI - usebenzisa izikripthi kwi-diaplan. Isetyenziswa ikakhulu kulawulo lweefowuni.
  • I-AMI - inokunika lonke ulwazi oluyimfuneko, isebenza nge-port 5038, efana neTelnet. Iyasifanela!
  • I-ARI - yanamhlanje, imfashini, i-JSON. Kukho amathuba amaninzi, ifomathi yedatha iyaqondakala kwiZabbix, kodwa kum akukho nto iphambili: awukwazi ukulawula ukubhaliswa kwe-sip. Enye into engalunganga kukuba koontanga kukho amazwe amabini kuphela kwi-intanethi / ngaphandle kwe-intanethi, nangona kukho amazwe amaninzi kwaye kuluncedo ukuwathathela ingqalelo xa uxilonga.
  • I-SSH inokwenza yonke into, kodwa ngamanye amaxesha ayivumelekanga ngenxa "yezizathu zokhuseleko". Ukuqwalaselwa kunokwahluka, andiyi kungena kuzo.

Nangona kunjalo, nazo zonke iintsilelo zayo, i-ARI igubungela i-90% yazo zonke iimfuno zokubeka iliso.

Zabbix kunye Telnet - ukuphoxeka kwam

Ndiyazi kakuhle i-AMI ngexesha elinye ndiphumeze ukulandelela ilahleko kwiingxoxo kunye nolwahlulo ngamaofisi akude, ulawulo lomnxeba, njl. Nge-Telnet, yonke into icacile kakhulu: vula uxhumano, thumela imiyalelo kwaye ufunde impendulo. Yiloo nto endayenzayo, kodwa umphumo wandiphoxa.

ITelnet kaZabbix ayifani neyekhonsoli. LinuxKulula kancinci kwaye yenzelwe ukuqinisekiswa kokungena/igama eligqithisiweyo eliqhelekileyo. Ukuba indlela yokuqinisekisa yahlukile kwaye akukho sibini sokungena/igama eligqithisiweyo esiceliweyo, kuvela impazamo. Emva kokuzama ukudlula imfuneko yokuqinisekisa kodwa andiphumelelanga, ndaqala ukujonga ikhowudi yomthombo yemodyuli yeTelnet.

Ndabona ukuba de kubekho i-login yendabuko kunye nesicelo se-password, andizukuqhubela phambili. Ukuzonwabisa nje, ndisuse yonke into ehambelana nokugunyaziswa kwikhowudi kwaye ndidibanisa yonke into. Iyasebenza! Kodwa ayihambelani neemfuno. Qhubeka…

Masibuyele kukhangelo

Ndiphinde ndafunda amaxwebhu e-ARI kwakhona, ndenze iimvavanyo ezongezelelweyo- akukho kubhaliswa kwe-sip apha. Kukho amatheko, kukho iincoko, kukho iibreeches, kodwa akukho kubhaliswa. Ngaxa lithile ndakhe ndacinga, ngaba siyakufuna ngokwenene ukubhaliswa kwamaxhalanga?

Ngentohlo ehlekisayo, ngalo mzuzu esinye isicelo sifika kumsebenzisi, sinengxaki ngeefowuni eziphumayo. Ingxaki yayikukuba ubhaliso lwe-sip lwalubanda kwaye lwasonjululwa ngokuqalisa kwakhona imodyuli.

asterisk -rx "sip reload"

Kuya kuba kuhle ukufikelela kwi-AMI kwiwebhu: oko kuya kusombulula zonke iingxaki, ndacinga. Ndiqala ukugrumba kweli cala, kwaye ngokwenyani umgca wokuqala wokukhangela ukhokelela kuxwebhu olusemthethweni lwe-asterisk, ethi kukho ukhetho kwimisebenzi yam. yenziwe yasebenza kwifayile /etc/asterisk/manager.conf, ekufuneka imiselwe ku-YES, kwicandelo [ngokubanzi]

Emva koku, ngesicelo sewebhu rhoqo sefom http://ats:8089/mxml?action=SIPshowregistry sifumana lonke ulwazi oluyimfuneko.

Xa usebenzisa i-interface ye-FreePBX, awukwazi ukwenza olu khetho ngokusebenzisa iwebhu kufuneka uyenze nge-console ngokwenza utshintsho kwifayile ye-manager.conf. I-FreePBX ayiyicimi xa utshintsho loqwalaselo lwenziwa ngewebhu.

Ndisebenze ngeentlobo ezahlukeneyo zokudityaniswa kweAsterisk ixesha elide, kodwa andikaze ndilibone eli nqaku likhankanywe naphi na. Ndothuswa kukuba akukho mntu uchaza le ndlela yokusebenzisana nePBX. Kwaba luncedo ngakumbi ukukhangela ulwazi malunga nesi sihloko: akukho nto okanye yayisetyenziselwa imisebenzi eyahlukileyo ngokupheleleyo.

IWEBHU AMI - luhlobo luni lwesilo?

Ukongeza inketho yenziwe yasebenza ukwenza ifayile umphathi.conf inike ufikelelo olupheleleyo kulawulo lwe-ATS ngewebhu. Yonke imiyalelo ekhoyo nge-AMI eqhelekileyo ngoku ikwiwebhu, unokumamela imicimbi evela kwi-PBX ngesokhethi. Umgaqo wokusebenza awufani ne-console AMI. Emva kokuvula olu khetho, ungaqhagamshelana ne-PBX kwezi dilesi zilandelayo:

https://ats:8089/manager - iphepha lewebhu elinojongano olulula lokuvavanya kunye nokuthumela izicelo ngesandla. Zonke iimpendulo zifomathwe zibe yiHTML efundekayo. Ayilunganga kakhulu ukubeka iliso.
https://ats:8089/rawman — imveliso yombhalo kuphela, ifomathi efana ne-console ye-AMI
https://ats:8089/mxml - imveliso yombhalo kuphela, kwifomathi ye-XML. Iyasifanela!

Indlela yokudibanisa iZabbix kunye neAsterisk ngaphandle kwebhokisi

Emva koko ndacinga: “Esi sisicombululo! Ngoku yonke into iza kube ilungile! I-lemon ecudisayo ngokulula,” kodwa kwakungekudala ukuba ndivuye. Ukufumana ulwazi esiludingayo, kwanele ukusebenzisa isicelo seGET kunye nesenzo esiyimfuneko inyathelo, ethi ngokuphendula ibuyisele i-xml noluhlu lwabo bonke ubhaliso kunye nemo yabo. Konke oku kuhle, kodwa udinga ugunyaziso lokukhumbula iseshoni kwikuki. Xa uvavanya kwisikhangeli, awucingi ngale nkqubo.

Inkqubo yogunyaziso

Okokuqala sijonga idilesi http://ats:8089/mxml?action=login&username=zabbix&secret=zabbix, ekuphenduleni, umncedisi usithumela i-cookie kunye neseshoni yokugunyazwa. Nantsi indlela esikhangeleka ngayo isicelo seHTTP:

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

Impendulo:

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>

Kufuneka usebenze apho manssion_id="6f5de42c", o.k. icookie yogunyaziso ngokwayo.
Umxholo kufuneka ujonge impendulo "Ungqinisiso lwamkelwe" Okulandelayo, kuzo zonke iifowuni kwiseva ye-PBX, kuya kufuneka songeze i-cookie yogunyaziso kwisicelo.

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

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

Funda indlela yokufumana icookie yogunyaziso kwaye uyisebenzise kwezinye izicelo apha: “I-Zabbix - ukwandisa imida ye-macro»

Ukwenza izinto zokulandelela kwi-Zabbix ndiya kusebenzisa ukufumanisa okuzenzekelayo.

Ukubhaqwa okuzenzekelayo

Ukubona ngokuzenzekelayo ubhaliso kunye nokulandelela amazwe oontanga, kufuneka uqhagamshelane nale dilesi ilandelayo: https://ats:8089/mxml?action=SIPshowregistry okanye https://ats:8089/mxml?action=SIPpeers

Ukuphendula, i-PBX isibuyisela impendulo ye-XML:

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

Kukho inkunkuma eninzi kwimpendulo, ke xa sicoca ngaphambili siyayihluza ngetemplate XPath: //impendulo/generic[@host]
Emva koko ulonwabo luqala. Ukusebenza ngokufumanisa kunye nokudala izinto eziguqukayo, impendulo kufuneka ibe kwifomathi ye-JSON. I-XML ayixhaswanga kubhaqo oluzenzekelayo.

Ukuguqula i-XML ibe yi-JSON, kwafuneka ndidlale kancinane ngokutshintshwa kwe-auto, apho ndenze iskripthi kwi-JS.

Indlela yokudibanisa iZabbix kunye neAsterisk ngaphandle kwebhokisi

Inqaku elinomdla: kwimpendulo ye-ATS, zonke iiparameters zijikelezwe ziingcaphuno ezilodwa, kwaye emva kokufaka itemplate. //impendulo/generic[@host] endaweni yabo ziphindwe kabini.

Ukwenza izinto, sisebenzisa izinto eziguquguqukayo ezivela kwimpendulo yeXML (ngoku eyiJSON).

Indlela yokudibanisa iZabbix kunye neAsterisk ngaphandle kwebhokisi

Irejista ye-SIP

Ukubhaliswa kwe-sip sisebenzisa iindidi ezintathu: lomsebenzisi, umkhosi, izibuko. Ndonwabile ngegama le element 111111@login.mtt.ru:5060, Andifumananga naziphi na iimeko apho kufuneka usebenzise zonke iinguqu ezintlanu.

Into ephambili efumana ulwazi malunga nalo lonke ubhaliso, Asterisk - AMI SIPshowregistry. Kanye ngomzuzu yenza isicelo seGET https://ats:8089/mxml?action=SIPshowregistry, emva kokuba impendulo yedatha ye-XML idluliselwe kuzo zonke izinto ezixhomekeke ekucazululeni. Kubhaliso ngalunye ndidala into exhomekeke kuyo. Oku kuluncedo kuba sifumana iinkcukacha ezihlaziyiweyo kwisicelo esinye, hayi kwisicelo ngasinye ngokwahlukeneyo. Olu kuphunyezwa lune-drawback ebalulekileyo - umthwalo kwiprosesa.

Xa ndivavanya ukuya kuthi ga kwizinto ezixhomekeke kwi-100, andizange ndiqaphele umthwalo, kodwa ngezinto ze-1700, oku kunika umthwalo obonakalayo we-15 kwiprosesa. Gcina oku engqondweni ukuba unenani elikhulu lezinto ezixhomekeke.

Njengokhetho "lokusasaza" umthwalo okanye ukuseta iifrikhwensi zokuvota ezahlukeneyo zento, ungahambisa ingqiqo yokucwangcisa kwinto nganye ngokwahlukileyo.

Andilugcini ulwazi olufunyenweyo kwinto ephambili. Okokuqala, andiyiboni imfuneko yale nto, kwaye okwesibini, ukuba impendulo ingaphezulu kwe-64K, ngoko i-Zabbix iyayinqumla.

Kuba sisebenzisa impendulo epheleleyo ye-XML yento exhomekeke kuyo, kufuneka sifumane ixabiso lale elementi ekuqhubeni kwangaphambili. Ngokusebenzisa XPath yenziwe ngolu hlobo:
umtya(//response/generic[@event="RegistryEntry"][@igama lomsebenzisi="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@ ilizwe)
Kwimigangatho yobhaliso, andizange ndisebenzise iimeko zokubhaliweyo, kodwa ndiziguqulele kwifomu yamanani usebenzisa iJavaScript:

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

SIP Ntanga

Ngokufaniswa nokubhaliswa kwe-SIP, kukho into ephambili ye-Asterisk - i-AMI SIPshowregistry, apho abaxhomekeke kuyo yongezwa.

Oku kudala izinto ezimbini ezixhomekeke:

  • Ubume bontanga kwifom yokubhaliweyo
  • Ixesha lokuphendula isixhobo - ukuba imeko ilungile, ke ixesha lokuphendula isixhobo libhaliwe, kungenjalo “-1”

Indlela eya kwi element ngokwayo ilula kancinane XPath:

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

Kwinto yesibini ndisebenzise iJavaScript ukwahlula ixesha lokuphendula ukusuka kwimo yoontanga, kuba zigcinwe kunye:

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

isiphelo

Isisombululo esingaphandle kwebhokisi sinokuba nzima kwaye singacaci ngokukhawuleza. Yandisa ukuguquguquka kunye nokuphatheka phakathi kweenkqubo ezahlukeneyo

Ukudibanisa okumnandi kunye nokulula wonke umntu! Isakhelo kunye nemiyalelo yokuseta GitHub.

umthombo: www.habr.com

Thenga ukusingathwa okuthembekileyo kwiindawo ezinokhuseleko lweDDoS, iiseva zeVPS VDS 🔥 Thenga ukusingathwa kwewebhusayithi okuthembekileyo ngokhuseleko lwe-DDoS, iiseva zeVPS VDS | ProHoster