Sgrùdadh is smachd air astar air innealan stèidhichte air Lunix/OpenWrt/Lede tro phort 80…

Halo a h-uile duine, is e seo a’ chiad eòlas agam air Habré. Tha mi airson sgrìobhadh mu mar a stiùireas tu uidheamachd lìonraidh air lìonra a-muigh ann an dòigh neo-àbhaisteach. Dè tha neo-àbhaisteach a’ ciallachadh: sa mhòr-chuid de chùisean, airson uidheamachd a riaghladh air lìonra a-muigh feumaidh tu:

  • Seòladh IP poblach. Uill, no ma tha an uidheamachd air cùl NAT cuideigin, an uairsin IP poblach agus port “air adhart”.
  • Tunail (PPTP / OpenVPN / L2TP + IPSec, msaa) chun nód sa mheadhan tro am biodh e ruigsinneach.

Mar sin, bidh feum agad air “mo bhaidhc” nuair nach eil modhan àbhaisteach a ’freagairt ort, mar eisimpleir:

  1. Tha an uidheamachd suidhichte air cùl NAT agus, ach a-mhàin an http àbhaisteach (port 80), tha a h-uile dad dùinte. Is e suidheachadh gu tur àbhaisteach a tha seo airson lìonraidhean corporra feadarail mòra. Faodaidh iad puirt a chlàradh, ach chan ann sa bhad, chan ann gu sgiobalta, agus chan ann dhutsa.
  2. Sianal conaltraidh neo-sheasmhach agus/no “caol”. Astar ìosal, call cunbhalach. Pian agus sàrachadh nuair a thathar a’ feuchainn ri tunail a chuir air dòigh.
  3. Sianal conaltraidh daor, far a bheil gu litireil a h-uile megabyte a’ cunntadh. Mar eisimpleir, saideal conaltraidh. A bharrachd air dàil fhada agus còmhlan “caol”.
  4. Suidheachadh nuair a dh’ fheumas tu àireamh mhòr de routers beaga a “juggle”, air a bheil, air an aon làimh, OpenWrt / Lede air a chuir a-steach gus comasan a leudachadh, agus air an làimh eile, chan eil goireasan (cuimhne) an router gu leòr airson a h-uile rud.

Beachdaich air amannan àireamh Dè a chuireas casg ort bho bhith a’ stàladh draibhear flash a-steach do phort USB an router agus a’ leudachadh cuimhne an router?

Mar as trice, tha na riatanasan airson cosgais an fhuasglaidh gu h-iomlan, ach uaireannan tha prìomh àite aig a’ bhàillidh cruth cuideachd. Mar eisimpleir, tha TP-Link ML3020 aig an làrach, tha an aon phort USB aige air a chleachdadh airson modem 2G / 3G, tha seo uile air a phasgadh ann an seòrsa de chùis plastaig bheag agus air a chuir an àiteigin àrd, àrd (air a ’chrann), fada, fada air falbh (san achadh, 30 km bhon stèisean bunaiteach gnìomhaiche gluasadach as fhaisge). Faodaidh, faodaidh tu mòr-ionad USB a chuir a-steach agus an àireamh de phuirt a leudachadh, ach tha eòlas a’ sealltainn gu bheil seo trom agus neo-earbsach.

Mar sin, dh’ fheuch mi ri mo shuidheachadh àbhaisteach a mhìneachadh dhut: “An àiteigin fada, fada air falbh, tha router glè chudromach, aonaranach agus beag a’ ruith Linux. Tha e cudromach fios a bhith agad co-dhiù aon uair san latha gu bheil e “beò” agus, ma tha sin riatanach, thèid òrdughan a chuir thuige, mar eisimpleir, “mil, ath-thòiseachadh!”

Gluaisidh sinn air adhart gu buileachadh:

1) Air taobh an router, tro cron, a h-uile mionaid 5/10/1440, no uair sam bith a tha thu ag iarraidh, feumaidh tu iarrtas http a chuir chun t-seirbheisiche a ’cleachdadh wget, sàbhail toradh an iarrtais gu faidhle, dèan am faidhle so-ghnìomhaichte , agus a chur an gnìomh.

Tha an loidhne cron agam a’ coimhead rudeigin mar seo:

Faidhle /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

, far a bheil:
Is e xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai àrainn an fhrithealaiche agam. Bheir mi fa-near anns a 'bhad: tha, faodaidh tu seòladh IP sònraichte an fhrithealaiche a shònrachadh, b' àbhaist dhuinn seo a dhèanamh gus an robh ar staid, ann an strì ceart, canaidh mi, chan eil fhios 'am, chuir sinn bacadh air ruigsinneachd gu cuibhreann an leòmhann de “sgòthan” DigitalOcean agus Amazon. Ma chleachdas tu àrainn samhlachail, ma thachras tachartas mar sin, is urrainn dhut gu furasta sgòth cùl-taic a thogail, an raon ath-stiùireadh thuige agus sgrùdadh inneal a thoirt air ais.

a.php an t-ainm a th’ air an sgriobt taobh an fhrithealaiche. Tha, tha fios agam gu bheil e ceàrr caochladairean agus ainmean faidhle leis an aon litir ainmeachadh... Tha mi a’ moladh gun sàbhail sinn mar seo beagan bytes nuair a chuireas sinn iarrtas :)
u - ainm-cleachdaidh, logadh a-steach bathar-cruaidh
p - facal-faire
Tha “-O /tmp/wa.sh” na fhaidhle air an router iomallach far am bi freagairt an fhrithealaiche, mar eisimpleir an àithne ath-thòiseachadh, air a shàbhaladh.

Nota àireamh a dhà: Ahhh, carson a bhios sinn a’ cleachdadh wget and not curl, oir tro curl faodaidh tu iarrtasan https a chuir chan ann le GET, ach le POST? Ahhh oir, mar a bha san t-seann fealla-dhà “tha NE a’ dìreadh a-steach don phoit!” Tha curl a’ toirt a-steach leabharlannan crioptachaidh timcheall air 2MB ann am meud, agus air sgàth seo chan eil e coltach gum bi e comasach dhut ìomhaigh a chruinneachadh airson TP-LINK ML3020 beag, mar eisimpleir. Agus le wget - mas e do thoil e.

2) Air taobh an fhrithealaiche (tha Ubuntu agam) cleachdaidh sinn Zabbix. Carson: Tha mi airson gum bi e brèagha (le grafaichean) agus goireasach (cuir òrdughan tron ​​​​chlàr co-theacsa). Tha rud cho iongantach aig Zabbix ris an àidseant zabbix. Tron neach-ionaid, cuiridh sinn fios gu sgriobt PHP air an fhrithealaiche, a thilleas fiosrachadh a thaobh an do chlàraich an router againn rè na h-ùine riatanach. Gus fiosrachadh a stòradh mu àm clàraidh, òrdughan airson innealan, bidh mi a’ cleachdadh MySQL, cleachdaiche bùird air leth le timcheall air na raointean a leanas:

		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;

Faodar a h-uile stòr a luchdachadh sìos bho stòr Git aig: https://github.com/BazDen/iotnet.online.git
A-nis sgriobtaichean PHP air an cur air taobh an fhrithealaiche (airson goireasachd, faodar an cur sa phasgan / usr/share/zabbix/):

a.php faidhle:

<?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();
	?>

Agent.php faidhle (seo sgriobt an àidseant zabbix ris an canar):

<?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();
?>		

Uill, an ìre mu dheireadh: clàradh àidseant agus cuir clàran-ama ris.

Mura h-eil thu air an àidseant zabbix a chuir a-steach fhathast, an uairsin:

apt-get install zabbix-agent

Deasaich am faidhle /etc/zabbix/zabbix_agentd.conf.

Cuir ris an loidhne:

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

, far a bheil:
is e deuchainn ainm ar neach-ionaid
“php /usr/share/zabbix/agent.php facal-faire cleachdaiche” - sgriobt ris an canar a’ nochdadh dàta clàraidh an uidheim.

A’ cur chlàran ris: fosgail an eadar-aghaidh lìn zabbix, tagh bhon chlàr:
Roghainnean -> Nodan lìonra -> Cruthaich nód lìonra. An seo tha e gu leòr airson ainm aoigheachd an lìonraidh, a bhuidheann, agus an eadar-aghaidh àidseant bunaiteach a shònrachadh:

Sgrùdadh is smachd air astar air innealan stèidhichte air Lunix/OpenWrt/Lede tro phort 80…

A-nis feumaidh sinn eileamaid dàta a chuir ris airson an nód lìonra seo. Thoir aire do dhà raon: “iuchrach” - is e seo dìreach am paramadair a sgrìobh sinn anns an fhaidhle /etc/zabbix/zabbix_agentd.conf (anns a’ chùis againn tha e deuchainn), agus “àm ùrachaidh” - chuir mi sìos e gu 5 mionaidean , oir agus tha an uidheamachd cuideachd clàraichte air an fhrithealaiche aon uair gach còig mionaidean.

Sgrùdadh is smachd air astar air innealan stèidhichte air Lunix/OpenWrt/Lede tro phort 80…

Uill, leig dhuinn graf a chuir ris. Tha mi a’ moladh “Lìon” a thaghadh mar an stoidhle tairgse.

Sgrùdadh is smachd air astar air innealan stèidhichte air Lunix/OpenWrt/Lede tro phort 80…

Tha an toradh rudeigin gu math laconic, mar eisimpleir mar seo:

Sgrùdadh is smachd air astar air innealan stèidhichte air Lunix/OpenWrt/Lede tro phort 80…

Chun a 'cheist reusanta: "an b' fhiach e?", Freagraidh mi: uill, gu dearbh, faic "adhbharan airson baidhsagal a chruthachadh" aig toiseach an artaigil.

Ma tha a’ chiad eòlas graphomaniac agam a’ togail ùidh luchd-leughaidh, an uairsin anns na h-artaigilean a leanas tha mi airson cunntas a thoirt air mar a chuireas mi òrdughan gu uidheamachd iomallach. Chaidh againn cuideachd air an sgeama iomlan airson innealan a chuir an gnìomh stèidhichte air RouterOS (Mikrotik).

Source: www.habr.com

Cuir beachd ann