80 port vasitəsilə Linux/OpenWrt/Lede cihazlarının uzaqdan monitorinqi və nəzarəti davam etdirildi

Bu, məqalənin son hissəsidir, başlanğıcıdır habr.com/en/post/445568
Keçən dəfə cihazın monitorinqini necə həyata keçirdiyim haqqında yazmışdım, indi idarəetmə haqqında danışacağıq. Müştəri tərəfində olan “texniklərlə” müzakirələrdə mən tez-tez belə kiçik cihazların imkanlarının məhdud qavrayışı ilə qarşılaşıram (yaddaş ehtiyatları və performansı azdır), çoxları hesab edir ki, “bizə ən çox ehtiyacımız olan şey daha çox şey üçün yenidən yükləmə göndərməkdir. ciddi komanda göndərəcəyik”.
Amma təcrübə göstərir ki, bu, tamamilə doğru deyil. Budur ümumi tipik tapşırıqların kiçik bir siyahısı:

  1. Şəbəkə diaqnostikası və problemlərin aradan qaldırılması. Routerinizin ethernet portunun arxasında adətən öz daxili IP ünvanı olan başqa bir aparat parçası var. Bəzən onu "ping" edə bilərsiniz (gərəkdir). Və ya tunelin idarə edilməsi - əgər tunel 3G modem vasitəsilə işləyən marşrutlaşdırıcıda birdən qalxmazsa, lakin biz marşrutlaşdırıcının özünü görə bilirik.
  2. Sistemə texniki qulluq. Firmware yeniləməsi, xidmət skriptinin təkmilləşdirilməsi.
  3. Balanslaşdırma aktı. Bunu “pozğunluq” adlandırmaq olar, lakin “ekvilibrist” anlayışı, mən sitat gətirirəm ki, "sirk ifaçısının qeyri-sabit bədən mövqeyində tarazlığı saxlamaq qabiliyyəti" - daha yaxşı uyğun gəlir. Belə hallar müştərinin məhdud büdcəsi səbəbindən yaranır. Aşağıda bir-iki misal verdim, amma... Hekayənin mövzusu ilə birbaşa əlaqəsi yoxdur, qeydlərə qoyuram

Wi-Fi monitorinqiƏsasən federal pərakəndə satış şəbəkələri arasında son beş ildə dəbdə olan mövzu. Siz ticarət meydançalarında rahat gəzirsiniz və aktivləşdirilmiş Wi-Fi ilə mobil telefonunuz şəbəkənin hansısa telinə “yapışmaq” cəhdi ilə mütəmadi olaraq Probe Sorğu paketlərini göndərir ki, onları hesablamaq üçün təhlil etmək olar. siz: bu mağazaya nə qədər tez-tez gəlirsiniz, hansı səbəbdən? trayektoriyalarla gedirsiniz və s. Sonra məlumatlar toplanır, təhlil edilir, istilik xəritələri tərtib edilir və menecerlər bu cür şəkillər üçün rəhbərlikdən və ya investorlardan pul “qoparırlar”. Yaxşı, hələlik.... “pul yoxdur, amma dayanırsan...” və nəticə (real) artıq göstərilməlidir, köhnə yaxşı mahnı başlayır: “Bəli, bəli, onda əlbəttə ki, biz cis və istədiyiniz hər şeyi quraşdıracaq, lakin indi biz Müştəriyə nəticəni göstərməliyik! Yeri gəlmişkən, unutmuşuq ki, Müştəri avadanlığımızı Wi-Fi vasitəsilə öz qaynar nöqtəsinə qoşmağa icazə verib, amma ümumi əsasda, elə bil qonaq müştəriyik”. Beləliklə, biz balanslaşdırıcı marşrutlaşdırıcılar yaratmalıyıq - bir neçə WiFi alt interfeysi qaldırılır, onlardan biri qaynar nöqtəyə yapışır, ikincisi isə ətraf mühitə nəzarət edir, tcpdump nəticəsini çılğınlıqla özünə yükləyir, sonra faylın məzmununu arxivə yığır və risklər yaradır. "Həddindən artıq yeməkdən" ölmək FTP serverindəki məzmunu tüpürməyə çalışır. Təəccüblü deyil ki, balanslaşdırıcı marşrutlaşdırıcı tez-tez "qırılır" və bir şəkildə uzaqdan "reanimasiya edilməlidir".

RadiusBuradakı vəziyyəti müştərinin bu ifadəsi ilə təsvir etmək daha asandır: “Biz modeli əvvəlcədən bilinməyən, lakin hələ bilmədiyimiz kanallar vasitəsilə avadanlıqlarda işləyəcək mərkəzləşdirilməmiş qaynar nöqtələr şəbəkəsi istəyirik. Oh, biz deməyi unutmuşuq, biz müştərilərə reklam göstərməklə yanaşı, hotspotun quraşdırıldığı məkanın ətrafındakı hər şeyi təhlil etmək istəyirik. Xeyr, bunun səbəbini hələ bilmirik, amma biz bunu anlayacağıq, şübhə etməyin, biz bu ideya ilə çıxış edə bildik”.

Unutmamalıyıq ki, bir çox əvvəllər naməlum hallar səbəbindən nəzarət qeyri-standart şəraitdə aparılmalıdır, biz marşrutlaşdırıcıya birbaşa IP: port vasitəsilə qoşula bilmirik və sadəcə ondan fəaliyyət gözləmək məcburiyyətindəyik. Özümüzü mücərrəd etsək, server və marşrutlaşdırıcı arasındakı dialoq belə göstərilə bilər:

  • Router: Salam. Mən filan routerəm, mənim üçün tapşırıqlar varmı?
  • Server: router filan, mən səni qeydiyyatdan keçirdim ki, sağsan. Çətinlik budur: ifconfig əmrinin nəticəsini mənə göstərin?
  • Router: Salam. Mən filan routerəm, axırıncı dəfə ifconfig-in nəticəsini göstərməyi xahiş etdiniz, budur. Mənim üçün tapşırıqlar varmı?
  • Server: router filan, mən səni qeydiyyatdan keçirdim ki, sağsan. Sizin üçün tapşırıq yoxdur.

Ən maraqlı sual: uzaq bir marşrutlaşdırıcı müəyyən miqdarda məlumatı necə göndərə bilər? Son hissədə təsvir etdim ki, məhdud resurslara görə, marşrutlaşdırıcıda yalnız GET vasitəsilə işləyən və başqa heç bir şey olmayan “çıxarılmış” wget var; FTP müştərisi və ya curl yoxdur. Daha dəqiq desək, təsvirin yığılmasının xüsusiyyətlərindən asılı olmayaraq universal üsula ehtiyacımız var. Mən wget istifadə etməyə qərar verdim. Daha doğrusu, necə "dayandım" - sadəcə seçimim yox idi :)

Sadəcə bir imtinaMənim idarəetmə həllim işləyir, çox məhdud deyil və müştərilərimin əksəriyyətinə uyğun olsa belə, onun əyri olduğuna əminəm. Bunu necə ağıllı şəkildə edə bilərsiniz - 80 portu vasitəsilə POST ikili məlumat göndərən kiçik bir yardım proqramı yazın. Onu (utiliti) marşrutlaşdırıcının proqram təminatına daxil edin və bash-dan istifadə edərək ona daxil olun. Ancaq reallıq budur ki: a) tez etməliyik b) yəqin ki, mövcud "marşrutlaşdırıcılar zooparkında" hər şeyi etməliyik c) "zərər verməyin!" — marşrutlaşdırıcı işləyirsə və digər tapşırıqları yerinə yetirirsə, mövcud funksionallığa təsir etməyəcək dəyişikliklər etməyə çalışın.

Gəlin icraya keçək. Deyək ki, müştəriniz “siçanın klikləməsi” ilə marşrutlaşdırıcını zabbix-dən asanlıqla və təbii şəkildə yenidən yükləmək istəyir. Bu gün biz Zabbix ilə tətbiqi təsvir etməyə başlayacağıq.
“İdarəetmə” -> “Skriptlər” menyusunda yeni skript əlavə edin. Biz buna “Reboot” deyirik, əmr olaraq “php /usr/share/zabbix/reboot.php {HOST.HOST}” daxil edin

80 port vasitəsilə Linux/OpenWrt/Lede cihazlarının uzaqdan monitorinqi və nəzarəti davam etdirildi

Sonrakı: "Monitorinq" menyusu -> "Son məlumatlar" -> "İstədiyiniz şəbəkə nodeuna sağ klikləyin." Skripti əlavə etdikdən sonra menyu belə görünəcək.

80 port vasitəsilə Linux/OpenWrt/Lede cihazlarının uzaqdan monitorinqi və nəzarəti davam etdirildi
Buna uyğun olaraq reboot.php skriptini /usr/share/zabbix qovluğuna qoyuruq (sizinki fərqli ola bilər, mən zabbixa kök kataloqundan istifadə edirəm).

Təhlükəsizlik İmtina BəyanatıSkriptdə izahı daha aydın etmək üçün mən yalnız router id-dən istifadə edirəm, lakin paroldan istifadə etmirəm. İstehsal versiyasında bunu etmək tövsiyə edilmir! Niyə bunu etdim: çünki böyük sual marşrutlaşdırıcılar üçün parolları harada saxlamaqdır? Zabbixe-in özündə "inventar məlumatlarında"? Mübahisəli təcrübə. Alternativ olaraq: reboot.php faylının özünə xarici girişi məhdudlaşdırın

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

Hamısı budur. Sual açıq qalır: "cihazdan əmrin icrasının nəticəsini necə əldə etmək olar." Nümunə olaraq ifconfig əmrindən istifadə edərək tapşırığa baxaq. Bu əmr cihaza göndərilə bilər:

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

harada:
mesaj = `ifconfig` — ifconfig əmrinin nəticəsini $message dəyişəninə təyin edirik
wget "xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — marşrutlaşdırıcıları qeyd edən və onlardan mesaj alan a.php skriptimiz
u=user&p=parol!&m=$message — etimadnamələr və sorğu dəyişəninin dəyəri m — $message dəyişəninin məzmununu təyin edir
-O /tmp/out.txt — bu halda /tmp/out.txt faylına çıxışa ehtiyacımız yoxdur, lakin bu parametr göstərilməyibsə, wget işləmir

Bu niyə işləmir?Çünki bu, potensial təhlükəsizlik boşluğudur. Baş verə biləcək ən zərərsiz səhv, məsələn, əmrinizin çıxışında “&” simvolunun olmasıdır. Buna görə də, həm marşrutlaşdırıcılardan göndərilən hər şeyi, həm də serverə gələn hər şeyi süzgəcdən keçirmək lazımdır. Hə, həqiqətən utanıram. Müdafiəmdə yalnız yaza bilərəm ki, bütün məqalə əvvəlcədən müəyyən edilmiş proqram təminatı və əvvəlcədən müəyyən edilməmiş rabitə kanalları ilə marşrutlaşdırıcıları necə idarə etməyə həsr olunub.

Yaxşı, gələcək üçün bir başlanğıc: serverə gələn nəticələri (məsələn, əmrin icrasının nəticəsi) əks etdirmək üçün standart zabbix alətlərindən necə istifadə edəcəyimi hələ başa düşməmişəm.

Xatırladıram ki, bütün mənbələri Git repozitoriyasından əldə etmək olar: github.com/BazDen/iotnet.online.git

Mənbə: www.habr.com

Добавить комментарий