போர்ட் 80 வழியாக Linux/OpenWrt/Lede சார்ந்த சாதனங்களின் தொலை கண்காணிப்பு மற்றும் மேலாண்மை, தொடர்ந்தது

இது கட்டுரையின் இறுதிப் பகுதி, இதோ ஆரம்பம் habr.com/en/post/445568
கடைசியாக நான் சாதன கண்காணிப்பை எவ்வாறு செயல்படுத்தினேன் என்பதைப் பற்றி எழுதினேன், இப்போது நாங்கள் மேலாண்மை பற்றி பேசுவோம். வாடிக்கையாளரின் தரப்பில் "தொழில்நுட்ப வல்லுநர்களுடன்" கலந்துரையாடும்போது, ​​இதுபோன்ற சிறிய சாதனங்களின் திறன்கள் (குறைந்த நினைவக வளங்கள் மற்றும் செயல்திறன் கொண்டவை) பற்றிய வரையறுக்கப்பட்ட உணர்வை நான் அடிக்கடி எதிர்கொள்கிறேன், "நமக்கு மிகவும் தேவையானது மறுதொடக்கத்தை அனுப்ப வேண்டும், மேலும் ஏதாவது ஒன்றை அனுப்ப வேண்டும்." தீவிர நாங்கள் ஒரு குழுவை அனுப்புவோம்” .
ஆனால் இது முற்றிலும் உண்மை இல்லை என்பதை நடைமுறை காட்டுகிறது. பொதுவான பொதுவான பணிகளின் சிறிய பட்டியல் இங்கே:

  1. நெட்வொர்க் கண்டறிதல் மற்றும் சரிசெய்தல். உங்கள் ரூட்டரின் ஈத்தர்நெட் போர்ட்டின் பின்னால் பொதுவாக அதன் சொந்த உள் ஐபி முகவரியைக் கொண்ட மற்றொரு வன்பொருள் உள்ளது. சில நேரங்களில், நீங்கள் அதை "பிங்" செய்யலாம். அல்லது சுரங்கப்பாதை மேலாண்மை - 3ஜி மோடம் வழியாக இயங்கும் ரூட்டரில் திடீரென சுரங்கப்பாதை உயரவில்லை என்றால், ரூட்டரையே நாம் பார்க்கலாம்.
  2. கணினி பராமரிப்பு. நிலைபொருள் மேம்படுத்தல், சேவை ஸ்கிரிப்ட் மேம்படுத்தல்.
  3. சமநிலைப்படுத்தும் செயல். இதை "வக்கிரம்" என்று அழைக்கலாம், ஆனால் "சமநிலை" என்ற கருத்து, நான் மேற்கோள் காட்டுகிறேன், "நிலையற்ற உடல் நிலையில் சமநிலையை பராமரிக்க ஒரு சர்க்கஸ் கலைஞரின் திறன்" - சிறப்பாக பொருந்துகிறது. வாடிக்கையாளரின் வரையறுக்கப்பட்ட பட்ஜெட் காரணமாக இத்தகைய சூழ்நிலைகள் எழுகின்றன. கீழே நான் இரண்டு எடுத்துக்காட்டுகளைக் கொடுத்தேன், ஆனால் ... அவை கதையின் கருப்பொருளுடன் நேரடியாக தொடர்புடையவை அல்ல, அவற்றை நான் குறிப்புகளில் வைத்தேன்

வைஃபை கண்காணிப்புகடந்த ஐந்து ஆண்டுகளாக ஒரு நாகரீகமான தலைப்பு, முக்கியமாக ஃபெடரல் சில்லறை சங்கிலிகள் மத்தியில். நீங்கள் வர்த்தக தளங்களில் நிதானமாக உலா வருகிறீர்கள், Wi-Fi ஆன் செய்யப்பட்ட உங்கள் மொபைல் ஃபோன், நெட்வொர்க்கின் சில தொடரிழையில் "ஒட்டிக்கொள்ளும்" முயற்சியில், ப்ரோப் ரிக்வெஸ்ட் பாக்கெட்டுகளை தொடர்ந்து அனுப்புகிறது, அதைக் கணக்கிடுவதற்காக பகுப்பாய்வு செய்யலாம் நீங்கள்: நீங்கள் இந்த கடைக்கு எவ்வளவு அடிக்கடி வருகிறீர்கள், என்ன காரணங்களுக்காக? நீங்கள் பாதைகளில் நடக்கிறீர்கள் மற்றும் பல. பின்னர் தரவு சேகரிக்கப்பட்டு, பகுப்பாய்வு செய்யப்பட்டு, வெப்ப வரைபடங்கள் வரையப்படுகின்றன, மேலும் மேலாளர்கள் அத்தகைய படங்களுக்கு மேலாண்மை அல்லது முதலீட்டாளர்களிடமிருந்து பணத்தை "பறிப்பறி" செய்கின்றனர். சரி, இப்போதைக்கு.... "பணம் இல்லை, ஆனால் நீங்கள் பிடித்துக் கொள்ளுங்கள்...", மற்றும் முடிவு (உண்மையானது) ஏற்கனவே காட்டப்பட வேண்டும், நல்ல பழைய பாடல் தொடங்குகிறது: "ஆம், ஆம், நிச்சயமாக நாங்கள் cis மற்றும் நீங்கள் விரும்பும் அனைத்தையும் நிறுவும், ஆனால் இப்போது நாம் வாடிக்கையாளருக்கு முடிவைக் காட்ட வேண்டும்! வைஃபை வழியாக எங்களின் உபகரணங்களை தனது ஹாட்ஸ்பாட்டுடன் இணைக்க வாடிக்கையாளர் அனுமதித்துள்ளார் என்பதைச் சொல்ல மறந்துவிட்டோம், ஆனால் பொதுவான அடிப்படையில், நாங்கள் விருந்தினர் வாடிக்கையாளர்களைப் போலவே.” எனவே நாம் பேலன்சிங் ரவுட்டர்களை உருவாக்க வேண்டும் - பல வைஃபை துணை இடைமுகங்கள் எழுப்பப்படுகின்றன, அவற்றில் ஒன்று ஹாட்ஸ்பாட்டுடன் ஒட்டிக்கொண்டிருக்கும், இரண்டாவது சுற்றுச்சூழலைக் கண்காணித்து, tcpdump முடிவை தனக்குத்தானே பதிவேற்றுகிறது, பின்னர் கோப்பின் உள்ளடக்கங்களை ஒரு காப்பகத்தில் அடைத்து ஆபத்துக்களை ஏற்படுத்துகிறது. "அதிகப்படியாக" இறப்பதால் FTP சர்வரில் உள்ள உள்ளடக்கங்களை உமிழ முயற்சிக்கிறது. சமநிலைப்படுத்தும் திசைவி அடிக்கடி "உடைந்துவிடும்" மற்றும் எப்படியாவது தொலைதூரத்தில் "புத்துயிர்" செய்யப்பட வேண்டும் என்பதில் ஆச்சரியமில்லை.

ஆரம்வாடிக்கையாளரிடமிருந்து இதுபோன்ற ஒரு அறிக்கையின் மூலம் இங்கே நிலைமையை விவரிப்பது எளிது: “முன்கூட்டியே தெரியாத, சேனல்கள் மூலம், ஆனால் இதுவரை எங்களுக்குத் தெரியாத சாதனங்களில் செயல்படும் ஹாட்ஸ்பாட்களின் பரவலாக்கப்பட்ட நெட்வொர்க்கை நாங்கள் விரும்புகிறோம். ஓ, நாங்கள் சொல்ல மறந்துவிட்டோம், நாங்கள் வாடிக்கையாளர்களுக்கு விளம்பரங்களைக் காட்ட விரும்புவது மட்டுமல்லாமல், ஹாட்ஸ்பாட் நிறுவப்பட்ட இடத்தைச் சுற்றியுள்ள அனைத்தையும் பகுப்பாய்வு செய்கிறோம். இல்லை, ஏன் என்று எங்களுக்கு இன்னும் தெரியவில்லை, ஆனால் நாங்கள் அதைக் கண்டுபிடிப்போம், சந்தேகிக்க வேண்டாம், இந்த யோசனையை எங்களால் கொண்டு வர முடிந்தது.

முன்னர் அறியப்படாத பல சூழ்நிலைகள் காரணமாக, ஐபி: போர்ட் வழியாக திசைவியுடன் நேரடியாக இணைக்க முடியாதபோது, ​​​​தரமற்ற நிலைமைகளில் கட்டுப்பாடு மேற்கொள்ளப்பட வேண்டும் என்பதை நாம் மறந்துவிடக் கூடாது, மேலும் அதிலிருந்து செயல்படுவதற்கு வெறுமனே காத்திருக்க வேண்டிய கட்டாயத்தில் உள்ளது. நாம் நம்மை சுருக்கிக் கொண்டால், சேவையகத்திற்கும் திசைவிக்கும் இடையிலான உரையாடலை இப்படிக் குறிப்பிடலாம்:

  • திசைவி: வணக்கம். நான் அப்படிப்பட்ட ஒரு திசைவி, எனக்கு ஏதேனும் பணிகள் உள்ளதா?
  • Сервер: திசைவி போன்ற மற்றும் போன்ற, நான் நீங்கள் உயிருடன் என்று, நீங்கள் பதிவு. இதோ சவால்: ifconfig கட்டளையின் முடிவை எனக்குக் காட்டவா?
  • திசைவி: வணக்கம். நான் அப்படிப்பட்ட ஒரு ரூட்டர், கடைசியாக நீங்கள் ifconfig இன் முடிவைக் காட்டச் சொன்னீர்கள், இதோ. எனக்கான பணிகள் ஏதேனும் உள்ளதா?
  • Сервер: திசைவி போன்ற மற்றும் போன்ற, நான் நீங்கள் உயிருடன் என்று, நீங்கள் பதிவு. உங்களுக்கான பணிகள் எதுவும் இல்லை.

மிகவும் சுவாரஸ்யமான கேள்வி: தொலை திசைவி ஒரு குறிப்பிட்ட அளவு தகவலை எவ்வாறு அனுப்ப முடியும்? கடந்த பகுதியில், வரையறுக்கப்பட்ட வளங்கள் காரணமாக, திசைவியில் "ஸ்ட்ரிப்ட்-டவுன்" wget மட்டுமே உள்ளது, இது GET வழியாக மட்டுமே இயங்குகிறது, வேறு எதுவும் இல்லை; FTP கிளையன்ட் அல்லது கர்ல் இல்லை. இன்னும் துல்லியமாக, பட சட்டசபையின் அம்சங்களைப் பொருட்படுத்தாமல், எங்களுக்கு ஒரு உலகளாவிய முறை தேவை. நான் wget ஐப் பயன்படுத்தத் தொடங்கினேன். இன்னும் துல்லியமாக, நான் எப்படி "நிறுத்தினேன்" - எனக்கு வேறு வழியில்லை :)

வெறும் மறுப்புஎனது நிர்வாக தீர்வு வேலை செய்கிறது, மிகவும் குறைவாக இல்லை, மேலும் இது எனது பெரும்பாலான வாடிக்கையாளர்களுக்கு ஏற்றதாக இருந்தாலும், அது வளைந்திருக்கும் என்று நான் உறுதியாக நம்புகிறேன். நீங்கள் அதை எவ்வாறு புத்திசாலித்தனமாக செய்ய முடியும் - போர்ட் 80 மூலம் POST பைனரி தரவை அனுப்பும் ஒரு சிறிய பயன்பாட்டை எழுதுங்கள். அதை (பயன்பாட்டை) ரூட்டர் ஃபார்ம்வேரில் சேர்த்து, பாஷைப் பயன்படுத்தி அணுகவும். ஆனால் உண்மை என்னவென்றால்: அ) நாம் விரைவாகச் செய்ய வேண்டும் ஆ) ஏற்கனவே இருக்கும் “ரூட்டர்களின் மிருகக்காட்சிசாலையில்” எல்லாவற்றையும் செய்ய வேண்டியிருக்கும் c) “எந்தத் தீங்கும் செய்யாதீர்கள்!” - திசைவி வேலை செய்து மற்ற பணிகளைச் செய்தால், ஏற்கனவே உள்ள செயல்பாட்டை பாதிக்காத மாற்றங்களைச் செய்ய முயற்சிக்கவும்.

செயல்படுத்துவதற்கு செல்லலாம். உங்கள் வாடிக்கையாளர் ஜாபிக்ஸிலிருந்து திசைவியை எளிதாகவும் இயல்பாகவும் "மவுஸ் கிளிக்" மூலம் மறுதொடக்கம் செய்ய விரும்புகிறார் என்று வைத்துக்கொள்வோம். இன்று நாம் 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

, எங்கே:
செய்தி=`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 வேலை செய்யாது.

இது ஏன் வேலை செய்யாது?ஏனெனில் இது ஒரு சாத்தியமான பாதுகாப்பு ஓட்டை. எடுத்துக்காட்டாக, உங்கள் கட்டளையின் வெளியீட்டில் ஒரு "&" எழுத்து இருந்தால் ஏற்படும் மிகவும் பாதிப்பில்லாத பிழை. எனவே, திசைவிகளிலிருந்து அனுப்பப்பட்ட அனைத்தையும் மற்றும் சேவையகத்திற்கு வரும் அனைத்தையும் வடிகட்ட வேண்டியது அவசியம். ஆமாம், நான் வெட்கப்படுகிறேன், உண்மையில். எனது பாதுகாப்பில், முழு கட்டுரையும் முன் வரையறுக்கப்பட்ட ஃபார்ம்வேர் மற்றும் முன்கூட்டியே வரையறுக்கப்படாத தகவல் தொடர்பு சேனல்கள் மூலம் திசைவிகளை எவ்வாறு நிர்வகிப்பது என்பதில் மட்டுமே நான் எழுத முடியும்.

சரி, எதிர்காலத்திற்கான தொடக்கம்: சேவையகத்திற்கு வரும் முடிவுகளை (உதாரணமாக, கட்டளையை இயக்குவதன் விளைவாக) பிரதிபலிக்கும் வகையில் நிலையான zabbix கருவிகளை எவ்வாறு பயன்படுத்துவது என்பதை நான் இன்னும் கண்டுபிடிக்கவில்லை.

அனைத்து ஆதாரங்களையும் Git களஞ்சியத்தில் இருந்து பெறலாம் என்பதை நினைவூட்டுகிறேன்: github.com/BazDen/iotnet.online.git

ஆதாரம்: www.habr.com

கருத்தைச் சேர்