Ufuatiliaji na usimamizi wa mbali wa vifaa vya Linux/OpenWrt/Lede kupitia bandari 80, uliendelea

Hii ni sehemu ya mwisho ya makala, hapa ni mwanzo habr.com/sw/post/445568
Mara ya mwisho niliandika kuhusu jinsi nilivyotekeleza ufuatiliaji wa kifaa, sasa tutazungumzia kuhusu usimamizi. Katika majadiliano na "mafundi" kwa upande wa Wateja, mara nyingi mimi hukutana na mtazamo mdogo wa uwezo wa vifaa vidogo (vilivyo na rasilimali ya chini ya kumbukumbu na utendaji), wengi wanaamini kwamba "tunahitaji zaidi ni kutuma upya upya, kwa kitu zaidi. serious tutatuma timu” .
Lakini mazoezi yanaonyesha kuwa hii sio kweli kabisa. Hapa kuna orodha ndogo ya kazi za kawaida za kawaida:

  1. Uchunguzi wa mtandao na utatuzi wa matatizo. Nyuma ya bandari ya ethaneti ya kipanga njia chako kwa kawaida kuna sehemu nyingine ya maunzi ambayo ina anwani yake ya ndani ya IP. Wakati mwingine, unaweza (unapaswa) "kupiga". Au usimamizi wa handaki - ikiwa handaki haipanda ghafla kwenye router inayofanya kazi kupitia modem ya 3G, lakini tunaweza kuona router yenyewe.
  2. Matengenezo ya mfumo. Sasisho la programu, uboreshaji wa hati ya huduma.
  3. Kitendo cha kusawazisha. Hii inaweza kuitwa "upotovu", lakini dhana ya "usawa" kama, ninanukuu, "uwezo wa mwigizaji wa circus kudumisha usawa katika nafasi isiyo na utulivu ya mwili" - inafaa zaidi. Hali kama hizi hutokea kwa sababu ya bajeti ndogo ya mteja. Hapo chini nilitoa mifano michache, lakini ... Hazihusiani moja kwa moja na mada ya hadithi, ninaziweka kwenye maelezo

Ufuatiliaji wa Wi-FiMada ya mtindo kwa miaka mitano iliyopita, haswa kati ya minyororo ya rejareja ya shirikisho. Unatembea kwa urahisi kwenye sakafu za biashara, na simu yako ya rununu ikiwa na Wi-Fi imewashwa, kwa kujaribu "kushikamana" na uzi fulani wa mtandao, mara kwa mara hutuma pakiti za Ombi la Probe, ambazo zinaweza kuchambuliwa ili kuhesabu wewe: mara ngapi unakuja kwenye duka hili, kwa sababu gani? unatembea kwenye trajectories na kadhalika. Kisha data inakusanywa, kuchambuliwa, ramani za joto hutolewa, na wasimamizi "hutoa" pesa kutoka kwa usimamizi au wawekezaji kwa picha hizo. Naam, kwa sasa .... "hakuna pesa, lakini unashikilia ...", na matokeo (halisi) tayari yanahitaji kuonyeshwa, wimbo mzuri wa zamani huanza: "Ndiyo, ndiyo, basi bila shaka sisi itasakinisha cis na kila kitu unachotaka, lakini sasa tunahitaji kuonyesha Mteja matokeo! Kwa njia, tulisahau kusema kwamba Mteja alituruhusu kuunganisha vifaa vyetu kwenye hotspot yake kupitia Wi-Fi, lakini kwa msingi wa jumla, kana kwamba tulikuwa wateja wageni. Na kwa hivyo lazima tutengeneze ruta za kusawazisha - violesura kadhaa vya WiFi vimeinuliwa, moja ambayo inashikamana na hotspot, na ya pili inafuatilia mazingira, inapakia matokeo ya tcpdump yenyewe, kisha hupakia yaliyomo kwenye faili kwenye kumbukumbu na hatari. kufa kutokana na "kula kupita kiasi" hujaribu kutema yaliyomo kwenye seva ya FTP. Haishangazi kwamba router ya kusawazisha mara nyingi "huvunjika" na kwa namna fulani inapaswa "kufufuliwa" kwa mbali.

UmbaliNi rahisi kuelezea hali hapa kwa kitu kama taarifa hii kutoka kwa mteja: "Tunataka mtandao uliogatuliwa wa maeneo hotspots ambayo yangefanya kazi kwenye vifaa ambavyo muundo wake haujulikani mapema, kupitia chaneli, lakini ni zipi ambazo bado hatujui. Oh, tulisahau kusema, hatutaki tu kuonyesha matangazo kwa wateja, lakini pia kuchambua kila kitu karibu na eneo ambalo hotspot imewekwa. Hapana, hatujui ni kwanini bado, lakini tutaigundua, usiwe na shaka, tuliweza kupata wazo hili.

Na hatupaswi kusahau kwamba kutokana na hali nyingi zisizojulikana hapo awali, udhibiti lazima ufanyike katika hali zisizo za kawaida, wakati hatuwezi kuunganisha kwenye router moja kwa moja kupitia IP: bandari na kulazimishwa tu kusubiri shughuli kutoka kwake. Ikiwa tunajiondoa wenyewe, mazungumzo kati ya seva na kipanga njia yanaweza kuwakilishwa kama hii:

  • Njia: Habari. Mimi ni kipanga njia kama hicho, kuna kazi zozote kwangu?
  • Seva: router vile na vile, nilikuandikisha, kwamba uko hai. Hapa kuna changamoto: nionyeshe matokeo ya ifconfig amri?
  • Njia: Habari. Mimi ni kipanga njia kama hicho, mara ya mwisho ulipouliza kuonyesha matokeo ya ifconfig, hii hapa. Je, kuna kazi zozote kwa ajili yangu?
  • Seva: router vile na vile, nilikuandikisha, kwamba uko hai. Hakuna kazi kwa ajili yako.

Swali la kuvutia zaidi: jinsi router ya mbali inaweza kutuma kiasi fulani cha habari? Katika sehemu ya mwisho, nilielezea kuwa kwa sababu ya rasilimali chache, router ina wget "iliyovuliwa", ambayo inafanya kazi tu kupitia GET na hakuna kitu kingine; hakuna mteja wa FTP au curl. Kwa usahihi, tunahitaji njia ya ulimwengu wote, bila kujali sifa za mkusanyiko wa picha. Nilitulia kwa kutumia wget. Kwa usahihi, jinsi nilivyo "simama" - sikuwa na chaguo :)

Kanusho tuSuluhisho langu la usimamizi linafanya kazi, si pungufu sana, na nina uhakika ni potovu, hata kama linafaa wateja wangu wengi. Unawezaje kuifanya kwa busara - andika matumizi madogo ambayo hutuma data ya binary ya POST kupitia bandari 80. Ijumuishe (matumizi) kwenye firmware ya router na ufikie kwa kutumia bash. Lakini ukweli ni kwamba: a) tunahitaji haraka b) labda tunahitaji kufanya kila kitu kwenye "zoo ya vipanga njia" iliyopo c) "usidhuru!" - ikiwa router inafanya kazi na kufanya kazi nyingine, jaribu kufanya mabadiliko ambayo hayataathiri utendaji uliopo.

Tuendelee na utekelezaji. Hebu tuseme mteja wako anataka kuwasha upya kipanga njia kutoka kwa zabbix kwa urahisi na kawaida, kwa "kubonyeza kipanya." Leo tutaanza kuelezea utekelezaji na Zabbix.
Katika menyu ya "Utawala" -> "Hati", ongeza hati mpya. Tunaiita "Washa upya", weka "php /usr/share/zabbix/reboot.php {HOST.HOST}" kama amri

Ufuatiliaji na usimamizi wa mbali wa vifaa vya Linux/OpenWrt/Lede kupitia bandari 80, uliendelea

Inayofuata: Menyu ya "Ufuatiliaji" -> "Data ya hivi punde" -> "Bonyeza-kulia kwenye nodi ya mtandao inayotaka." Hivi ndivyo menyu itakavyoonekana baada ya kuongeza hati.

Ufuatiliaji na usimamizi wa mbali wa vifaa vya Linux/OpenWrt/Lede kupitia bandari 80, uliendelea
Ipasavyo, tunaweka hati ya reboot.php kwenye saraka /usr/share/zabbix (yako inaweza kuwa tofauti, ninatumia saraka ya mizizi ya zabbixa).

Kanusho la UsalamaIli kufanya maelezo kuwa wazi katika hati, mimi hutumia tu kitambulisho cha router, lakini usitumie nenosiri. Haipendekezi kufanya hivyo katika toleo la uzalishaji! Kwa nini nilifanya hivi: kwa sababu swali kubwa ni wapi kuhifadhi nywila kwa ruta? Katika zabbixe yenyewe katika "data ya hesabu"? Mazoezi yenye utata. Vinginevyo: zuia ufikiaji wa nje kwa faili ya reboot.php yenyewe

Faili iwashe upya.php

<?php
	// присваиваСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ с консоли ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ
	$user = $argv[1];
	// Π’ΠΠ˜ΠœΠΠΠ˜Π•. Π’ΠΎΡ‚ здСсь Π² цСлях бСзопасности всС-Ρ‚Π°ΠΊΠΈ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ устройства! Но для дСмонстрации ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· использования пароля. 
	//$password = $argv[2];
		
	$conn=new mysqli("localhost","db_user","db_password","db_name");
	if (mysqli_connect_errno()) {
		exit();
	}
	$conn->set_charset("utf8");
			
	// "ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌ" ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ reboot Π·Π° счСт измСнСния поля task Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ users. Π’ ΠΏΠΎΠ»Π΅ task ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.
	$sql_users=$conn->prepare("UPDATE users SET task='reboot' WHERE id=? AND status='active';");
	$sql_users->bind_param('s', $user);
	$sql_users->execute();
	$sql_users->close();
?>

Ni hayo tu. Swali linabaki wazi: "jinsi ya kupata matokeo ya kutekeleza amri kutoka kwa kifaa." Wacha tuangalie kazi hiyo kwa kutumia amri ya ifconfig kama mfano. Amri hii inaweza kutumwa kwa kifaa:

message=`ifconfig`; wget "http://xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php?u=user&p=password!&m=$message" -O /tmp/out.txt

, ambapo:
ujumbe=`ifconfig` - tunapeana matokeo ya amri ya ifconfig kwa utofauti wa ujumbe wa $
wget"xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php β€” hati yetu ya a.php inayosajili vipanga njia na kupokea ujumbe kutoka kwao
u=mtumiaji&p=nenosiri!&m=$ujumbe β€” stakabadhi na thamani ya kigezo cha ombi m β€” inapeana yaliyomo katika kigezo cha ujumbe wa $
-O /tmp/out.txt - hatuitaji pato kwa faili /tmp/out.txt katika kesi hii, lakini ikiwa kigezo hiki hakijabainishwa, wget haifanyi kazi

Kwa nini hii haifanyi kazi?Kwa sababu ni shimo linalowezekana la usalama. Hitilafu isiyo na madhara zaidi inayoweza kutokea ni ikiwa, kwa mfano, kuna herufi "&" katika matokeo ya amri yako. Kwa hivyo, inahitajika kuchuja kila kitu kinachotumwa kutoka kwa ruta na kila kitu kinachokuja kwa seva. Ndio, nina aibu, kwa kweli. Katika utetezi wangu, ninaweza kuandika tu kwamba makala nzima imejitolea jinsi ya kusimamia routers na firmware iliyoelezwa awali na njia za mawasiliano ambazo hazijafafanuliwa mapema.

Kweli, mwanzo wa siku zijazo: Bado sijafikiria jinsi ya kutumia zana za kawaida za zabbix kuonyesha matokeo (kwa mfano, matokeo ya kutekeleza amri) ambayo huja kwa seva.

Ninakukumbusha kuwa vyanzo vyote vinaweza kupatikana kutoka kwa hazina ya Git kwa: github.com/BazDen/iotnet.online.git

Chanzo: mapenzi.com

Kuongeza maoni