Monatóireacht agus rialú cianda ar ghléasanna bunaithe ar Lunix/OpenWrt/Lede trí phort 80…

Dia duit gach duine, is é seo mo chéad taithí ar Habré. Ba mhaith liom a scríobh faoi conas trealamh líonra a bhainistiú ar líonra seachtrach ar bhealach neamhchaighdeánach. Cad a chiallaíonn neamhchaighdeánach: i bhformhór na gcásanna, chun trealamh a bhainistiú ar líonra seachtrach is gá duit:

  • Seoladh IP poiblí. Bhuel, nó má tá an trealamh taobh thiar de NAT duine éigin, ansin IP poiblí agus calafort “ar aghaidh”.
  • Tollán (PPTP/OpenVPN/L2TP+IPSec, etc.) go dtí an nód lárnach trína mbeadh rochtain air.

Mar sin, beidh “mo rothar” uait nuair nach n-oireann modhanna caighdeánacha duit, mar shampla:

  1. Tá an trealamh suite taobh thiar de NAT agus, seachas an gnáth http (port 80), tá gach rud dúnta. Is gnáthchás é seo do líonraí móra corparáideacha feidearálacha. Is féidir leo calafoirt a chlárú, ach ní ar an bpointe boise, ní go tapa, agus ní ar do shon.
  2. Cainéal cumarsáide éagobhsaí agus/nó “caol”. Luas íseal, caillteanais leanúnach. Péine agus frustrachas agus tú ag iarraidh tollán a eagrú.
  3. Cainéal cumarsáide costasach, áit a mbíonn gach meigibheart san áireamh. Mar shampla, cumarsáid satailíte. Chomh maith le moilleanna fada agus banna “caol”.
  4. Cás nuair is gá duit "juggle" a dhéanamh ar líon mór ródairí beaga, ar a bhfuil, ar thaobh amháin, OpenWrt/Lede suiteáilte chun cumais a leathnú, agus ar an láimh eile, ní leor acmhainní (cuimhne) an ródaire do gach rud.

Tabhair faoi deara amanna uimhreacha Cad a chuireann cosc ​​ort tiomáint flash a shuiteáil i bport USB an ródaire agus cuimhne an ródaire a leathnú?

Is minic a bhíonn na ceanglais maidir le costas an réitigh ina iomláine, ach uaireanta tá ról lárnach ag an bhfachtóir foirme freisin. Mar shampla, tá TP-Link ML3020 ar an suíomh, is é an t-aon phort USB a úsáidtear le haghaidh móideim 2G/3G, tá sé seo go léir fillte i gcás plaisteach beag de chineál éigin agus curtha in áit éigin ard, ard (ar an gcrann), i bhfad, i bhfad ar shiúl (sa pháirc, 30 km ón mbunstáisiún oibreora soghluaiste is gaire). Sea, is féidir leat mol USB a phlugáil isteach agus líon na gcalafort a leathnú, ach léiríonn taithí go bhfuil sé seo deacair agus neamhiontaofa.

Mar sin, rinne mé iarracht cur síos a dhéanamh duit ar mo chás tipiciúil: “áit éigin i bhfad, i gcéin, tá ródaire an-tábhachtach, uaigneach agus beag ag rith Linux. Tá sé tábhachtach go mbeadh a fhios ar a laghad uair sa lá go bhfuil sé “beo” agus, más gá, seoltar orduithe chuige, mar shampla, “mil, atosaigh!”

Rachaimid ar aghaidh chuig an gcur i bhfeidhm:

1) Ar thaobh an ródaire, via cron, gach 5/10/1440 nóiméad, nó aon uair is mian leat, ní mór duit iarratas http a sheoladh chuig an bhfreastalaí ag baint úsáide as wget, sábháil toradh an iarratais chuig comhad, déan an comhad inrite , agus é a fhorghníomhú.

Breathnaíonn mo líne cron rud éigin mar seo:

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

áit:
Is é xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai fearann ​​mo fhreastalaí. Lig dom a thabhairt faoi deara ar an bpointe boise: tá, is féidir leat a shonrú ar leith seoladh IP an fhreastalaí, úsáid againn chun é seo a dhéanamh go dtí ár stát, i impulse righteous de streachailt, déarfaidh mé, níl a fhios agam, bac ar rochtain ar an leon. sciar de “scamaill” DigitalOcean agus Amazon. Má úsáideann tú fearann ​​siombalach, má tharlaíonn eachtra den sórt sin, is féidir leat scamall cúltaca a ardú go héasca, an fearann ​​​​a atreorú chuige agus monatóireacht gléas a chur ar ais.

a.php is ainm don script ar thaobh an fhreastalaí. Sea, tá a fhios agam go bhfuil sé mícheart athróga agus ainmneacha comhaid leis an litir chéanna a ainmniú... Molaim duit cúpla beart a shábháil ar an mbealach seo agus iarratas á sheoladh :)
u - ainm úsáideora, logáil isteach crua-earraí
p - pasfhocal
Is comhad é “-O /tmp/wa.sh” ar an gcianródaire ina sábhálfar freagra an fhreastalaí, mar shampla an t-ordú atosaigh.

Nóta uimhir a dó: Ahhh, cén fáth a n-úsáidimid wget agus ní curl, mar is féidir leat iarratais https a sheoladh trí chuacha ní le GET, ach le POST? Ahhh mar, mar a bhí sa seanscéal “Dreapann NE isteach sa phróca!” Áirítear le curl leabharlanna criptithe de thart ar 2MB i méid agus mar gheall air seo ní dócha go mbeidh tú in ann íomhá a chur le chéile do TP-LINK ML3020 beag, mar shampla. Agus le wget - le do thoil.

2) Ar thaobh an fhreastalaí (tá Ubuntu agam) úsáidfimid Zabbix. Cén fáth: Ba mhaith liom go mbeadh sé álainn (le graif) agus áisiúil (seol orduithe tríd an roghchlár comhthéacs). Tá rud iontach ag Zabbix leis an ngníomhaire zabbix. Tríd an ngníomhaire, cuirfimid script PHP ar an bhfreastalaí, a sheolfaidh faisnéis ar ais maidir le cibé an bhfuil ár ródaire cláraithe le linn na tréimhse ama riachtanach. Chun faisnéis a stóráil faoi am clárúcháin, orduithe le haghaidh feistí, úsáidim MySQL, úsáideoirí tábla ar leith a bhfuil thart ar na réimsí seo a leanas ann:

		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;

Is féidir gach foinse a íoslódáil ó stór Git ag: https://github.com/BazDen/iotnet.online.git
Anois cuirtear scripteanna PHP ar thaobh an fhreastalaí (mar áis, is féidir iad a chur san fhillteán / usr/share/zabbix/):

comhad a.php:

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

Comhad Agent.php (seo script an ghníomhaire zabbix ar a dtugtar):

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

Bhuel, an chéim dheireanach: gníomhaire a chlárú agus sceidil a chur leis.

Mura bhfuil an gníomhaire zabbix suiteáilte agat fós, ansin:

apt-get install zabbix-agent

Cuir an comhad in eagar /etc/zabbix/zabbix_agentd.conf.

Cuir an líne leis:

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

áit:
Is é an tástáil ainm ár ngníomhaire
“phasfhocal úsáideora php /usr/share/zabbix/agent.php” - script ar a dtugtar a léiríonn sonraí clárúcháin an fheiste.

Ag cur cairteacha leis: oscail an comhéadan gréasáin zabbix, roghnaigh ón roghchlár:
Socruithe -> Nóid líonra -> Cruthaigh nód líonra. Anseo is leor ainm an óstaigh líonra, a ghrúpa, agus an comhéadan gníomhaire réamhshocraithe a shonrú:

Monatóireacht agus rialú cianda ar ghléasanna bunaithe ar Lunix/OpenWrt/Lede trí phort 80…

Anois ní mór dúinn eilimint sonraí a chur leis don nód líonra seo. Tabhair aird ar dhá réimse: “eochair” - is é seo go díreach an paraiméadar a scríobh muid sa chomhad /etc/zabbix/zabbix_agentd.conf (tástáil inár gcás), agus “eatramh nuashonraithe” - leag mé go 5 nóiméad é , mar gheall ar agus tá an trealamh cláraithe freisin ar an bhfreastalaí uair amháin gach cúig nóiméad.

Monatóireacht agus rialú cianda ar ghléasanna bunaithe ar Lunix/OpenWrt/Lede trí phort 80…

Bhuel, cuirimis graf leis. Molaim "Fill" a roghnú mar an stíl rindreála.

Monatóireacht agus rialú cianda ar ghléasanna bunaithe ar Lunix/OpenWrt/Lede trí phort 80…

Is rud an-laconic é an t-aschur, mar shampla mar seo:

Monatóireacht agus rialú cianda ar ghléasanna bunaithe ar Lunix/OpenWrt/Lede trí phort 80…

Chun an cheist réasúnta: "an raibh sé fiú é?", Freagróidh mé: go maith, ar ndóigh, féach "cúiseanna chun rothar a chruthú" ag tús an ailt.

Má chothaíonn mo chéad taithí ghrafómanach spéis na léitheoirí, ansin sna hailt seo a leanas ba mhaith liom cur síos a dhéanamh ar conas orduithe a sheoladh chuig ciantrealamh. D’éirigh linn freisin an scéim iomlán a chur i bhfeidhm le haghaidh feistí bunaithe ar RouterOS (Mikrotik).

Foinse: will.com

Add a comment