80-р портоор дамжуулан Linux/OpenWrt/Lede төхөөрөмжүүдийг алсаас хянах, хянах ажлыг үргэлжлүүлэв

Энэ бол нийтлэлийн төгсгөлийн хэсэг, энд эхлэл юм habr.com/en/post/445568
Хамгийн сүүлд би төхөөрөмжийн хяналтыг хэрхэн хэрэгжүүлсэн тухай бичсэн бол одоо удирдлагын талаар ярих болно. Хэрэглэгчийн талын "техникчид"-тэй ярилцахдаа ийм жижиг төхөөрөмжүүдийн (санах ойн нөөц багатай, гүйцэтгэл багатай) хязгаарлагдмал ойлголттой байнга тулгардаг, олон хүн "бидэнд хамгийн их хэрэгтэй зүйл бол дахин ачаалах явдал юм" гэж итгэдэг. нухацтай бид багаа явуулна."
Гэвч практик нь энэ нь бүхэлдээ үнэн биш гэдгийг харуулж байна. Энд нийтлэг ердийн ажлуудын жижиг жагсаалт байна:

  1. Сүлжээний оношлогоо, алдааг олж засварлах. Таны чиглүүлэгчийн Ethernet портын ард ихэвчлэн өөрийн дотоод IP хаягтай өөр нэг техник хангамж байдаг. Заримдаа та үүнийг "пинг" хийх боломжтой. Эсвэл туннелийн менежмент - хэрэв 3G модемоор ажилладаг чиглүүлэгч дээр хонгил гэнэт босдоггүй, гэхдээ бид чиглүүлэгчийг өөрөө харж болно.
  2. Системийн засвар үйлчилгээ. Програм хангамжийн шинэчлэлт, үйлчилгээний скриптийг шинэчлэх.
  3. Тэнцвэржүүлэх үйлдэл. Үүнийг "гажиг" гэж нэрлэж болох ч "тэнцвэрт" гэсэн ойлголтыг би иш татсан. "Циркийн жүжигчний биеийн тогтворгүй байрлалд тэнцвэрийг хадгалах чадвар" - илүү тохиромжтой. Ийм нөхцөл байдал нь үйлчлүүлэгчийн төсөв хязгаарлагдмал байдлаас болж үүсдэг. Доор би хэд хэдэн жишээ дурдлаа, гэхдээ ... Тэдгээр нь үлгэрийн сэдэвтэй шууд холбоотой биш, би тэдгээрийг тэмдэглэлд оруулсан

Wi-Fi хяналтХолбооны жижиглэн худалдааны сүлжээнүүдийн дунд сүүлийн таван жилийн загварлаг сэдэв. Та худалдааны талбайгаар тайван алхаж байгаа бөгөөд Wi-Fi асаалттай гар утас чинь сүлжээний аль нэг утсанд "наалдахыг" оролдохын тулд шалгах хүсэлтийн багцуудыг тогтмол илгээдэг бөгөөд үүнийг тооцоолохын тулд дүн шинжилгээ хийх боломжтой. чи: чи энэ дэлгүүрт хэр олон удаа ирдэг вэ, ямар шалтгаанаар ирдэг вэ? чи зам дагуу алхдаг гэх мэт. Дараа нь мэдээлэл цуглуулж, дүн шинжилгээ хийж, дулааны зураглалыг зурж, менежерүүд ийм зураг авахын тулд удирдлага эсвэл хөрөнгө оруулагчдаас мөнгө "заадаг". За, одоохондоо .... "мөнгө байхгүй, гэхдээ та барь...", үр дүн нь (бодит) аль хэдийн харуулах шаардлагатай, хуучин сайхан дуу эхэлдэг: "Тиймээ, тийм, тэгвэл бид мэдээжийн хэрэг. cis болон таны хүссэн бүх зүйлийг суулгах болно, гэхдээ одоо бид үр дүнг Хэрэглэгчид харуулах хэрэгтэй! Дашрамд дурдахад, Хэрэглэгч бидэнд тоног төхөөрөмжөө Wi-Fi-аар дамжуулан өөрийн халуун цэгт холбохыг зөвшөөрсөн боловч ерөнхийдөө зочин үйлчлүүлэгч юм шиг хэлэхээ мартсан байна." Тиймээс бид тэнцвэржүүлэгч чиглүүлэгчийг хийх ёстой - хэд хэдэн WiFi дэд интерфэйсүүд гарч ирдэг бөгөөд тэдгээрийн нэг нь халуун цэгт наалддаг, хоёр дахь нь хүрээлэн буй орчныг хянаж, tcpdump-ийн үр дүнг өөрөө өөртөө байршуулж, дараа нь файлын агуулгыг архивт хийж, эрсдэлд оруулах болно. "хэт идэж" үхэх нь FTP сервер дээрх агуулгыг нулимахыг оролддог. Тэнцвэржүүлэгч чиглүүлэгч нь ихэвчлэн "эвдэрч", ямар нэгэн байдлаар алсаас "сэргээх" шаардлагатай байдаг нь гайхах зүйл биш юм.

РадиусҮйлчлүүлэгчийн хэлсэн үгтэй төстэй нөхцөл байдлыг тайлбарлахад илүү хялбар болно. “Бид загвар нь урьдчилж тодорхойгүй байгаа тоног төхөөрөмж дээр сувгаар дамжих төвлөрсөн бус сүлжээг хүсч байна, гэхдээ аль нь бидний мэдэхгүй байна. Өө, бид зөвхөн үйлчлүүлэгчдэд зар сурталчилгаа үзүүлэхийг хүсч байгаагаас гадна халуун цэг суурилуулсан байршлын эргэн тойронд байгаа бүх зүйлийг шинжлэхийг мартсан байна. Үгүй ээ, бид яагаад гэдгийг хараахан мэдэхгүй байна, гэхдээ бид үүнийг олох болно, эргэлзэх хэрэггүй, бид энэ санааг гаргаж чадсан."

Урьд нь үл мэдэгдэх олон нөхцөл байдлын улмаас бид чиглүүлэгч рүү IP: портоор шууд холбогдож чадахгүй байгаа бөгөөд үүнээс үйлдлийг хүлээхээс өөр аргагүй болсон үед хяналтыг стандарт бус нөхцөлд хийх ёстой гэдгийг мартаж болохгүй. Хэрэв бид өөрсдийгөө хийсвэрлэвэл сервер ба чиглүүлэгчийн хоорондын харилцан яриаг дараах байдлаар илэрхийлж болно.

  • Чиглүүлэгч: Сайн уу. Би ийм ийм чиглүүлэгч, надад хийх даалгавар байна уу?
  • Сервер: чиглүүлэгч ийм ийм, би чамайг амьд гэж бүртгүүлсэн. Энд сорилт байна: ifconfig командын үр дүнг надад харуулах уу?
  • Чиглүүлэгч: Сайн уу. Би ийм ийм чиглүүлэгч, та хамгийн сүүлд ifconfig-ийн үр дүнг харуулахыг хүссэн, энд байна. Надад хийх даалгавар байна уу?
  • Сервер: чиглүүлэгч ийм ийм, би чамайг амьд гэж бүртгүүлсэн. Танд хийх даалгавар алга.

Хамгийн сонирхолтой асуулт: алсын чиглүүлэгч нь тодорхой хэмжээний мэдээллийг хэрхэн илгээх вэ? Сүүлийн хэсэгт би хязгаарлагдмал нөөцийн улмаас чиглүүлэгч нь зөвхөн GET-ээр ажилладаг, өөр юу ч биш, FTP клиент эсвэл curl байхгүй зөвхөн "хуулагдсан" wget-тэй болохыг тайлбарласан. Илүү нарийвчлалтай, бид зургийн угсралтын онцлогоос үл хамааран бүх нийтийн арга хэрэгтэй. Би 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 root санг ашигладаг).

Аюулгүй байдлын тухай мэдэгдэлТайлбарыг скрипт дээр илүү ойлгомжтой болгохын тулд би зөвхөн чиглүүлэгчийн ID-г ашигладаг, гэхдээ нууц үг ашиглахгүй. Үйлдвэрлэлийн хувилбарт үүнийг хийхийг зөвлөдөггүй! Би яагаад үүнийг хийсэн бэ: яагаад гэвэл чиглүүлэгчийн нууц үгийг хаана хадгалах вэ гэдэг хамгийн том асуулт юм. 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=хэрэглэгч&p=нууц үг!&m=$мессеж — итгэмжлэл болон хүсэлтийн хувьсагчийн утга m — $message хувьсагчийн агуулгыг онооно
-O /tmp/out.txt - энэ тохиолдолд бидэнд /tmp/out.txt файлд гаралт хэрэггүй, гэхдээ энэ параметрийг заагаагүй бол wget ажиллахгүй.

Энэ яагаад ажиллахгүй байна вэ?Учир нь энэ бол аюулгүй байдлын цоорхой юм. Жишээлбэл, таны тушаалын гаралтад "&" тэмдэгт байгаа тохиолдолд гарч болох хамгийн хор хөнөөлгүй алдаа юм. Тиймээс чиглүүлэгчээс илгээсэн бүх зүйл болон серверт ирдэг бүх зүйлийг хоёуланг нь шүүх шаардлагатай. Тийм ээ, би үнэхээр ичиж байна. Миний өмгөөллийн хувьд би нийтлэлийг бүхэлд нь урьдчилан тодорхойлсон програм хангамж, урьдчилан тодорхойлогдоогүй холбооны сувгууд бүхий чиглүүлэгчийг хэрхэн удирдахад зориулагдсан гэж л бичиж чадна.

За, ирээдүйн эхлэл: Би серверт ирсэн үр дүнг (жишээ нь, командын гүйцэтгэлийн үр дүн) тусгахын тулд стандарт zabbix хэрэгслийг хэрхэн ашиглахаа хараахан олж чадаагүй байна.

Бүх эх сурвалжийг Git репозитороос дараах хаягаар авч болно гэдгийг би танд сануулж байна. github.com/BazDen/iotnet.online.git

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх