پورٹ 80 کے ذریعے لینکس/OpenWrt/Lede پر مبنی آلات کی ریموٹ نگرانی اور انتظام جاری

یہ مضمون کا آخری حصہ ہے، یہاں آغاز ہے۔ habr.com/en/post/445568
پچھلی بار میں نے اس بارے میں لکھا تھا کہ میں نے ڈیوائس مانیٹرنگ کو کیسے نافذ کیا، اب ہم انتظام کے بارے میں بات کریں گے۔ گاہک کی طرف سے "ٹیکنیشینز" کے ساتھ بات چیت میں، مجھے اکثر ایسے چھوٹے آلات (کم میموری کے وسائل اور کارکردگی کے ساتھ) کی صلاحیتوں کے بارے میں ایک محدود خیال کا سامنا کرنا پڑتا ہے، بہت سے لوگوں کا خیال ہے کہ "ہمیں سب سے زیادہ ضرورت ایک ریبوٹ بھیجنے کی ہے، مزید کچھ کے لیے۔ سنجیدہ ہے ہم ایک ٹیم بھیجیں گے۔
لیکن مشق سے پتہ چلتا ہے کہ یہ مکمل طور پر درست نہیں ہے۔ یہاں عام عام کاموں کی ایک چھوٹی سی فہرست ہے:

  1. نیٹ ورک کی تشخیص اور خرابیوں کا سراغ لگانا۔ آپ کے روٹر کے ایتھرنیٹ پورٹ کے پیچھے عام طور پر ہارڈ ویئر کا ایک اور ٹکڑا ہوتا ہے جس کا اپنا اندرونی IP پتہ ہوتا ہے۔ کبھی کبھی، آپ اسے (پنگ) کر سکتے ہیں۔ یا سرنگ کا انتظام - اگر 3G موڈیم کے ذریعے چلنے والے روٹر پر سرنگ اچانک نہیں اٹھتی ہے، لیکن ہم خود روٹر کو دیکھ سکتے ہیں۔
  2. نظام کی بحالی. فرم ویئر اپ ڈیٹ، سروس اسکرپٹ اپ گریڈ۔
  3. توازن ایکٹ۔ اس کو "تبدیلی" کہا جا سکتا ہے، لیکن "متوازن" کا تصور جیسا کہ میں نقل کرتا ہوں، "ایک غیر مستحکم جسمانی پوزیشن میں توازن برقرار رکھنے کے لئے سرکس کے اداکار کی صلاحیت" - بہتر فٹ بیٹھتا ہے۔ ایسے حالات گاہک کے محدود بجٹ کی وجہ سے پیدا ہوتے ہیں۔ ذیل میں میں نے چند مثالیں دی ہیں، لیکن... ان کا کہانی کے تھیم سے براہ راست تعلق نہیں ہے، میں نے انہیں نوٹس میں ڈال دیا ہے۔

وائی ​​فائی کی نگرانیپچھلے پانچ سالوں کا ایک فیشن ایبل موضوع، خاص طور پر وفاقی ریٹیل چینز کے درمیان۔ آپ آرام سے تجارتی منزلوں پر چہل قدمی کر رہے ہیں، اور آپ کا موبائل فون جس میں Wi-Fi آن ہے، نیٹ ورک کے کچھ دھاگوں سے "چپکنے" کی کوشش میں، باقاعدگی سے تحقیقات کی درخواست کے پیکٹ بھیجتا ہے جن کا تجزیہ کیا جا سکتا ہے تاکہ آپ کا حساب لگایا جا سکے۔ : آپ اس سٹور پر کتنی بار آتے ہیں، کن وجوہات کی بناء پر آپ چلتے پھرتے ہیں وغیرہ وغیرہ۔ پھر ڈیٹا اکٹھا کیا جاتا ہے، تجزیہ کیا جاتا ہے، گرمی کے نقشے بنائے جاتے ہیں، اور مینیجر ایسی تصویروں کے لیے انتظامیہ یا سرمایہ کاروں سے پیسے "بھتہ" لیتے ہیں۔ ٹھیک ہے، ابھی کے لیے.... "پیسہ نہیں ہے، لیکن تم پکڑو..."، اور (حقیقی) نتیجہ پہلے ہی دکھانا ہوگا، اچھا پرانا گانا شروع ہوتا ہے: "ہاں، ہاں، پھر یقیناً ہم cis اور ہر وہ چیز جو آپ چاہتے ہیں انسٹال کرے گا، لیکن اب ہمیں کسٹمر کو نتیجہ دکھانے کی ضرورت ہے! ویسے، ہم یہ کہنا بھول گئے کہ گاہک نے ہمیں اپنے آلات کو Wi-Fi کے ذریعے اپنے ہاٹ اسپاٹ سے جوڑنے کی اجازت دی ہے، لیکن عام طور پر، بالکل ایسے ہی جیسے ہم مہمان کلائنٹ ہوں۔" اور اس لیے ہمیں بیلنسنگ راؤٹرز بنانے ہوں گے - کئی وائی فائی سب انٹرفیسز اٹھائے گئے ہیں، جن میں سے ایک ہاٹ اسپاٹ سے چمٹا ہوا ہے، اور دوسرا ماحول کی نگرانی کرتا ہے، tcpdump کے نتیجے کو بے دلی سے اپنے اوپر اپ لوڈ کرتا ہے، پھر فائل کے مواد کو آرکائیو میں پیک کرتا ہے اور خطرات لاحق ہوتے ہیں۔ "زیادہ کھانے" سے مرنا FTP سرور پر موجود مواد کو تھوکنے کی کوشش کرتا ہے۔ یہ حیرت کی بات نہیں ہے کہ بیلنسنگ راؤٹر اکثر "ٹوٹ جاتا ہے" اور کسی نہ کسی طرح دور سے "دوبارہ زندہ" ہونا پڑتا ہے۔

رداسگاہک کے اس بیان کے ساتھ یہاں صورتحال کو بیان کرنا آسان ہے: "ہم ہاٹ سپاٹ کا ایک وکندریقرت نیٹ ورک چاہتے ہیں جو ایسے آلات پر کام کرے جس کا ماڈل چینلز کے ذریعے پہلے سے معلوم نہ ہو، لیکن جن کے بارے میں ہم ابھی تک نہیں جانتے ہیں۔ اوہ، ہم یہ کہنا بھول گئے، ہم نہ صرف کلائنٹس کو اشتہارات دکھانا چاہتے ہیں، بلکہ اس جگہ کے ارد گرد ہر چیز کا تجزیہ بھی کرنا چاہتے ہیں جہاں ہاٹ اسپاٹ نصب ہے۔ نہیں، ہم ابھی تک نہیں جانتے کہ کیوں، لیکن ہم اس کا پتہ لگائیں گے، اس میں شک نہ کریں، ہم اس خیال کے ساتھ آنے کے قابل تھے۔

اور ہمیں یہ نہیں بھولنا چاہیے کہ بہت سے پہلے نامعلوم حالات کی وجہ سے، کنٹرول کو غیر معیاری حالات میں انجام دیا جانا چاہیے، جب ہم IP: پورٹ کے ذریعے روٹر سے براہ راست رابطہ نہیں کر سکتے اور اس سے سرگرمی کا انتظار کرنے پر مجبور ہوتے ہیں۔ اگر ہم خود کو خلاصہ کرتے ہیں، تو سرور اور روٹر کے درمیان مکالمے کو اس طرح پیش کیا جا سکتا ہے:

  • راؤٹر: ہیلو. میں فلاں فلاں راؤٹر ہوں، کیا میرے لیے کوئی کام ہیں؟
  • سرور: راؤٹر فلاں اور فلاں، میں نے آپ کو رجسٹر کیا، کہ آپ زندہ ہیں۔ یہاں چیلنج ہے: مجھے ifconfig کمانڈ کا نتیجہ دکھائیں؟
  • راؤٹر: ہیلو. میں فلاں فلاں راؤٹر ہوں، پچھلی بار آپ نے ifconfig کا نتیجہ دکھانے کو کہا تھا، وہ یہ ہے۔ کیا میرے لیے کوئی کام ہیں؟
  • سرور: راؤٹر فلاں اور فلاں، میں نے آپ کو رجسٹر کیا، کہ آپ زندہ ہیں۔ آپ کے لیے کوئی کام نہیں ہیں۔

سب سے دلچسپ سوال: ریموٹ راؤٹر ایک خاص مقدار میں معلومات کیسے بھیج سکتا ہے؟ آخری حصے میں، میں نے بیان کیا کہ محدود وسائل کی وجہ سے، روٹر کے پاس صرف ایک "سٹرپڈ ڈاؤن" ویجیٹ ہے، جو صرف GET کے ذریعے کام کرتا ہے اور کچھ نہیں؛ کوئی FTP کلائنٹ یا curl نہیں ہے۔ مزید واضح طور پر، ہمیں ایک عالمگیر طریقہ کی ضرورت ہے، قطع نظر تصویر اسمبلی کی خصوصیات کے۔ میں نے wget استعمال کرنے کا فیصلہ کیا۔ مزید واضح طور پر، میں نے کیسے "رکایا" - میرے پاس کوئی چارہ نہیں تھا :)

صرف ایک دستبرداریمیرا انتظامی حل کام کر رہا ہے، بہت محدود نہیں، اور مجھے یقین ہے کہ یہ ٹیڑھا ہے، چاہے یہ میرے زیادہ تر صارفین کے لیے موزوں ہو۔ آپ اسے دانشمندی سے کیسے کر سکتے ہیں - ایک چھوٹی افادیت لکھیں جو پورٹ 80 کے ذریعے POST بائنری ڈیٹا بھیجتی ہے۔ راؤٹر فرم ویئر میں اسے (افادیت) شامل کریں اور باش کا استعمال کرتے ہوئے اس تک رسائی حاصل کریں۔ لیکن حقیقت یہ ہے کہ: a) ہمیں جلدی کرنے کی ضرورت ہے b) ہمیں شاید موجودہ "روٹرز کے چڑیا گھر" پر سب کچھ کرنے کی ضرورت ہے c) "کوئی نقصان نہیں!" — اگر راؤٹر کام کر رہا ہے اور دوسرے کام کر رہا ہے، تو ایسی تبدیلیاں کرنے کی کوشش کریں جو موجودہ فعالیت کو متاثر نہ کرے۔

آئیے عملدرآمد کی طرف بڑھتے ہیں۔ فرض کریں کہ آپ کا گاہک "ماؤس کے کلک" کے ساتھ آسانی سے اور قدرتی طور پر زبکس سے راؤٹر کو دوبارہ شروع کرنا چاہتا ہے۔ آج ہم Zabbix کے ساتھ نفاذ کو بیان کرنا شروع کریں گے۔
"ایڈمنسٹریشن" -> "اسکرپٹس" مینو میں، ایک نیا اسکرپٹ شامل کریں۔ ہم اسے "ریبوٹ" کہتے ہیں، "php /usr/share/zabbix/reboot.php {HOST.HOST}" بطور کمانڈ درج کریں۔

پورٹ 80 کے ذریعے لینکس/OpenWrt/Lede پر مبنی آلات کی ریموٹ نگرانی اور انتظام جاری

اگلا: مینو "مانیٹرنگ" -> "تازہ ترین ڈیٹا" -> "مطلوبہ نیٹ ورک نوڈ پر دائیں کلک کریں۔" اسکرپٹ کو شامل کرنے کے بعد مینو کیسا نظر آئے گا۔

پورٹ 80 کے ذریعے لینکس/OpenWrt/Lede پر مبنی آلات کی ریموٹ نگرانی اور انتظام جاری
اس کے مطابق، ہم نے /usr/share/zabbix ڈائرکٹری میں reboot.php اسکرپٹ ڈال دیا (آپ کی مختلف ہوسکتی ہے، میں 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

، جہاں:
پیغام = `ifconfig` - ہم ifconfig کمانڈ آؤٹ پٹ کا نتیجہ $message متغیر کو تفویض کرتے ہیں۔
wget"xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — ہماری a.php اسکرپٹ جو راؤٹرز کو رجسٹر کرتی ہے اور ان سے پیغامات وصول کرتی ہے۔
u=user&p=password!&m=$message — اسناد اور درخواست کے متغیر کی قدر m — $message متغیر کے مواد کو تفویض کرتا ہے
-O /tmp/out.txt - ہمیں اس معاملے میں فائل /tmp/out.txt میں آؤٹ پٹ کی ضرورت نہیں ہے، لیکن اگر یہ پیرامیٹر متعین نہیں ہے، تو wget کام نہیں کرتا ہے۔

یہ کام کیوں نہیں کرتا؟کیونکہ یہ ایک ممکنہ حفاظتی سوراخ ہے۔ سب سے بے ضرر غلطی جو ہو سکتی ہے وہ ہے اگر، مثال کے طور پر، آپ کے کمانڈ کے آؤٹ پٹ میں ایک "&" کردار ہو۔ اس لیے راؤٹرز سے بھیجی جانے والی ہر چیز اور سرور پر آنے والی ہر چیز کو فلٹر کرنا ضروری ہے۔ ہاں، میں واقعی شرمندہ ہوں۔ اپنے دفاع میں، میں صرف اتنا لکھ سکتا ہوں کہ پورا مضمون پہلے سے طے شدہ فرم ویئر اور کمیونیکیشن چینلز کے ساتھ راؤٹرز کو کیسے منظم کیا جائے جس کی پہلے سے وضاحت نہیں کی گئی ہے۔

ٹھیک ہے، مستقبل کے لیے ایک آغاز: میں نے ابھی تک یہ نہیں سوچا ہے کہ سرور پر آنے والے نتائج (مثال کے طور پر کمانڈ پر عمل کرنے کا نتیجہ) کی عکاسی کرنے کے لیے معیاری زبکس ٹولز کا استعمال کیسے کیا جائے۔

میں آپ کو یاد دلاتا ہوں کہ تمام ذرائع گٹ ریپوزٹری سے یہاں پر حاصل کیے جا سکتے ہیں: github.com/BazDen/iotnet.online.git

ماخذ: www.habr.com

نیا تبصرہ شامل کریں