Remota vigilantia et imperium Lunix/OpenWrt/Lede substructio inventa per portum 80…

Salve omnes, haec prima experientia in Habre mea est. Libet scribere quomodo instrumenta retiaculorum externam in retiaculis externam regendi modo non-vexillo modo. Quid sibi velit non vexillum: in pluribus, apparatum in retia externa regere debes:

  • Publica IP oratio. Bene, vel si apparatus est alicuius NAT, deinde IP publicus et "transmissus" portus.
  • Cuniculum (PPTP/OpenVPN/L2TP+IPSec, etc.) ad nodi centralem per quam accessibilis esset.

Ergo necesse est "cursoriam meam" cum modi normae tibi non conveniunt, exempli gratia:

  1. Apparatum post NAT sita est et, praeter consuetudinem http (port 80), omnia clausa sunt. Haec condicio omnino normalis est pro magnis retiacula corporatorum foederati. Possunt portus subcriptio, sed non ilicet, nec cito, nec tibi.
  2. Inconstans et/vel "angustum" communicatio canalis. Humilis velocitas, damna assidua. Dolor et frustratio cum cuniculum ordinare conatur.
  3. Vas communicationis pretiosa, ubi proprie megabyte omnis excedit. Satellite communicationes exempli gratia. Plus longae morae et "angustae" manus.
  4. Condicio cum "juggle" opus est permulta itineraria parva, in qua, ex una parte, OpenWrt/Lede instituitur ut facultates ampliandi, et ex altera parte, facultates itineris itineris satis non sunt. omne enim.

Nota numero temporum Quid obstat quominus installare mico coegi in USB portum itineris et memoriam itineris dilatare?

Saepissime requisita sunt pro solutione totius sumptus, interdum autem factor formae praecipuus munere funguntur. Exempli gratia, est TP-Link ML3020 in situ, eius unicum USB portum ad 2G/3G modem adhibitum, haec omnia in casu aliquo parvae plasticae involvuntur et alicubi altae, altae (in malo) positae sunt; longe, procul (per campum, 30 km ab proximis statio mobilis operator basis). Ita, plug in USB centrum et numerum portuum augere potes, sed experientia docet hoc gravia et incerta esse.

Itaque conabar tibi describere condicionem typicam meam: “alicubi longe, procul, est gravissima, sola et parva itineris cursus Linux. Interest scire saltem semel in die eum "vivum" esse et, si opus est, mandata ei mitti, ut "mel, reboot!"

Ad exsecutionem transeamus:

1) In latere itineris, per cron, singulis 5/10/1440 momentis, vel quoties vis, necesse est ut petentem mittat servo utente wget, nisi ex petitione lima, tabella exsecutabile fac. atque faciat.

Mihi cron linea aliquid simile hoc spectat:

Fasciculus /etc/crontabs/radix:

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

Ubi:
xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai est dominium servi mei. Advertam ilicet: ita, specificare IP electronicam servientis, quam facere consuevimus usque ad statum nostrum, iusto certaminis impetu, dicam, nescio, obstruxit accessum ad leonem. partem DigitalOcean et Amazon "nubes". Si symbolica regione uteris, si casus talis incidit, facile nubem tergum erigere potes, domain ad eam redigere ac vigilantiam machinam restituere.

a.php nomen est scriptor scripturae server. Imo scio nefas esse nomina variabilia ac fasciculata cum eadem littera nominare... Moneo hoc modo paucos bytes salvare, cum petitionem mittens :)
u - username, hardware login
p - password
"-O /tmp/wa.sh" fasciculus est itineris longinqui ubi responsum servo, exempli gratia reboot mandatum, salvus erit.

Nota numerum binum; Ahhh, cur wget et non cincinno utimur, quia per Crispum potes mittere https petitiones non cum GET, sed cum POST? Ahhh quia, sicut in veteri ioco "NE ascendit in dolium!" Crispum encryption bibliothecas includat circiter 2MB magnitudine et ob id veri simile est quod imaginem convenire poteris pro parva TP-LINK ML3020, exempli gratia. Et with wget — oro.

2) In servo latere (habeo Decuria) utemur Zabbix. Quare: Volo eam pulchram esse (cum graphs) et commodam (mittere mandata per tabulam contextam). Zabbix tam mirabilem rem quam zabbix agens. Per procuratorem scribemus PHP scriptum in calculonis, qui informationem reddet de num iter itineris nostri per tempus debitum relatus erit. Ad informationes circa tempus adnotationes, mandata ad machinas, utor MySQL, mensae separatae utentes cum proxime sequentibus in campis:

		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;

Omnes fontes e Git repositorio accipi possunt: https://github.com/BazDen/iotnet.online.git
Nunc PHP scripta in servo lateris posita (pro commodo, collocari possunt in /usr/share/zabbix/ folder);

a.php file:

<?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 fasciculus (hoc est scriptum agentis zabbix vocati);

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

Bene, scaena ultima: perscriptum agens et addens cedulas.

Si nondum agente zabbix inauguratus est, tunc:

apt-get install zabbix-agent

Edere tabella /etc/zabbix/zabbix_agentd.conf.

lineam adde:

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

Ubi:
test est nomen agentis nostri
"php /usr/share/zabbix/agent.php user password" - dicitur scriptum indicat fabrica adnotatione data.

Additis chartis: interfacies zabbix aperi, e menu selige:
Optiones -> Nodi Network -> Nodi retis crea. Hic satis est denotare nomen exercitus retis, coetus eius, et procuratoris defectus instrumenti:

Remota vigilantia et imperium Lunix/OpenWrt/Lede substructio inventa per portum 80…

Nunc opus est addere nodi datam elementi huius retis. Adtendite duos agros: "clavem" - hoc est prorsus modulum quem in tabella /etc/zabbix/zabbix_agentd.conf (in nostro casu probatum est), et "renovatio intervallum" - id ad 5 minuta constituimus. , quia instrumentum quoque in servo semel in quinque minuta relatus est.

Remota vigilantia et imperium Lunix/OpenWrt/Lede substructio inventa per portum 80…

Sed graphiam addamus. Commendo eligendo "Imple" ut stilum reddens.

Remota vigilantia et imperium Lunix/OpenWrt/Lede substructio inventa per portum 80…

Output est valde laconicum, exempli gratia sic:

Remota vigilantia et imperium Lunix/OpenWrt/Lede substructio inventa per portum 80…

Ad quaestionem rationabilem: “An tanti erat?”, respondebo: bene, sane, vide “causas vehentem creandi” in principio articuli.

Si prima experientia graphomanicae studium legentium excitat, deinde in sequentibus articulis describere volo quomodo mandata ad remotis instrumentis mittat. Etiam totum consilium ad machinas in RouterOS (Mikrotik) deducendas curavimus.

Source: www.habr.com

Add a comment