Fanaraha-maso lavitra sy fanaraha-maso ireo fitaovana miorina Lunix/OpenWrt/Lede amin'ny alàlan'ny seranana 80…

Salama daholo, ity no traikefako voalohany momba ny Habré. Te hanoratra momba ny fomba fitantanana ny fitaovan'ny tambajotra amin'ny tambajotra ivelany amin'ny fomba tsy manara-penitra aho. Inona no dikan'ny hoe tsy manara-penitra: amin'ny ankamaroan'ny tranga, mba hitantana fitaovana amin'ny tambajotra ivelany dia ilainao:

  • Adiresy IP ho an'ny daholobe. Eny, na raha ao ambadiky ny NAT an'ny olona ny fitaovana, dia IP ho an'ny daholobe ary seranan-tsambo "nandroso".
  • Tonelina (PPTP/OpenVPN/L2TP+IPSec, sns.) mankany amin'ny node afovoany izay ahafahany miditra.

Noho izany dia mila "bisikileta" ianao rehefa tsy mifanaraka aminao ny fomba mahazatra, ohatra:

  1. Ao ambadiky ny NAT no misy ny fitaovana ary, afa-tsy ny mahazatra http (seranan-tsambo 80), mihidy ny zava-drehetra. Toe-javatra mahazatra tanteraka ho an'ny tambajotran'ny orinasa federaly lehibe izany. Afaka misoratra anarana seranan-tsambo izy ireo, fa tsy avy hatrany, tsy haingana, ary tsy ho anao.
  2. Fantsona fifandraisana tsy miorina sy/na “tety”. Low hafainganam-pandeha, very foana. Fanaintainana sy fahasorenana rehefa miezaka mandamina tonelina.
  3. Fantsona fifandraisana lafo vidy, izay isaina ara-bakiteny ny megabyte rehetra. Ohatra, ny fifandraisana amin'ny zanabolana. Miampy fanemorana lava sy tarika "ety".
  4. Toe-javatra iray izay mila "juggle" be dia be ny routers kely, izay, amin'ny lafiny iray, OpenWrt / Lede napetraka mba hanitarana ny fahaiza-manao, ary amin'ny lafiny iray, ny loharanon-karena (fahatsiarovana) ny router dia tsy ampy. ho an'ny zavatra rehetra.

Mariho ny isa isa Inona no manakana anao tsy hametraka flash drive ao amin'ny seranan-tsambo USB an'ny router ary manitatra ny fitadidian'ny router?

Matetika indrindra, ny fepetra takiana dia ny vidin'ny vahaolana amin'ny ankapobeny, fa indraindray ny endrika endrika ihany koa dia mitana anjara toerana lehibe. Ohatra, misy TP-Link ML3020 ao amin'ny tranokala, ny seranan-tsambo USB tokana dia ampiasaina amin'ny modem 2G/3G, izany rehetra izany dia nofonosina amin'ny karazana plastika kely ary apetraka any amin'ny toerana avo, avo (eo amin'ny andry), lavitra, lavitra (eo an-tsaha, 30 km miala ny tobim-piantsonan'ny mpandraharaha finday akaiky indrindra). Eny, azonao atao ny mampiditra USB hub ary manitatra ny isan'ny seranana, saingy ny traikefa dia mampiseho fa sarotra sy tsy azo ianteherana izany.

Noho izany, nanandrana nanoritsoritra anao ny toe-javatra mahazatra ahy aho: "any amin'ny toerana lavitra, lavitra, misy router tena manan-danja, manirery ary kely mandeha Linux. Zava-dehibe ny mahafantatra farafaharatsiny indray mandeha isan'andro fa "velona" izy ary, raha ilaina, dia alefa any aminy ny baiko, ohatra, "tantely, reboot!"

Andao hiroso amin'ny fampiharana:

1) Amin'ny lafiny router, amin'ny alàlan'ny cron, isaky ny 5/10/1440 minitra, na isaky ny tianao, mila mandefa fangatahana http amin'ny mpizara mampiasa wget ianao, tehirizo ny valin'ny fangatahana amin'ny rakitra iray, ataovy azo tanterahina ny rakitra. , ary tanteraho.

Ny andalana cron-ko dia toa izao:

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

, aiza:
xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai no sehatry ny mpizarako. Avelao aho hanamarika avy hatrany: eny, azonao atao ny mamaritra adiresy IP manokana an'ny mpizara, nanao izany izahay hatramin'ny fanjakanay, tao anatin'ny tolona marina, hoy aho, tsy fantatro, voasakana ny fidirana amin'ny liona. anjara amin'ny DigitalOcean sy Amazon "rahona". Raha mampiasa sehatra an'ohatra ianao, raha misy tranga toy izany, dia azonao atao ny manangana rahona backup mora foana, mamindra ny sehatra ho azy ary mamerina ny fanaraha-maso ny fitaovana.

a.php no anaran'ny script-server. Eny, fantatro fa tsy mety ny manonona ny variables sy ny anaran'ny rakitra miaraka amin'ny litera iray ihany ... Manoro hevitra aho fa amin'ity fomba ity dia mitahiry bytes vitsivitsy isika rehefa mandefa fangatahana :)
u - solon'anarana, fidirana amin'ny fitaovana
p - tenimiafina
"-O /tmp/wa.sh" dia rakitra ao amin'ny router lavitra izay hotehirizina ny valin'ny mpizara, ohatra ny baiko reboot.

Fanamarihana laharana faharoa: Ahhh, nahoana isika no mampiasa wget fa tsy curl, satria amin'ny alalan'ny curl dia afaka mandefa fangatahana https tsy amin'ny GET, fa amin'ny POST? Ahhh satria, toy ny tao amin'ilay vazivazy taloha hoe "Miakatra ao anaty siny ny NE!" curl dia misy tranomboky fanafenana mirefy 2MB eo ho eo ary noho izany dia tsy azo inoana fa ho afaka hanangona sary ho an'ny TP-LINK ML3020 kely ianao, ohatra. Ary miaraka amin'ny wget - azafady.

2) Amin'ny lafiny mpizara (manana Ubuntu aho) dia hampiasa Zabbix izahay. Nahoana: Tiako ny ho tsara tarehy (miaraka amin'ny grafika) ary mety (mandefa baiko amin'ny alàlan'ny menu context). Zabbix dia manana zavatra mahafinaritra toy ny zabbix agent. Amin'ny alàlan'ny mpandraharaha dia hiantso script PHP amin'ny mpizara izahay, izay hamerina ny fampahalalana momba ny hoe nisoratra anarana ny router-nay nandritra ny fe-potoana takiana. Mba hitahiry vaovao momba ny fotoana fisoratana anarana, baiko ho an'ny fitaovana, mampiasa MySQL aho, mpampiasa latabatra misaraka miaraka amin'ireto saha manaraka ireto:

		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;

Ny loharano rehetra dia azo alaina avy amin'ny tahiry Git amin'ny: https://github.com/BazDen/iotnet.online.git
Amin'izao fotoana izao, ny script PHP dia napetraka eo amin'ny lafin'ny mpizara (ho fanamorana, azo apetraka ao amin'ny lahatahiry /usr/share/zabbix/):

a.php rakitra:

<?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 fichier (ity ny script an'ny zabbix agent antsoina hoe):

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

Eny, ny dingana farany: fisoratana anarana mpandraharaha ary manampy fandaharam-potoana.

Raha mbola tsy nametraka ny zabbix agent ianao dia:

apt-get install zabbix-agent

Amboary ny rakitra /etc/zabbix/zabbix_agentd.conf.

Ampio ny tsipika:

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

, aiza:
test no anaran'ny agent-nay
“php /usr/share/zabbix/agent.php tenimiafina mpampiasa” - sora-baventy antsoina manondro ny angon-drakitra fisoratana anarana fitaovana.

Manampy tabilao: sokafy ny interface web zabbix, safidio amin'ny menio:
Settings -> Network nodes -> Mamorona node tambajotra. Eto dia ampy ny mamaritra ny anaran'ny mpampiantrano tambajotra, ny vondrona misy azy ary ny interface interface default:

Fanaraha-maso lavitra sy fanaraha-maso ireo fitaovana miorina Lunix/OpenWrt/Lede amin'ny alàlan'ny seranana 80…

Ankehitriny dia mila manampy singa data ho an'ity node tambajotra ity isika. Tandremo ny sehatra roa: "key" - izany indrindra no mari-pamantarana nosoratanay tao amin'ny rakitra /etc/zabbix/zabbix_agentd.conf (amin'ny tranga misy antsika dia fitsapana), ary "fanavaozana interval" - napetrako ho 5 minitra. , satria ary ny fitaovana dia voasoratra ao amin'ny server indray mandeha isaky ny dimy minitra.

Fanaraha-maso lavitra sy fanaraha-maso ireo fitaovana miorina Lunix/OpenWrt/Lede amin'ny alàlan'ny seranana 80…

Aleo asiana graph. Manoro hevitra aho hisafidy ny "Feno" ho fomba fandikana.

Fanaraha-maso lavitra sy fanaraha-maso ireo fitaovana miorina Lunix/OpenWrt/Lede amin'ny alàlan'ny seranana 80…

Ny vokatra dia zavatra tena laconic, ohatra toy izao:

Fanaraha-maso lavitra sy fanaraha-maso ireo fitaovana miorina Lunix/OpenWrt/Lede amin'ny alàlan'ny seranana 80…

Ho an'ny fanontaniana mitombina: "Mendrika ve izany?", hamaly aho: mazava ho azy, jereo ny "antony amin'ny famoronana bisikileta" eo am-piandohan'ny lahatsoratra.

Raha manaitra ny fahalianan'ny mpamaky ny traikefako voalohany amin'ny graphomaniac, dia amin'ny lahatsoratra manaraka dia tiako ny hamaritra ny fomba fandefasana baiko amin'ny fitaovana lavitra. Nahavita nampihatra ny drafitra manontolo ho an'ny fitaovana mifototra amin'ny RouterOS (Mikrotik) ihany koa izahay.

Source: www.habr.com

Add a comment