Fjareftirlit og stjórnun á Linux/OpenWrt/Lede tækjum í gegnum tengi 80, framhald

Þetta er lokahluti greinarinnar, hér er byrjunin habr.com/en/post/445568
Síðast þegar ég skrifaði um hvernig ég innleiddi tækjavöktun, nú munum við tala um stjórnun. Í viðræðum við „tæknimenn“ af hálfu viðskiptavinarins lendi ég oft í takmarkaðri skynjun á getu slíkra lítilla tækja (með litlum minni og afköstum), margir telja að „það mesta sem við þurfum er að senda endurræsingu, fyrir eitthvað meira alvarlegt að við sendum lið“ .
En æfingin sýnir að þetta er ekki alveg satt. Hér er lítill listi yfir algeng dæmigerð verkefni:

  1. Netgreining og bilanaleit. Á bak við Ethernet tengi beinsins þíns er venjulega annar vélbúnaður sem hefur sína eigin innri IP tölu. Stundum geturðu (ættir) að „pinga“ það. Eða jarðgangastjórnun - ef göngin rísa skyndilega ekki á beini sem starfar í gegnum 3G mótald, en við getum séð beininn sjálfan.
  2. Kerfis viðhald. Fastbúnaðaruppfærsla, uppfærsla á þjónustuhandriti.
  3. Jafnvægisaðgerð. Þetta væri hægt að kalla „perversíu“, en hugtakið „jafnvægi“ eins og ég vitna í, „geta sirkusleikara til að viðhalda jafnvægi í óstöðugri líkamsstöðu“ - passar betur. Slíkar aðstæður koma upp vegna takmarkaðs fjárhagsáætlunar viðskiptavinarins. Hér að neðan gaf ég nokkur dæmi, en... Þær tengjast ekki þema sögunnar beint, ég set þær í athugasemdirnar

Wi-Fi eftirlitTísku umræðuefni síðustu fimm árin, aðallega meðal alríkisverslunarkeðja. Þú ert rólegur að rölta um kauphallirnar og farsíminn þinn með kveikt á Wi-Fi sendir reglulega út Probe Request pakka sem hægt er að greina til að reikna út fyrir þú: hversu oft kemurðu í þessa búð, af hvaða ástæðum þú gengur eftir brautum og svo framvegis. Síðan er gögnunum safnað, greind, hitakort teiknuð og stjórnendur „kúga“ fé frá stjórnendum eða fjárfestum fyrir slíkar myndir. Jæja, í bili... “það eru engir peningar, en þú heldur áfram...”, og útkoman (raunveruleg) þarf nú þegar að sýna, gamla góða lagið byrjar: “Já, já, þá auðvitað við mun setja upp cis og allt sem þú vilt, en nú þurfum við að sýna viðskiptavinum niðurstöðuna! Við gleymdum að segja að viðskiptavinurinn leyfði okkur að tengja búnaðinn okkar við heitan reit sinn í gegnum Wi-Fi, en á almennum grundvelli, alveg eins og við værum gestaskjólstæðingar.“ Og svo verðum við að búa til jafnvægisbeina - nokkrir WiFi undirviðmót eru hækkaðir, einn þeirra loðir við heita reitinn, og sá annar fylgist með umhverfinu, hleður upp tcpdump niðurstöðunni í ofboði til sjálfrar sín, pakkar síðan innihaldi skráarinnar í skjalasafn og áhættu að deyja úr „ofáti“ reynir að spýta út innihaldinu á FTP-þjóninum. Það kemur ekki á óvart að jafnvægisleiðin „bilnar“ oft og einhvern veginn þarf að „endurlífga“ lítillega.

radíusÞað er auðveldara að lýsa ástandinu hér með svona yfirlýsingu frá viðskiptavininum: „Við viljum dreifð net af heitum reitum sem myndi virka á búnaði sem ekki er vitað um fyrirfram, í gegnum rásir, en hverjar þekkjum við ekki enn. Ó, við gleymdum að segja, við viljum ekki aðeins sýna viðskiptavinum auglýsingar, heldur einnig greina allt í kringum staðinn þar sem heitur reiturinn er settur upp. Nei, við vitum ekki af hverju ennþá, en við munum komast að því, efast ekki um það, við gátum komið með þessa hugmynd.“

Og við megum ekki gleyma því að vegna margra áður óþekktra aðstæðna verður eftirlit að fara fram við óhefðbundnar aðstæður, þegar við getum ekki tengst beininum beint í gegnum IP: tengið og neyðumst til að bíða einfaldlega eftir virkni frá henni. Ef við tökum okkur saman, getur samræðan milli netþjónsins og beinisins verið táknuð svona:

  • Leið: Halló. Ég er svona og svona router, eru einhver verkefni fyrir mig?
  • Server: router svona og svona, ég skráði þig, að þú ert á lífi. Hér er áskorunin: sýndu mér niðurstöðu ifconfig skipunarinnar?
  • Leið: Halló. Ég er svona og svona router, síðast þegar þú baðst um að sýna niðurstöðuna af ifconfig, hér er hún. Eru einhver verkefni fyrir mig?
  • Server: router svona og svona, ég skráði þig, að þú ert á lífi. Það eru engin verkefni fyrir þig.

Áhugaverðasta spurningin: hvernig getur fjarlægur beini sent tiltekið magn af upplýsingum? Í síðasta hluta lýsti ég því að vegna takmarkaðs fjármagns hefur beininn aðeins „fráleitt“ wget, sem virkar aðeins í gegnum GET og ekkert annað; það er enginn FTP viðskiptavinur eða krullur. Nánar tiltekið þurfum við alhliða aðferð, óháð eiginleikum myndsamsetningar. Ég sætti mig við að nota wget. Nánar tiltekið hvernig ég „hætt“ - ég hafði einfaldlega ekkert val :)

Bara fyrirvariStjórnunarlausnin mín er að virka, ekki mjög takmörkuð, og ég er viss um að hún er skakkt, jafnvel þó hún henti flestum viðskiptavinum mínum. Hvernig gætirðu gert það skynsamlega - skrifaðu lítið tól sem sendir POST tvöfaldur gögn í gegnum port 80. Settu það (tólið) með í vélbúnaðar beinsins og opnaðu það með bash. En raunveruleikinn er sá að: a) við þurfum að fljótt b) við þurfum líklega að gera allt á núverandi „dýragarði beina“ c) „gera engan skaða! — ef leiðin er að virka og framkvæma önnur verkefni, reyndu að gera breytingar sem hafa ekki áhrif á núverandi virkni.

Höldum áfram að framkvæmdinni. Segjum að viðskiptavinurinn þinn vilji endurræsa beininn frá zabbix á auðveldan og náttúrulegan hátt, með „smelli með mús“. Í dag munum við byrja að lýsa framkvæmdinni með Zabbix.
Í valmyndinni „Stjórnun“ -> „Forskriftir“ skaltu bæta við nýju handriti. Við köllum það „endurræsa“, sláðu inn „php /usr/share/zabbix/reboot.php {HOST.HOST}“ sem skipun

Fjareftirlit og stjórnun á Linux/OpenWrt/Lede tækjum í gegnum tengi 80, framhald

Næst: Valmynd „Vöktun“ -> „Nýjustu gögn“ -> „Hægri-smelltu á viðkomandi nethnút. Svona mun valmyndin líta út eftir að handritinu hefur verið bætt við.

Fjareftirlit og stjórnun á Linux/OpenWrt/Lede tækjum í gegnum tengi 80, framhald
Í samræmi við það setjum við reboot.php forskriftina í /usr/share/zabbix möppuna (þitt gæti verið öðruvísi, ég nota zabbixa rótarskrána).

ÖryggisfyrirvariTil að gera skýringuna skýrari í handritinu nota ég aðeins router id, en nota ekki lykilorðið. Ekki er mælt með því að gera þetta í framleiðsluútgáfunni! Af hverju gerði ég þetta: vegna þess að stóra spurningin er hvar á að geyma lykilorð fyrir beina? Í zabbixe sjálfu í "birgðagögnum"? Umdeild vinnubrögð. Að öðrum kosti: takmarkaðu ytri aðgang að reboot.php skránni sjálfri

Skrá reboot.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();
?>

Það er allt og sumt. Spurningin er enn opin: „hvernig á að fá niðurstöðuna af því að framkvæma skipun úr tækinu. Við skulum skoða verkefnið með því að nota ifconfig skipunina sem dæmi. Þessa skipun er hægt að senda í tækið:

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

hvar:
message=`ifconfig` — við úthlutum niðurstöðu ifconfig skipunarúttaksins á $message breytuna
wget"xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — a.php forskriftin okkar sem skráir beina og tekur á móti skilaboðum frá þeim
u=notandi&p=lykilorð!&m=$skilaboð — skilríki og gildi beiðnibreytunnar m — úthlutar innihaldi $message breytunnar
-O /tmp/út.txt — við þurfum ekki úttak í skrána /tmp/out.txt í þessu tilfelli, en ef þessi færibreyta er ekki tilgreind, virkar wget ekki

Af hverju virkar þetta ekki?Vegna þess að það er hugsanlegt öryggisgat. Skaðlausasta villa sem getur gerst er ef, til dæmis, það er „&“ stafur í úttakinu á skipuninni þinni. Þess vegna er nauðsynlegt að sía bæði allt sem er sent frá beinum og allt sem kemur á netþjóninn. Já, ég skammast mín, í alvörunni. Mér til varnar get ég aðeins skrifað að greinin í heild sinni er helguð því hvernig eigi að stjórna beinum með fyrirfram skilgreindum fastbúnaði og samskiptaleiðum sem eru ekki skilgreindar fyrirfram.

Jæja, byrjun fyrir framtíðina: Ég hef ekki enn fundið út hvernig á að nota staðlað zabbix verkfæri til að endurspegla niðurstöðurnar (til dæmis niðurstöður þess að framkvæma skipun) sem koma á netþjóninn.

Ég minni á að allar heimildir er hægt að nálgast í Git geymslunni á: github.com/BazDen/iotnet.online.git

Heimild: www.habr.com

Bæta við athugasemd