Parhau i fonitro a rheoli dyfeisiau Linux/OpenWrt/Lede o bell trwy borth 80

Dyma ran olaf yr erthygl, dyma'r dechrau habr.com/ru/post/445568
Y tro diwethaf i mi ysgrifennu am sut y gweithredais fonitro dyfeisiau, nawr byddwn yn siarad am reoli. Mewn trafodaethau gyda “thechnegwyr” ar ochr y Cwsmer, rwy’n aml yn dod ar draws canfyddiad cyfyngedig o alluoedd dyfeisiau mor fach (gydag adnoddau cof isel a pherfformiad), mae llawer yn credu mai “y mwyaf sydd ei angen arnom yw anfon ailgychwyn, am rywbeth mwy o ddifrif byddwn yn anfon tîm”.
Ond mae arfer yn dangos nad yw hyn yn gwbl wir. Dyma restr fach o dasgau arferol cyffredin:

  1. Diagnosteg rhwydwaith a datrys problemau. Y tu ôl i borthladd ether-rwyd eich llwybrydd fel arfer mae darn arall o galedwedd sydd â'i gyfeiriad IP mewnol ei hun. Weithiau, gallwch chi (dylai) ei “ping”. Neu reoli twnnel - os nad yw'r twnnel yn codi'n sydyn ar lwybrydd sy'n gweithredu trwy fodem 3G, ond gallwn weld y llwybrydd ei hun.
  2. Cynnal a chadw system. Diweddariad cadarnwedd, uwchraddio sgript gwasanaeth.
  3. Gweithred cydbwyso. Gellid galw hyn yn “wyrdroad”, ond y cysyniad o “gydbwysedd” fel, dyfynnaf, “gallu perfformiwr syrcas i gadw cydbwysedd mewn safle corff ansefydlog” - yn cyd-fynd yn well. Mae sefyllfaoedd o'r fath yn codi oherwydd cyllideb gyfyngedig y cwsmer. Isod rhoddais ychydig o enghreifftiau, ond ... Nid ydynt yn uniongyrchol gysylltiedig â thema'r stori, rhoddais hwy yn y nodiadau

Monitro Wi-FiPwnc ffasiynol am y pum mlynedd diwethaf, yn bennaf ymhlith cadwyni manwerthu ffederal. Rydych chi'n cerdded yn hamddenol trwy'r lloriau masnachu, ac mae'ch ffôn symudol gyda Wi-Fi wedi'i droi ymlaen, mewn ymgais i “lynu” at ryw edefyn o'r rhwydwaith, yn anfon pecynnau Cais Chwilio am Ganlyniadau yn rheolaidd, y gellir eu dadansoddi er mwyn cyfrifo ar gyfer chi: pa mor aml ydych chi'n dod i'r siop hon, am ba resymau rydych chi'n cerdded ar hyd llwybrau ac yn y blaen. Yna mae'r data'n cael ei gasglu, ei ddadansoddi, mae mapiau gwres yn cael eu llunio, ac mae rheolwyr yn “cribddeiliaeth” arian gan reolwyr neu fuddsoddwyr ar gyfer lluniau o'r fath. Wel, am y tro.... “does dim arian, ond daliwch chi...”, ac mae angen dangos y canlyniad (go iawn) yn barod, mae’r hen gân dda yn dechrau: “Ie, ie, yna wrth gwrs rydyn ni yn gosod y cis a phopeth rydych chi ei eisiau, ond nawr mae angen i ni ddangos y canlyniad i'r Cwsmer! Gyda llaw, fe wnaethom anghofio dweud bod y Cwsmer wedi caniatáu inni gysylltu ein hoffer â'i fan problemus trwy Wi-Fi, ond yn gyffredinol, yn union fel pe baem yn gleientiaid gwadd. ” Ac felly mae'n rhaid i ni wneud llwybryddion cydbwyso - mae sawl is-ryngwyneb WiFi yn cael eu codi, ac mae un ohonynt yn glynu wrth y man cychwyn, ac mae'r ail yn monitro'r amgylchedd, yn uwchlwytho'r canlyniad tcpdump iddo'i hun yn wyllt, yna'n pacio cynnwys y ffeil i mewn i archif a risgiau mae marw o “orfwyta” yn ceisio poeri allan y cynnwys ar y gweinydd FTP. Nid yw’n syndod bod y llwybrydd cydbwyso yn aml yn “torri i lawr” a rhywsut mae’n rhaid ei “ddadebru” o bell.

radiwsMae’n haws disgrifio’r sefyllfa yma gyda rhywbeth fel y datganiad hwn gan y cwsmer: “Rydym eisiau rhwydwaith datganoledig o fannau problemus a fyddai’n gweithio ar offer nad yw eu model yn hysbys ymlaen llaw, trwy sianeli, ond pa rai nad ydym yn eu hadnabod eto. O, rydym wedi anghofio dweud, rydym nid yn unig am ddangos hysbysebu i gleientiaid, ond hefyd yn dadansoddi popeth o amgylch y lleoliad lle mae'r man cychwyn wedi'i osod. Na, nid ydym yn gwybod pam eto, ond fe wnawn ni ddarganfod y peth, peidiwch ag amau ​​​​hynny, roeddem yn gallu meddwl am y syniad hwn. ”

Ac mae'n rhaid i ni beidio ag anghofio, oherwydd llawer o amgylchiadau anhysbys o'r blaen, bod yn rhaid rheoli mewn amodau ansafonol, pan na allwn gysylltu â'r llwybrydd yn uniongyrchol trwy'r porthladd IP: a chael ein gorfodi i aros am weithgaredd ohono. Os ydym yn haniaethu ein hunain, gellir cynrychioli'r ddeialog rhwng y gweinydd a'r llwybrydd fel hyn:

  • Llwybrydd: Helo. Rwy'n llwybrydd o'r fath ac o'r fath, a oes unrhyw dasgau i mi?
  • Gweinydd: llwybrydd o'r fath ac o'r fath, yr wyf yn cofrestru chi, eich bod yn fyw. Dyma'r her: dangoswch i mi ganlyniad y gorchymyn ifconfig?
  • Llwybrydd: Helo. Rwy'n llwybrydd o'r fath ac o'r fath, y tro diwethaf i chi ofyn i ddangos canlyniad ifconfig, dyma hi. A oes unrhyw dasgau i mi?
  • Gweinydd: llwybrydd o'r fath ac o'r fath, yr wyf yn cofrestru chi, eich bod yn fyw. Nid oes unrhyw dasgau i chi.

Y cwestiwn mwyaf diddorol: sut y gall llwybrydd anghysbell anfon rhywfaint o wybodaeth? Yn y rhan olaf, disgrifiais, oherwydd adnoddau cyfyngedig, mai dim ond wget “wedi'i dynnu i lawr” sydd gan y llwybrydd, sy'n gweithio trwy GET yn unig a dim byd arall; nid oes cleient FTP na chyrlio. Yn fwy manwl gywir, mae angen dull cyffredinol arnom, waeth beth fo nodweddion cydosod delweddau. Fe wnes i setlo ar ddefnyddio wget. Yn fwy manwl gywir, sut wnes i “stopio” - yn syml, doedd gen i ddim dewis :)

Dim ond ymwadiadMae fy ateb rheoli yn gweithio, heb fod yn gyfyngedig iawn, ac rwy'n siŵr ei fod yn gam, hyd yn oed os yw'n gweddu i'r rhan fwyaf o'm cwsmeriaid. Sut allech chi ei wneud yn ddoeth - ysgrifennwch gyfleustodau bach sy'n anfon data deuaidd POST trwy borthladd 80. Cynhwyswch ef (y cyfleustodau) yn firmware y llwybrydd a'i gyrchu gan ddefnyddio bash. Ond y gwir amdani yw: a) mae angen i ni wneud yn gyflym b) mae'n debyg bod angen i ni wneud popeth ar y “sŵ o lwybryddion” presennol c) “gwneud dim niwed!” — os yw'r llwybrydd yn gweithio ac yn cyflawni tasgau eraill, ceisiwch wneud newidiadau na fyddant yn effeithio ar y swyddogaeth bresennol.

Gadewch i ni symud ymlaen at weithredu. Dywedwch fod eich cwsmer eisiau ailgychwyn y llwybrydd o zabbix yn hawdd ac yn naturiol, gyda “chliciwch ar y llygoden.” Heddiw, byddwn yn dechrau disgrifio'r gweithredu gyda Zabbix.
Yn y ddewislen “Gweinyddiaeth” -> “Sgriptiau”, ychwanegwch sgript newydd. Rydyn ni'n ei alw'n "Ailgychwyn", rhowch "php /usr/share/zabbix/reboot.php {HOST.HOST}" fel gorchymyn

Parhau i fonitro a rheoli dyfeisiau Linux/OpenWrt/Lede o bell trwy borth 80

Nesaf: Dewislen “Monitro” -> “Data diweddaraf” -> “De-gliciwch ar y nod rhwydwaith a ddymunir.” Dyma sut olwg fydd ar y ddewislen ar ôl ychwanegu'r sgript.

Parhau i fonitro a rheoli dyfeisiau Linux/OpenWrt/Lede o bell trwy borth 80
Yn unol â hynny, rydym yn rhoi'r sgript reboot.php yn y cyfeiriadur /usr/share/zabbix (efallai y bydd eich un chi yn wahanol, rwy'n defnyddio'r cyfeiriadur gwraidd zabbixa).

Ymwadiad DiogelwchEr mwyn gwneud yr esboniad yn gliriach yn y sgript, dim ond yr ID llwybrydd rwy'n ei ddefnyddio, ond peidiwch â defnyddio'r cyfrinair. Ni argymhellir gwneud hyn yn y fersiwn cynhyrchu! Pam wnes i hyn: oherwydd y cwestiwn mawr yw ble i storio cyfrineiriau ar gyfer llwybryddion? Yn zabbixe ei hun yn "data rhestr"? Arfer dadleuol. Fel arall: cyfyngu mynediad allanol i'r ffeil reboot.php ei hun

Ffeil 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();
?>

Dyna i gyd. Mae'r cwestiwn yn parhau i fod yn agored: "sut i gael canlyniad gweithredu gorchymyn o'r ddyfais." Edrychwn ar y dasg gan ddefnyddio'r gorchymyn ifconfig fel enghraifft. Gellir anfon y gorchymyn hwn i'r ddyfais:

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

, lle:
message = `ifconfig` - rydym yn aseinio canlyniad allbwn gorchymyn ifconfig i'r newidyn $message
wget"xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — ein sgript a.php sy'n cofrestru llwybryddion ac yn derbyn negeseuon ganddynt
u=defnyddiwr&p=cyfrinair!&m=$message — tystlythyrau a gwerth y newidyn cais m — yn aseinio cynnwys y newidyn $message
-O /tmp/allan.txt — nid oes angen allbwn i'r ffeil /tmp/out.txt yn yr achos hwn, ond os nad yw'r paramedr hwn wedi'i nodi, nid yw wget yn gweithio

Pam nad yw hyn yn gweithio?Oherwydd ei fod yn dwll diogelwch posibl. Y gwall mwyaf diniwed a all ddigwydd yw, er enghraifft, os oes cymeriad “&” yn allbwn eich gorchymyn. Felly, mae angen hidlo popeth sy'n cael ei anfon o lwybryddion a phopeth sy'n dod i'r gweinydd. Ie, mae gen i gywilydd, a dweud y gwir. Yn fy amddiffyniad, ni allaf ond ysgrifennu bod yr erthygl gyfan wedi'i neilltuo i sut i reoli llwybryddion gyda sianeli cadarnwedd a chyfathrebu wedi'u diffinio ymlaen llaw nad ydynt wedi'u diffinio ymlaen llaw.

Wel, cychwyn i'r dyfodol: nid wyf eto wedi cyfrifo sut i ddefnyddio offer zabbix safonol i adlewyrchu'r canlyniadau (er enghraifft, canlyniad gweithredu gorchymyn) sy'n dod i'r gweinydd.

Fe’ch atgoffaf y gellir cael gafael ar bob ffynhonnell o ystorfa Git yn: github.com/BazDen/iotnet.online.git

Ffynhonnell: hab.com

Ychwanegu sylw