Ngawasi lan ngatur piranti adhedhasar Linux / OpenWrt / Lede liwat port 80, terus

Iki minangka bagéan pungkasan saka artikel, iki minangka wiwitan habr.com/en/post/445568
Pungkasan aku nulis babagan carane ngetrapake pemantauan piranti, saiki kita bakal ngomong babagan manajemen. Ing diskusi karo "teknisi" ing sisih Pelanggan, aku kerep nemoni pemahaman sing winates babagan kemampuan piranti cilik kasebut (kanthi sumber daya memori lan kinerja sing kurang), akeh sing percaya yen "sing paling kita butuhake yaiku ngirim urip maneh, kanggo luwih akeh. serius arep kirim tim” .
Nanging laku nuduhake yen iki ora sakabehe bener. Mangkene dhaptar cilik tugas umum sing umum:

  1. Diagnosa jaringan lan ngatasi masalah. Ing mburi port ethernet router sampeyan biasane ana piranti keras liyane sing duwe alamat IP internal dhewe. Kadhangkala, sampeyan bisa (kudu) "ping" iku. Utawa manajemen trowongan - yen trowongan dumadakan ora munggah ing router operasi liwat modem 3G, nanging kita bisa ndeleng dalan dhewe.
  2. pangopènan sistem. Nganyari firmware, upgrade skrip layanan.
  3. Tumindak imbangan. Iki bisa diarani "perversion", nanging konsep "equilibrist" minangka, aku ngutip, "kemampuan pemain sirkus kanggo njaga keseimbangan ing posisi awak sing ora stabil" - mathuk luwih. Kahanan kasebut muncul amarga anggaran winates pelanggan. Ing ngisor iki aku menehi sawetara conto, nanging ... Ora ana hubungane langsung karo tema crita, daklebokake ing cathetan

Ngawasi Wi-FiTopik modis sajrone limang taun kepungkur, utamane ing antarane rantai toko federal. Sampeyan mlaku-mlaku kanthi santai ing lantai dagang, lan ponsel sampeyan kanthi Wi-Fi diuripake, kanggo nyoba "kelet" ing sawetara benang jaringan, kanthi rutin ngirim paket Panjaluk Probe sing bisa dianalisis kanggo ngetung sampeyan. : sepira kerepe kowe tekan toko iki, apa sebabe, mlaku ing lintasan lan liya-liyane. Banjur data dikumpulake, dianalisis, peta panas digambar, lan manajer "extort" dhuwit saka manajemen utawa investor kanggo gambar kasebut. Nah, kanggo saiki .... "ora ana dhuwit, nanging sampeyan terus ... ", lan asil (nyata) wis kudu ditampilake, lagu lawas sing apik diwiwiti: "Ya, ya, mesthi kita bakal nginstal cis lan kabeh sing dikarepake, nanging saiki kita kudu nuduhake asil Customer! Miturut cara, kita kelalen ujar manawa Pelanggan ngidini kita nyambungake peralatan menyang hotspot liwat Wi-Fi, nanging kanthi umum, kaya-kaya kita dadi klien tamu. Dadi, kita kudu nggawe router balancing - sawetara subinterfaces WiFi diunggahake, sing siji nempel ing hotspot, lan sing kapindho ngawasi lingkungan, kanthi frantically upload asil tcpdump dhewe, banjur ngemas isi file menyang arsip lan resiko. mati saka "overeating" nyoba kanggo muntahake metu isi ing server FTP. Ora nggumunake yen router balancing asring "rusak" lan kudu "resusitasi" saka jarak jauh.

radiusIku luwih gampang kanggo njlèntrèhaké kahanan ing kene karo kaya iki statement saka customer: "Kita pengin jaringan hotspot desentralisasi sing bakal digunakake ing peralatan sing modele ora dingerteni sadurunge, liwat saluran, nanging sing durung dingerteni. Oh, kita kelalen ngomong, kita ora mung pengin nuduhake pariwara menyang klien, nanging uga nganalisa kabeh ing sekitar lokasi sing dipasang hotspot. Ora, kita durung ngerti sebabe, nanging kita bakal ngerti, aja ragu-ragu, kita bisa nggawe ide iki.

Lan kita ora kudu lali amarga akeh kahanan sing durung dingerteni sadurunge, kontrol kudu ditindakake ing kahanan sing ora standar, nalika kita ora bisa nyambung menyang router langsung liwat port IP: lan dipeksa mung ngenteni kegiatan kasebut. Yen kita abstrak, dialog antarane server lan router bisa diwakili kaya mangkene:

  • Router: Halo. Aku kaya router, apa ana tugas kanggo kula?
  • Server: router kuwi lan kuwi, Aku kedhaftar sampeyan, sing urip. Mangkene tantangane: tuduhake asil perintah ifconfig?
  • Router: Halo. Aku iki lan kuwi router, pungkasan wektu sampeyan takon kanggo nuduhake asil saka ifconfig, punika. Apa ana tugas kanggo aku?
  • Server: router kuwi lan kuwi, Aku kedhaftar sampeyan, sing urip. Ora ana tugas kanggo sampeyan.

Pitakonan sing paling menarik: carane router remot bisa ngirim informasi tartamtu? Ing bagean pungkasan, aku nerangake manawa amarga sumber daya sing winates, router mung duwe wget "dilucuti", sing mung bisa digunakake liwat GET lan ora liya; ora ana klien FTP utawa curl. Luwih tepat, kita butuh cara universal, preduli saka fitur perakitan gambar. Aku dienggoni nggunakake wget. Luwih tepate, kepiye "mandheg" - aku ora duwe pilihan :)

Mung wewalerSolusi manajemen saya bisa digunakake, ora winates banget, lan aku yakin manawa bengkong, sanajan cocog karo para pelanggan. Kepiye sampeyan bisa nindakake kanthi wicaksana - nulis sarana cilik sing ngirim data binar POST liwat port 80. Kalebu (utilitas) ing perangkat kukuh router lan akses nggunakake bash. Nanging kasunyatane yaiku: a) kita kudu cepet b) kita bisa uga kudu nindakake kabeh ing "zoo router" sing ana c) "ora gawe piala!" - yen router digunakake lan nindakake tugas liyane, coba gawe owah-owahan sing ora bakal mengaruhi fungsi sing ana.

Ayo dadi pindhah menyang implementasine. Contone, pelanggan sampeyan pengin urip maneh router saka zabbix kanthi gampang lan alami, kanthi "klik mouse." Dina iki kita bakal miwiti njlèntrèhaké implementasine karo Zabbix.
Ing menu "Administrasi" -> "Skrip", tambahake skrip anyar. Kita nyebat "Reboot", ketik "php /usr/share/zabbix/reboot.php {HOST.HOST}" minangka prentah.

Ngawasi lan ngatur piranti adhedhasar Linux / OpenWrt / Lede liwat port 80, terus

Sabanjure: Menu "Monitoring" -> "Data paling anyar" -> "Klik-tengen ing simpul jaringan sing dikarepake." Iki minangka menu sing bakal katon sawise nambahake skrip.

Ngawasi lan ngatur piranti adhedhasar Linux / OpenWrt / Lede liwat port 80, terus
Patut, kita sijine script reboot.php ing direktori /usr/share/zabbix (Panjenengan bisa uga beda, aku nggunakake direktori root zabbixa).

Safety DisclaimerKanggo nggawe panjelasan luwih cetha ing script, aku mung nggunakake id router, nanging ora nggunakake sandi. Ora dianjurake kanggo nindakake iki ing versi produksi! Napa aku nindakake iki: amarga pitakonan gedhe yaiku ngendi kanggo nyimpen sandhi kanggo router? Ing zabbixe dhewe ing "data persediaan"? Praktek kontroversial. Utawa: matesi akses eksternal menyang file reboot.php dhewe

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

Mekaten. Pitakonan tetep mbukak: "carane entuk asil saka nglakokake printah saka piranti." Ayo goleki tugas nggunakake perintah ifconfig minangka conto. Printah iki bisa dikirim menyang piranti:

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

ngendi:
pesen = `ifconfig` - kita nemtokake asil output printah ifconfig menyang variabel $ pesen
wes"xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — script a.php kita sing ndhaftar router lan nampa pesen saka wong-wong mau
u=user&p=sandi!&m=$pesen - kredensial lan nilai variabel panyuwunan m - nemtokake isi variabel $ pesen
-O /tmp/out.txt - kita ora butuh output menyang file /tmp/out.txt ing kasus iki, nanging yen parameter iki ora ditemtokake, wget ora bisa digunakake

Apa iki ora bisa?Amarga iku bolongan keamanan potensial. Kesalahan sing paling ora mbebayani sing bisa kedadeyan yaiku yen, contone, ana karakter "&" ing output printah sampeyan. Mulane, perlu kanggo nyaring kabeh sing dikirim saka router lan kabeh sing teka ing server. Ya, aku isin tenan. Ing pertahanan, aku mung bisa nulis manawa kabeh artikel dikhususake kanggo ngatur router kanthi perangkat kukuh lan saluran komunikasi sing wis ditemtokake sing ora ditetepake sadurunge.

Ya, wiwitan kanggo masa depan: Aku durung ngerti carane nggunakake alat zabbix standar kanggo nggambarake asil (contone, asil saka nglakokake perintah) sing teka ing server.

Aku ngelingake yen kabeh sumber bisa dipikolehi saka repositori Git ing: github.com/BazDen/iotnet.online.git

Source: www.habr.com

Add a comment