80 порт аркылуу Linux/OpenWrt/Lede негизиндеги түзмөктөрдү алыстан көзөмөлдөө жана башкаруу улантылды

Бул макаланын акыркы бөлүгү, бул жерде башталышы habr.com/en/post/445568
Акыркы жолу мен аппараттын мониторингин кантип ишке ашырганым жөнүндө жазган элем, эми башкаруу жөнүндө сүйлөшөбүз. Кардар тарабындагы "техниктер" менен болгон талкууларда мен мындай кичинекей түзүлүштөрдүн мүмкүнчүлүктөрүн (эс ресурстары жана иштөөсү төмөн) чектелген кабылдоого көп жолугамын, көбү "бизге эң керектүү нерсе - кайра жүктөөнү жөнөтүү, дагы бир нерсе үчүн" деп эсептешет. олуттуу, биз бир команда жөнөтөбүз ".
Бирок практика көрсөткөндөй, бул таптакыр туура эмес. Бул жерде жалпы типтүү милдеттердин кичинекей тизмеси:

  1. Тармактын диагностикасы жана көйгөйлөрүн чечүү. Сиздин роутериңиздин Ethernet портунун артында адатта өзүнүн ички IP дареги бар башка аппараттык жабдуу бар. Кээде, сиз (керек) аны "пинг" аласыз. Же туннелди башкаруу - эгерде туннель 3G модеми аркылуу иштеген роутерде күтүлбөгөн жерден көтөрүлбөсө, бирок биз роутердин өзүн көрө алабыз.
  2. Системаны тейлөө. Микропрограмманы жаңыртуу, кызмат сценарийин жаңыртуу.
  3. Тең салмактуулук актысы. Муну "бурмалоо" деп атоого болот, бирок "эквилибрист" түшүнүгү, мен цитата келтирем, "Цирк артистинин дененин туруксуз абалында тең салмактуулукту сактоо жөндөмү" - жакшыраак туура келет. Мындай жагдайлар кардардын чектелген бюджетинен улам пайда болот. Төмөндө мен бир нече мисал келтирдим, бирок... Алар аңгеменин темасына түздөн-түз тиешеси жок, мен аларды жазууга киргизип койдум

Wi-Fi мониторингиАкыркы беш жылдагы модалуу тема, негизинен федералдык соода түйүндөрүндө. Сиз соода аянтчаларында жайбаракат сейилдеп жатасыз жана Wi-Fi күйгүзүлгөн уюлдук телефонуңуз тармактын кандайдыр бир жипине "жабышууга" аракет кылып, текшерүү үчүн талдоо жүргүзүүгө мүмкүн болгон Probe Request пакеттерин дайыма жөнөтүп турат. сиз: бул дүкөнгө канча жолу келесиз, кандай себептер менен? сиз траекториялар менен жүрөсүз ж.б.у.с. Андан кийин маалыматтар чогултулуп, анализделип, жылуулук карталары түзүлүп, мындай сүрөттөр үчүн жетекчилер жетекчиликтен же инвесторлордон акча «опузалап» алышат. Ооба, азыр .... "акча жок, бирок сен кармайсың ...", жана натыйжа (чыныгы) буга чейин көрсөтүлүшү керек, эски жакшы ыр башталат: "Ооба, ооба, анда албетте биз cis жана сиз каалаган нерселердин бардыгын орнотот, бирок азыр биз Кардарга натыйжаны көрсөтүшүбүз керек! Баса, Кардар Wi-Fi аркылуу биздин жабдууларды өзүнүн хотспотуна туташтырууга уруксат бергенин унутуп калдык, бирок биз конок кардарларыбыздай эле жалпы негизде». Ошентип, биз балансташтыруучу роутерлерди жасашыбыз керек - бир нече WiFi субинтерфейстери көтөрүлөт, алардын бири хотспотко жабышат, ал эми экинчиси айлана-чөйрөнү көзөмөлдөйт, tcpdump натыйжасын өзүнө жүктөйт, андан кийин файлдын мазмунун архивге топтоп, тобокелдиктерди жаратат. "ашып кетүүдөн" өлүп жаткан адам FTP сервериндеги мазмунду түкүргөнгө аракет кылат. Бул таң калыштуу эмес, балансташтыруу роутер көп учурда "бузуп" жана кандайдыр бир жол менен алыстан "реанимацияга" туура келет.

радиусБул жерде кардардын мындай билдирүүсү менен кырдаалды сүрөттөп берүү оңой болот: «Биз борбордон ажыратылган түйүндөр тармагын каалайбыз, анын модели алдын ала белгилүү болбогон жабдууларда каналдар аркылуу, бирок кайсынысы биз билбейт. Айтканды унутуп калыптырбыз, биз кардарларга жарнак көрсөтүүнү гана каалабастан, ошондой эле хотспот орнотулган жердин тегерегиндеги нерселердин баарын анализдеп жатабыз. Жок, эмне үчүн экенин азырынча билбейбиз, бирок биз муну чечебиз, шектенбегиле, биз бул идеяны ойлоп таба алдык».

Ал эми буга чейин белгисиз болгон көптөгөн жагдайлардан улам биз роутерге IP: порт аркылуу түздөн-түз туташа албай, андан жигердүүлүктү күтүүгө аргасыз болгондо, контролдоо стандарттуу эмес шарттарда жүргүзүлүшү керек экенин унутпашыбыз керек. Эгерде биз өзүбүздү абстракциялай турган болсок, сервер менен роутердин ортосундагы диалог төмөнкүчө чагылдырылышы мүмкүн:

  • роутер: Салам. Мен баланча роутермин, мага тапшырмалар барбы?
  • Server: роутер мындай жана мындай, мен сени каттадым, сен тирүү экенсиң. Бул жерде көйгөй: мага ifconfig буйругунун жыйынтыгын көрсөтөсүзбү?
  • роутер: Салам. Мен баланча роутермин, акыркы жолу сиз ifconfig натыйжасын көрсөтүүнү сурангансыз, бул жерде. Мага тапшырмалар барбы?
  • Server: роутер мындай жана мындай, мен сени каттадым, сен тирүү экенсиң. Сиз үчүн эч кандай тапшырма жок.

Эң кызыктуу суроо: алыскы роутер кантип белгилүү бир көлөмдөгү маалыматты жөнөтө алат? Акыркы бөлүктө мен ресурстардын чектелгендигинен улам роутерде GET аркылуу гана иштеген, башка эч нерсе болбогон "чыгылган" wget бар экенин сүрөттөп бердим; FTP кардары же curl жок. Тагыраак айтканда, бизге сүрөттү чогултуунун өзгөчөлүктөрүнө карабастан универсалдуу ыкма керек. Мен wget колдонууну чечтим. Тагыраак айтканда, мен кантип "токтодум" - менде башка арга жок болчу :)

Жөн гана баш тартууМенин башкаруу чечимим иштеп жатат, өтө эле чектелген эмес жана мен кардарларымдын көбүнө туура келсе дагы, ал кыйшык экенине ишенем. Муну кантип акылдуулук менен кыла алмаксыз - 80 порт аркылуу POST экилик берилиштерин жөнөтүүчү чакан утилитаны жазыңыз. Аны (утилитаны) роутердин микропрограммасына кошуңуз жана ага bash аркылуу кириңиз. Бирок, чындык: а) биз тез арада иштешибиз керек б) мүмкүн болгон "маршрутизаторлор зоопаркында" бардыгын жасашыбыз керек в) "зыян кылба!" — эгер роутер иштеп жана башка тапшырмаларды аткарып жатса, учурдагы функцияга таасирин тийгизбей турган өзгөртүүлөрдү киргизүүгө аракет кылыңыз.

Ишке ашырууга өтөлү. Сиздин кардарыңыз "чычканды чыкылдатуу" менен роутерди zabbixтен оңой жана табигый түрдө кайра жүктөөнү каалайт дейли. Бүгүн биз Zabbix менен ишке ашырууну сүрөттөп баштайбыз.
"Администрация" -> "Скрипттер" менюсуна жаңы скрипт кошуңуз. Биз аны "Кайра жүктөө" деп атайбыз, буйрук катары "php /usr/share/zabbix/reboot.php {HOST.HOST}" киргизиңиз

80 порт аркылуу Linux/OpenWrt/Lede негизиндеги түзмөктөрдү алыстан көзөмөлдөө жана башкаруу улантылды

Кийинки: Меню "Мониторинг" -> "Акыркы маалыматтар" -> "Керектүү тармак түйүнүнө чычкандын оң баскычын чыкылдатыңыз." Сценарийди кошкондон кийин меню ушундай болот.

80 порт аркылуу Linux/OpenWrt/Lede негизиндеги түзмөктөрдү алыстан көзөмөлдөө жана башкаруу улантылды
Ошого жараша, reboot.php скриптин /usr/share/zabbix каталогуна койдук (сиздики башкача болушу мүмкүн, мен zabbixa тамыр каталогун колдоном).

Коопсуздуктан баш тартууСкриптте түшүндүрмө так болушу үчүн, мен роутердин идентификаторун гана колдоном, бирок сырсөздү колдонбойм. Өндүрүш версиясында муну жасоо сунушталбайт! Эмне үчүн мен муну кылдым: анткени чоң суроо роутерлердин сырсөздөрүн кайда сактоо керек? Zabbixe өзү "инвентаризация маалыматтарында"? Талаштуу практика. Же болбосо: reboot.php файлынын өзүнө тышкы кирүүнү чектөө

Файл 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();
?>

Баары болду. Суроо ачык бойдон калууда: "түзмөктөн буйрукту аткаруунун натыйжасын кантип алууга болот." Мисал катары ifconfig буйругун колдонуп тапшырманы карап көрөлү. Бул буйрук аппаратка жөнөтүлүшү мүмкүн:

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

бул жерде:
message=`ifconfig` — ifconfig буйругунун жыйынтыгын $message өзгөрмөсүнө дайындайбыз
wget "xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — роутерлерди каттаган жана алардан билдирүүлөрдү кабыл алган биздин a.php скриптибиз
u=user&p=password!&m=$билдирүү — эсептик маалыматтар жана суроо өзгөрмөнүн мааниси m — $билдирүү өзгөрмөсүнүн мазмунун дайындайт
-O /tmp/out.txt — бул учурда /tmp/out.txt файлына чыгаруунун кереги жок, бирок бул параметр көрсөтүлбөсө, wget иштебейт

Эмне үчүн бул иштебейт?Анткени бул потенциалдуу коопсуздук тешиги. Эң зыянсыз ката, мисалы, сиздин буйругуңуздун жыйынтыгында "&" белгиси бар болсо. Ошондуктан, роутерлерден жөнөтүлгөндөрдүн жана серверге келгендердин бардыгын чыпкалоо керек. Ооба, чындап уялам. Мен өзүмдүн коргоомдо, мен бүт макала алдын ала аныкталган микропрограмма жана байланыш каналдары менен роутерлерди кантип башкарууга арналганын гана жаза алам.

Келечектин башталышы: мен серверге келген натыйжаларды (мисалы, буйрукту аткаруунун натыйжасын) чагылдыруу үчүн стандарттык zabbix куралдарын кантип колдонууну түшүнө элекмин.

Бардык булактарды Git репозиторийинен алса болот деп эскертем: github.com/BazDen/iotnet.online.git

Source: www.habr.com

Комментарий кошуу