La socodka fog iyo xakamaynta aaladaha ku salaysan Lunix/OpenWrt/Lede iyada oo loo sii marayo dekedda 80…

Salaan dhammaantiin, tani waa waayo-aragnimadayda ugu horreysay ee Habré. Waxaan rabaa inaan wax ka qoro sida loo maareeyo qalabka shabakada ee shabakada dibadda si aan caadi ahayn. Waa maxay macnaha aan caadiga ahayn: inta badan, si aad u maamusho qalabka shabakada dibadda waxaad u baahan tahay:

  • Cinwaanka IP-ga ee dadweynaha Waa hagaag, ama haddii qalabku uu ka danbeeyo qof NAT ah, ka dibna IP-ga dadweynaha iyo deked "la sii gudbiyay".
  • Tunnel (PPTP/OpenVPN/L2TP+IPSec, iwm.) ilaa marinka dhexe kaas oo laga heli karo.

Sidaa darteed, waxaad u baahan doontaa "baaskiilkayga" marka hababka caadiga ahi aanay kugu habboonayn, tusaale ahaan:

  1. Qalabku wuxuu ku yaalaa gadaashiisa NAT, marka laga reebo http caadiga ah (dekedda 80), wax walba waa xiran yihiin. Tani waa xaalad gabi ahaanba caadi u ah shabakadaha shirkadaha waaweyn ee federaalka. Waxay diiwaan gelin karaan dekedaha, laakiin isla markaaba maaha, degdeg maaha, adigana maaha.
  2. Kanaalka wada xidhiidhka aan degganayn iyo/ama “cidhiidhi ah”. Xawaaraha hooseeya, khasaare joogto ah. Xanuun iyo niyad jab marka la isku dayayo in la abaabulo tunnel.
  3. Kanaal isgaarsiineed oo qaali ah, halkaas oo macno ahaan megabyte kasta lagu tiriyo. Tusaale ahaan, isgaarsiinta satellite-ka. Waxaa dheer dib u dhacyo dheer iyo koox "cidhiidhi ah".
  4. Xaalad marka aad u baahan tahay inaad "juggle" tiro badan oo router yaryar ah, taas oo, dhinaca kale, OpenWrt / Lede ayaa lagu rakibay si loo ballaariyo awoodda, iyo dhinaca kale, khayraadka (xusuusta) ee router kuma filna. wax walba.

Xusuusin lambarrada waqtiyada Maxaa kuu diidaya inaad ku rakibto flash drive galka USB-ga ee router-ka oo aad balaadhiso xusuusta router-ka?

Inta badan, shuruudaha ayaa ah kharashka xalka guud ahaan, laakiin mararka qaarkood qaabka qaabka ayaa sidoo kale door muhiim ah ka ciyaara. Tusaale ahaan, waxaa jira TP-Link ML3020 goobta, dekeddeeda kaliya ee USB waxaa loo isticmaalaa modem 2G/3G ah, waxaas oo dhan waxaa lagu duuduubay nooc ka mid ah kiis caag ah oo yar waxaana la dhigayaa meel sare, sare (mast), fog, fog (gudaha, 30 km u jira saldhiga hawlwadeenka guurguura ee kuugu dhow). Haa, waxaad ku xidhi kartaa xudunta USB oo aad balaadhi kartaa tirada dekedaha, laakiin khibraddu waxay muujinaysaa in tani ay tahay mid dhib badan oo aan la isku halayn karin.

Marka, waxaan isku dayay inaan kuu qeexo xaaladayda caadiga ah: “meel fog, fog, waxaa jira router aad u muhiim ah, cidlo ah oo yar oo ku shaqeeya Linux. Waxaa muhiim ah in la ogaado ugu yaraan hal mar maalintii in uu "nool yahay" iyo, haddii loo baahdo, amarrada loo soo diro isaga, tusaale ahaan, "malab, reboot!"

Aan u gudubno hirgelinta:

1) Dhinaca router-ka, iyada oo loo marayo cron, daqiiqad kasta 5/10/1440, ama mar kasta oo aad rabto, waxaad u baahan tahay inaad u dirto codsi http server adoo isticmaalaya wget, ku badbaadi natiijada codsiga fayl, samee faylka la fulin karo , oo fuliya.

Khadkaygu wuxuu u eg yahay sidan:

Faylka /etc/crontabs/root:

  */5 * * * * wget "http://xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php?u=user&p=password" -O /tmp/wa.sh && chmod 777 /tmp/wa.sh && /tmp/wa.sh

, meesha:
xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai waa barta server-kayga. Aan isla markiiba xusuusto: haa, waxaad cayimi kartaa ciwaanka IP-ga gaarka ah ee server-ka, waxaan sameyn jirnay tan ilaa gobolkeena, si xaq ah oo halganka, waxaan dhihi doonaa, ma aqaano, xannibay gelitaanka libaaxa saamiga DigitalOcean iyo Amazon "daruuraha". Haddii aad isticmaasho domain calaamad ah, haddii dhacdadan oo kale ay dhacdo, waxaad si fudud u kicin kartaa daruur kayd ah, u wareejin kartaa domainka oo aad soo celin kartaa la socodka qalabka.

a.php waa magaca qoraalka dhinaca server-ka. Haa, waan ogahay inay khalad tahay in la magacaabo doorsoomayaasha oo lagu fayl gareeyo magacyo isku xaraf ah... Waxaan soo jeedinayaa in sidan aan u badbaadino dhowr bytes marka codsi dirayno :)
u - username, hardware login
p - erayga sirta ah
"-O /tmp/wa.sh" waa fayl ku jira router fog halkaas oo jawaabta server-ka, tusaale ahaan amarka dib u soo kabashada, lagu keydin doono.

Xusuusin nambarka labaad: Ahhh, waa maxay sababta aan u isticmaalno wget oo aan u leexin, sababtoo ah curlka waxaad ku soo diri kartaa codsiyada https ma aha GET, laakiin POST? Ahhh sababtoo ah, sida kaftankii hore "NE wuxuu fuulaa weelka!" curl waxa ku jira maktabado sir ah oo cabbirkoodu dhan yahay 2MB, sababtaas awgeed uma badna inaad awooddo inaad sawir ku ururiso TP-LINK ML3020 yar, tusaale ahaan. Iyo wget - fadlan.

2) Dhinaca server-ka (waxaan haystaa Ubuntu) waxaan isticmaali doonaa Zabbix. Sababta: Waxaan rabaa inay noqoto mid qurux badan (oo leh garaafyo) oo ku habboon (ku soo dir amarrada liiska macnaha guud). Zabbix waxay leedahay shay cajiib ah sida wakiilka zabbix. Iyadoo loo marayo wakiilka, waxaan wici doonaa qoraalka PHP ee server-ka, kaas oo soo celin doona macluumaadka ku saabsan in routerkeena uu diiwaangashan yahay muddada loo baahan yahay. Si loo kaydiyo macluumaadka ku saabsan wakhtiga diiwaangelinta, amarrada aaladaha, waxaan isticmaalaa MySQL, isticmaalayaasha miiska gaarka ah oo leh ku dhawaad ​​meelahan soo socda:

		CREATE TABLE `users` (
		  `id` varchar(25) NOT NULL,
		  `passwd` varchar(25) NOT NULL,
		  `description` varchar(150) NOT NULL,
		  `category` varchar(30) NOT NULL,
		  `status` varchar(10) NOT NULL,
		  `last_time` varchar(20) NOT NULL, // время последнего соединения
		  `last_ip` varchar(20) NOT NULL, // IP последнего соединения 
		  `last_port` int(11) NOT NULL, // порт последнего соединения
		  `task` text NOT NULL, // задача которую получает роутер
		  `reg_task` varchar(150) NOT NULL, // "регулярная" задача, если мы захотим чтобы задача выполнялась всегда при регистрации
		  `last_task` text NOT NULL, // лог задач
		  `response` text NOT NULL, // сюда пишется ответ устройства
		  `seq` int(11) NOT NULL
		) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Dhammaan ilaha waxaa laga soo dejisan karaa kaydka Git ee: https://github.com/BazDen/iotnet.online.git
Hadda qoraallada PHP ayaa lagu dhejiyay dhinaca server-ka (si ku habboon, waxaa lagu dhejin karaa / usr / share / zabbix / folder):

a.php faylka:

<?php
// Получаем входные параметры: имя пользователя, пароль и сообщение от удаленного роутера
// Зачем нужен message ? Это способ ответа роутера, например если вы захотите посмотреть содержимое файла роутера
	$user=$_REQUEST['u'];
	$password=$_REQUEST['p'];
	$message=$_REQUEST['m'];
	
	// Подключаемся к нашей базе данных (MySQL)
	$conn=new mysqli("localhost","db_login","db_password","DB_name");
	if (mysqli_connect_errno()) {
		exit();
	}
	$conn->set_charset("utf8");
	// здесь ищем наш роутер в таблице базы данных
	$sql_users=$conn->prepare("SELECT task, reg_task, response, last_time FROM users WHERE id=? AND passwd=? AND status='active';");
	$sql_users->bind_param('ss', $user, $password);
	$sql_users->bind_result($task, $reg_task, $response, $last_time);
	$sql_users->execute();
	$sql_users->store_result();
	if (($sql_users->num_rows)==1){
		$sql_users->fetch();
		// здесь мы роутеру отправляем его задачи
		echo $task;
		echo "n";
		echo $reg_task;
		// вот здесь мы пишем время ответа и сам ответ роутера
		$response_history="[".date("Y-m-d H:i")."] ".$message;
		// задачу отправили, теперь надо ее удалить,а после удаления отметить в логах, что такая-то задача выполнена
		$last_ip=$_SERVER["REMOTE_ADDR"];
		$last_port=$_SERVER["REMOTE_PORT"];
		$ts_last_conn_time=$last_time;
		$sql_users=$conn->prepare("UPDATE users SET task='', seq=1 WHERE (id=?);");
		$sql_users->bind_param('s', $user);
		$sql_users->execute();
		if (strlen($message)>1){
			$sql_users=$conn->prepare("UPDATE users SET response=?, seq=1 WHERE (id=?);");
			$sql_users->bind_param('ss', $response_history, $user);
			$sql_users->execute();
		}
		// теперь надо сохранить время регистрации пользователя, его айпи и сообщение от него. Пока только сообщение
		$ts_now=time();
		$sql_users=$conn->prepare("UPDATE users SET last_time=?, last_ip=?, last_port=? WHERE (id=?);");
		$sql_users->bind_param('ssss', $ts_now, $last_ip, $last_port, $user);
		$sql_users->execute();
	}
	// если мы не нашли роутер в нашей базе данных, или его статус "неактивный", то ему ... будет отправлена команда reboot....
	// Почему так жестоко ? Потому что роутеры иногда пропадают, а это маленький способ проучить "новых владельцев". 
	else
	{
	echo "reboot";
	}
	$sql_users->close();
	?>

Faylka Agent.php (kani waa qoraalka wakiilka zabbix ee la yiraahdo):

<?php
	// файл агента Zabbix. Данный скрипт обращается к таблице users и получает "1" если устройство регистрировалось с момента последнего обращения
	// user и password - учетные данные оборудования
	$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");
	$sql_users=$conn->prepare("SELECT seq FROM users WHERE id=? AND passwd=? AND status='active';");
	$sql_users->bind_param('ss', $user, $password);
	$sql_users->bind_result($seq);
	$sql_users->execute();
	$sql_users->store_result();
	// обмен данными происходит через поле seq. При регистрации железка ставит данное поле в "1"
	if (($sql_users->num_rows)==1){
		$sql_users->fetch();
		echo $seq;
	}
		
	// обнуляем $seq. 
	$sql_users=$conn->prepare("UPDATE users SET seq=0 WHERE id=? AND passwd=? AND status='active';");
	$sql_users->bind_param('ss', $user, $password);
	$sql_users->execute();
	$sql_users->close();
?>		

Hagaag, marxaladda ugu dambeysa: diiwaangelinta wakiilka iyo ku darista jadwallada.

Haddii aadan weli rakibin wakiilka zabbix, markaa:

apt-get install zabbix-agent

Tafatir faylka /etc/zabbix/zabbix_agentd.conf.

Ku dar xariiqda:

UserParameter=test,php /usr/share/zabbix/agent.php user password

, meesha:
imtixaanku waa magaca wakiilkayaga
"php /usr/share/zabbix/agent.php erayga sirta ah" - qoraal la yiraahdo oo tilmaamaya xogta diiwaangelinta qalabka.

Ku darista jaantusyada: fur interface web zabbix, ka dooro liiska:
Dejinta -> qanjidhada shabakada -> Samee noodhka shabakad. Halkan waxaa ku filan in lagu qeexo magaca martigeliyaha shabakada, kooxdeeda, iyo wakiilka wakiilka caadiga ah:

La socodka fog iyo xakamaynta aaladaha ku salaysan Lunix/OpenWrt/Lede iyada oo loo sii marayo dekedda 80…

Hadda waxaan u baahanahay inaan ku darno qayb xog ah oo loogu talagalay noodhka shabakadan. Fiiro gaar ah u yeelo laba qaybood: "furaha" - tani waa sida saxda ah ee aan ku qornay faylka /etc/zabbix/zabbix_agentd.conf (kiiskeena waa imtixaan), iyo "cusbooneysiin dhexda" - Waxaan u dhigay 5 daqiiqo. , sababtoo ah iyo qalabka ayaa sidoo kale ka diiwaan gashan server ka hal mar shantii daqiiqo.

La socodka fog iyo xakamaynta aaladaha ku salaysan Lunix/OpenWrt/Lede iyada oo loo sii marayo dekedda 80…

Hagaag, aan ku darno garaaf. Waxaan ku talinayaa in aan u doorto "Buux" qaabka wax u dhigista.

La socodka fog iyo xakamaynta aaladaha ku salaysan Lunix/OpenWrt/Lede iyada oo loo sii marayo dekedda 80…

Wax soo saarku waa wax aad u laconic, tusaale ahaan sidan oo kale:

La socodka fog iyo xakamaynta aaladaha ku salaysan Lunix/OpenWrt/Lede iyada oo loo sii marayo dekedda 80…

Su'aasha macquulka ah: "Miyay u qalantay?", Waxaan ka jawaabi doonaa: si fiican, dabcan, arag "sababaha abuurista baaskiilka" bilawga maqaalka.

Haddii waayo-aragnimadayda garaafka ugu horreysa ay kiciso xiisaha akhristayaasha, ka dibna maqaallada soo socda waxaan rabaa inaan sharaxo sida loo diro amarrada qalabka fog. Waxaan sidoo kale ku guuleysanay inaan hirgelino dhammaan nidaamka qalabka ku saleysan RouterOS (Mikrotik).

Source: www.habr.com

Add a comment