80-port orqali Linux/OpenWrt/Lede asosidagi qurilmalarni masofadan nazorat qilish va boshqarish davom ettirildi

Bu maqolaning yakuniy qismi, bu erda boshlanishi habr.com/ru/post/445568
Oxirgi marta men qurilma monitoringini qanday amalga oshirganim haqida yozgan edim, endi menejment haqida gaplashamiz. Buyurtmachi tomonidagi "texniklar" bilan suhbatda men ko'pincha bunday kichik qurilmalarning imkoniyatlari (xotira resurslari va unumdorligi past) to'g'risida cheklangan tasavvurga duch kelaman, ko'pchilik "bizga yana bir narsa uchun qayta ishga tushirishni yuborish kerak", deb hisoblashadi. jiddiy, biz bir jamoa yuboramiz ".
Ammo amaliyot shuni ko'rsatadiki, bu mutlaqo to'g'ri emas. Bu erda umumiy odatiy vazifalarning kichik ro'yxati:

  1. Tarmoq diagnostikasi va muammolarni bartaraf etish. Routeringizning Ethernet portining orqasida odatda o'zining ichki IP manziliga ega bo'lgan boshqa apparat qismi mavjud. Ba'zan siz uni "ping" qilishingiz mumkin (kerak). Yoki tunnelni boshqarish - agar tunnel 3G modem orqali ishlaydigan routerda to'satdan ko'tarilmasa, lekin biz yo'riqnoma o'zini ko'rishimiz mumkin.
  2. Tizimga texnik xizmat ko'rsatish. Mikrodasturni yangilash, xizmat skriptini yangilash.
  3. Balanslash harakati. Buni "buzilish" deb atash mumkin, ammo "ekvilibrist" tushunchasi, men keltiraman, "tsirk ijrochisining beqaror tana holatida muvozanatni saqlash qobiliyati" - yaxshiroq mos keladi. Bunday holatlar mijozning cheklangan byudjeti tufayli yuzaga keladi. Quyida men bir nechta misol keltirdim, lekin... Ular to'g'ridan-to'g'ri hikoya mavzusiga bog'liq emas, men ularni eslatmalarga qo'yaman

Wi-Fi monitoringiSo'nggi besh yil ichida moda mavzusi, asosan federal chakana savdo tarmoqlari orasida. Siz savdo maydonchalarida bemalol sayr qilyapsiz va Wi-Fi yoqilgan mobil telefoningiz tarmoqning biron bir tarmog'iga "yopishish" uchun muntazam ravishda tekshirish uchun so'rov paketlarini yuboradi, ularni hisoblash uchun tahlil qilish mumkin. siz: bu do'konga qanchalik tez-tez kelasiz, qanday sabablarga ko'ra? traektoriyalar bo'ylab yurasiz va hokazo. Keyin ma'lumotlar yig'iladi, tahlil qilinadi, issiqlik xaritalari tuziladi va menejerlar bunday suratlar uchun menejment yoki investorlardan pul "qo'zg'atadi". Xo'sh, hozircha .... "pul yo'q, lekin siz ushlab turasiz ..." va natija (haqiqiy) allaqachon ko'rsatilishi kerak, yaxshi eski qo'shiq boshlanadi: "Ha, ha, keyin, albatta, biz cis va siz xohlagan hamma narsani o'rnatadi, lekin endi biz mijozga natijani ko'rsatishimiz kerak! Darvoqe, biz aytishni unutib qo‘ydikki, Buyurtmachi bizga uskunamizni Wi-Fi orqali o‘zining hotspotiga ulashga ruxsat berdi, lekin umumiy asosda, xuddi biz mehmon mijoz sifatida». Shunday qilib, biz balanslash marshrutizatorlarini yaratishimiz kerak - bir nechta WiFi sub-interfeyslari ko'tariladi, ulardan biri hotspotga yopishadi, ikkinchisi esa atrof-muhitni kuzatib boradi, tcpdump natijasini o'ziga jo'shqin tarzda yuklaydi, so'ngra fayl tarkibini arxivga joylashtiradi va xavf tug'diradi. "ortiqcha ovqatlanish" dan o'lish FTP serveridagi tarkibni tupurishga harakat qiladi. Balanslash marshrutizatori tez-tez "buziladi" va qandaydir tarzda masofadan turib "reanimatsiya" bo'lishi kerakligi ajablanarli emas.

radiusBu erda vaziyatni mijozning quyidagi bayonoti bilan tasvirlash osonroq: “Biz modeli oldindan maʼlum boʻlmagan, ammo qaysi biri bizga maʼlum boʻlmagan uskunalarda ishlaydigan markazlashtirilmagan tarmoqni istaymiz. Oh, aytishni unutib qo'ydik, biz nafaqat mijozlarga reklama ko'rsatishni, balki hotspot o'rnatilgan joy atrofidagi hamma narsani tahlil qilishni xohlaymiz. Yo‘q, nega buni hozircha bilmaymiz, lekin biz buni aniqlaymiz, shubhalanmang, biz bu fikrni o‘ylab topdik”.

Va shuni unutmasligimiz kerakki, ilgari noma'lum bo'lgan juda ko'p holatlar tufayli nazorat nostandart sharoitlarda amalga oshirilishi kerak, biz routerga to'g'ridan-to'g'ri IP: port orqali ulana olmasak va undan faollikni kutishga majbur bo'lamiz. Agar biz o'zimizni mavhum qilsak, server va router o'rtasidagi dialog quyidagicha ifodalanishi mumkin:

  • Router: Salom. Men falon yo'riqchiman, men uchun biron bir vazifa bormi?
  • Server: router falon va shunday, men sizni ro'yxatdan o'tkazdim, siz tiriksiz. Mana muammo: menga ifconfig buyrug'ining natijasini ko'rsatingmi?
  • Router: Salom. Men falon routerman, oxirgi marta ifconfig natijasini ko'rsatishni so'ragan bo'lsangiz, mana shu. Menga topshiriqlar bormi?
  • Server: router falon va shunday, men sizni ro'yxatdan o'tkazdim, siz tiriksiz. Siz uchun hech qanday vazifa yo'q.

Eng qiziqarli savol: masofaviy router ma'lum miqdordagi ma'lumotni qanday yuborishi mumkin? Oxirgi qismda men cheklangan resurslar tufayli marshrutizatorda faqat GET orqali ishlaydigan va boshqa hech narsa bo'lmagan "o'chirilgan" wget borligini tasvirlab berdim; FTP mijozi yoki jingalak yo'q. Aniqrog'i, tasvirni yig'ish xususiyatlaridan qat'i nazar, biz universal usulga muhtojmiz. Men wget dan foydalanishga qaror qildim. Aniqrog'i, men qanday qilib "to'xtadim" - boshqa ilojim yo'q edi :)

Faqat rad etishMening boshqaruv yechimim ishlayapti, unchalik cheklangan emas va ishonchim komilki, u ko'pchilik mijozlarimga mos bo'lsa ham, egri. Buni qanday qilib oqilona qilish mumkin edi - 80-port orqali POST ikkilik ma'lumotlarini yuboradigan kichik yordam dasturini yozing. Uni (yordamchi dasturni) yo'riqnoma proshivkasiga qo'shing va unga bash yordamida kiring. Ammo haqiqat shundaki: a) biz tezda bo'lishimiz kerak b) biz mavjud "marshrutizatorlar hayvonot bog'ida" hamma narsani qilishimiz kerak c) "zarar qilmang!" — agar marshrutizator ishlayotgan bo'lsa va boshqa vazifalarni bajarayotgan bo'lsa, mavjud funksionallikka ta'sir qilmaydigan o'zgartirishlar kiritishga harakat qiling.

Keling, amalga oshirishga o'tamiz. Aytaylik, sizning mijozingiz “sichqonchani bosish” orqali routerni zabbix-dan oson va tabiiy ravishda qayta ishga tushirishni xohlaydi. Bugun biz Zabbix bilan amalga oshirishni tasvirlashni boshlaymiz.
"Ma'muriyat" -> "Skriptlar" menyusida yangi skript qo'shing. Biz uni “Reboot” deb ataymiz, buyruq sifatida “php /usr/share/zabbix/reboot.php {HOST.HOST}” ni kiriting.

80-port orqali Linux/OpenWrt/Lede asosidagi qurilmalarni masofadan nazorat qilish va boshqarish davom ettirildi

Keyingi: "Monitoring" menyusi -> "So'nggi ma'lumotlar" -> "Istalgan tarmoq tugunini sichqonchaning o'ng tugmasi bilan bosing." Skriptni qo'shgandan keyin menyu shunday ko'rinadi.

80-port orqali Linux/OpenWrt/Lede asosidagi qurilmalarni masofadan nazorat qilish va boshqarish davom ettirildi
Shunga ko'ra, biz reboot.php skriptini /usr/share/zabbix katalogiga joylashtiramiz (sizniki boshqacha bo'lishi mumkin, men zabbixa ildiz katalogidan foydalanaman).

Xavfsizlikdan voz kechishSkriptdagi tushuntirishni aniqroq qilish uchun men faqat yo'riqnoma identifikatoridan foydalanaman, lekin parolni ishlatmayman. Ishlab chiqarish versiyasida buni qilish tavsiya etilmaydi! Nima uchun men buni qildim: chunki katta savol marshrutizatorlar uchun parollarni qayerda saqlash kerak? Zabbixe-ning o'zida "inventar ma'lumotlari" da? Munozarali amaliyot. Shu bilan bir qatorda: reboot.php fayliga tashqi kirishni cheklang

reboot.php fayli

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

Ana xolos. Savol ochiq qolmoqda: "qurilmadan buyruqni bajarish natijasini qanday olish mumkin." Misol sifatida ifconfig buyrug'i yordamida topshiriqni ko'rib chiqamiz. Ushbu buyruq qurilmaga yuborilishi mumkin:

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

qaerda:
message=`ifconfig` — ifconfig buyrug'i chiqishi natijasini $message o'zgaruvchisiga belgilaymiz
wget "xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — marshrutizatorlarni ro‘yxatdan o‘tkazuvchi va ulardan xabarlarni qabul qiluvchi a.php skriptimiz
u=user&p=parol!&m=$xabar — hisob maʼlumotlari va soʻrov oʻzgaruvchisining qiymati m — $message oʻzgaruvchisi mazmunini tayinlaydi
-O /tmp/out.txt — bu holda bizga /tmp/out.txt fayliga chiqish kerak emas, lekin agar bu parametr ko'rsatilmagan bo'lsa, wget ishlamaydi

Nega bu ishlamayapti?Chunki bu potentsial xavfsizlik teshigi. Ro'y berishi mumkin bo'lgan eng zararsiz xato, masalan, buyruqning chiqishida "&" belgisi mavjud bo'lsa. Shuning uchun, marshrutizatorlardan yuborilgan hamma narsani ham, serverga kelgan hamma narsani ham filtrlash kerak. Ha, rostdan ham uyaldim. O'z himoyamda faqat butun maqola oldindan aniqlanmagan proshivka va aloqa kanallari bilan marshrutizatorlarni qanday boshqarishga bag'ishlanganligini yozishim mumkin.

Xo'sh, kelajak uchun boshlanish: men serverga kelgan natijalarni (masalan, buyruqni bajarish natijasini) aks ettirish uchun standart zabbix vositalaridan qanday foydalanishni hali tushunmadim.

Sizga shuni eslatib o'tamanki, barcha manbalarni Git omboridan olish mumkin: github.com/BazDen/iotnet.online.git

Manba: www.habr.com

a Izoh qo'shish