Tlhokomelo le taolo e hole ea lisebelisoa tse thehiloeng ho Lunix/OpenWrt/Lede ka port 80…

Lumelang bohle, ana ke phihlelo ea ka ea pele ho Habré. Ke batla ho ngola ka mokhoa oa ho laola lisebelisoa tsa marang-rang marang-rang a ka ntle ka tsela e sa tloaelehang. Ho bolela eng e sa tloaelehang: hangata, ho laola lisebelisoa ho netweke ea kantle eo u e hlokang:

  • Aterese ea IP ea sechaba. Hantle, kapa haeba thepa e ka morao ho NAT ea motho e mong, joale IP ea sechaba le "port" e "fetisitsoeng".
  • Tunnel (PPTP/OpenVPN/L2TP+IPSec, joalo-joalo) ho node e bohareng eo e neng e tla fumaneha ka eona.

Ka hona, o tla hloka "baesekele ea ka" ha mekhoa e tloaelehileng e sa lumellane le uena, mohlala:

  1. Thepa e fumaneha ka morao ho NAT mme, ntle le ho http e tloaelehileng (port 80), ntho e 'ngoe le e' ngoe e koetsoe. Ena ke boemo bo tloaelehileng ka ho feletseng bakeng sa marang-rang a maholo a mekhatlo ea federal. Ba ka ngolisa likoung, empa eseng hang-hang, eseng ka potlako, eseng bakeng sa hau.
  2. Mocha oa puisano o sa tsitsang le/kapa o “sesane”. Lebelo le tlase, tahlehelo e sa feleng. Bohloko le ho tsieleha ha u leka ho hlophisa kotopo.
  3. Mocha oa puisano o theko e boima, moo megabyte e 'ngoe le e' ngoe e leng bohlokoa. Ka mohlala, puisano ka sathelaete. Hape tieho e telele le sehlopha se "moqotetsane".
  4. Boemo ha o hloka ho "juggle" palo e kholo ea li-routers tse nyane, moo, ka lehlakoreng le leng, OpenWrt / Lede e kentsoeng ho atolosa bokhoni, 'me ka lehlakoreng le leng, lisebelisoa (memori) ea router ha e lekane. bakeng sa tsohle.

Hlokomela makhetlo a linomoro Ke eng e u thibelang ho kenya flash drive ka har'a koung ea USB ea router le ho atolosa mohopolo oa router?

Hangata, litlhoko ke tsa litšenyehelo tsa tharollo ka kakaretso, empa ka linako tse ling sebopeho sa sebopeho le sona se phetha karolo ea bohlokoa. Mohlala, ho na le TP-Link ML3020 sebakeng sa marang-rang, boema-kepe ba eona feela ba USB bo sebelisetsoa modem ea 2G/3G, sena sohle se phuthetsoe ka mofuta o mong oa mokotla o monyane oa polasetiki mme o behiloe kae-kae holimo, holimo (mast), hole, hole (ka lebaleng, lik'hilomithara tse 30 ho tloha seteisheneng se haufi sa opareitara ea mehala). Ee, o ka hokela setsing sa USB mme oa holisa palo ea likou, empa boiphihlelo bo bonts'a hore sena se boima ebile ha se tšepahale.

Kahoo, ke lekile ho u hlalosetsa boemo ba ka bo tloaelehileng: "kae-kae hole, hole, ho na le router ea bohlokoa haholo, e jeoang ke bolutu le e nyenyane e tsamaisang Linux. Ke habohlokoa ho tseba bonyane hang ka letsatsi hore o "phela" 'me, haeba ho hlokahala, litaelo li romeloa ho eena, mohlala, "mahe a linotsi, reboot!"

Ha re feteleng pele ho ts'ebetsong:

1) Ka lehlakoreng la router, ka cron, metsotso e meng le e meng ea 5/10/1440, kapa neng kapa neng ha u batla, u lokela ho romela kopo ea http ho seva u sebelisa wget, boloka sephetho sa kopo ho faele, etsa hore faele e phethahale. , le ho e phetha.

Mohala oa ka oa cron o shebahala tjena:

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

, moo:
xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai ke sebaka sa seva sa ka. E-re ke hlokomele hang-hang: e, o ka hlalosa aterese e itseng ea IP ea seva, re ne re tloaetse ho etsa sena ho fihlela naha ea rona, ka tšusumetso e nepahetseng ea ntoa, ke tla re, ha ke tsebe, ke thibetse ho fihlella ha tau. karolo ea "maru" a DigitalOcean le Amazon. Haeba u sebelisa sebaka sa tšoantšetso, haeba ketsahalo e joalo e etsahala, u ka phahamisa leru la "backup" habonolo, u lebise sebaka sa marang-rang ho eona 'me u tsosolose lisebelisoa tsa lisebelisoa.

a.php ke lebitso la sengoloa sa lehlakore la seva. E, kea tseba hore ho fosahetse ho reha mefuta e fapaneng le mabitso a lifaele ka tlhaku e tšoanang ... Ke fana ka maikutlo a hore ka tsela ena re boloke li-byte tse seng kae ha re romela kopo :)
u - username, ho kena ha hardware
p - password
"-O /tmp/wa.sh" ke faele e ho router e hōle moo karabo ea seva, mohlala taelo ea ho tsosolosa, e tla bolokeha.

Ntlha ea bobeli: Ahhh, ke hobane'ng ha re sebelisa wget eseng curl, hobane ka curl o ka romella likopo tsa https eseng ka GET, empa ka POST? Ahhh hobane, joalo ka motlae oa khale "NE o hloella ka nkhong!" curl e kenyelletsa lilaebrari tsa encryption tse ka bang 2MB ka boholo mme ka lebaka lena ha ho na monyetla oa hore o tla khona ho bokella setšoantšo sa TP-LINK ML3020 e nyane, mohlala. Mme ka wget - ka kopo.

2) Ka lehlakoreng la seva (ke na le Ubuntu) re tla sebelisa Zabbix. Hobaneng: Ke batla hore e be ntle (ka li-graph) 'me e be bonolo (romela litaelo ka menu ea moelelo). Zabbix e na le ntho e ntle joalo ka moemeli oa zabbix. Ka moemeli, re tla letsetsa sengoloa sa PHP ho seva, se tla khutlisa tlhahisoleseling mabapi le hore na router ea rona e ngolisitsoe ka nako e hlokahalang. Ho boloka tlhahisoleseling mabapi le nako ea ho ngolisa, litaelo tsa lisebelisoa, ke sebelisa MySQL, basebelisi ba tafole ba fapaneng ba nang le likarolo tse latelang:

		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;

Mehloli eohle e ka khoasolloa sebakeng sa polokelo ea Git ho: https://github.com/BazDen/iotnet.online.git
Hona joale lingoloa tsa PHP li behiloe lehlakoreng la seva (bakeng sa boiketlo, li ka beoa ho /usr/share/zabbix/ foldareng):

a.php faele:

<?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 (ona ke mongolo oa moemeli oa zabbix o bitsoang):

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

Hantle, mohato oa ho qetela: ho ngolisa moemeli le ho eketsa mananeo.

Haeba ha o so kenye ajente ea zabbix, joale:

apt-get install zabbix-agent

Fetola faele /etc/zabbix/zabbix_agentd.conf.

Kenya mola:

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

, moo:
teko ke lebitso la moemeli oa rona
"php /usr/share/zabbix/agent.php password ya mosebedisi" - sengoloa se bitswang se bontshang data ya ngodiso ya sesebelisoa.

Ho eketsa lichate: bula sebopeho sa websaete sa zabbix, khetha ho tsoa ho menu:
Litlhophiso -> Node tsa marang-rang -> Theha node ea marang-rang. Mona ho lekane ho hlakisa lebitso la moamoheli oa marang-rang, sehlopha sa eona, le sebopeho sa moemeli oa kamehla:

Tlhokomelo le taolo e hole ea lisebelisoa tse thehiloeng ho Lunix/OpenWrt/Lede ka port 80…

Hona joale re hloka ho eketsa karolo ea data bakeng sa node ena ea marang-rang. Ela hloko likarolo tse peli: "senotlolo" - ena ke eona paramethara eo re e ngotseng faeleng ea /etc/zabbix/zabbix_agentd.conf (ho rona ke teko), le "nako ea ntlafatso" - ke e behile metsotso e 5. , hobane le thepa e boetse e ngolisitsoe ho seva hang ka mor'a metsotso e mehlano.

Tlhokomelo le taolo e hole ea lisebelisoa tse thehiloeng ho Lunix/OpenWrt/Lede ka port 80…

Hantle, ha re kenye kerafo. Ke khothaletsa ho khetha "Tlatsa" joalo ka mokhoa oa ho fana.

Tlhokomelo le taolo e hole ea lisebelisoa tse thehiloeng ho Lunix/OpenWrt/Lede ka port 80…

Sephetho ke ntho e laconic haholo, mohlala e kang ena:

Tlhokomelo le taolo e hole ea lisebelisoa tse thehiloeng ho Lunix/OpenWrt/Lede ka port 80…

Ho potso e utloahalang: "Na e ne e le ea bohlokoa?", Ke tla araba: hantle, ha e le hantle, bona "mabaka a ho bōpa baesekele" qalong ea sehlooho.

Haeba phihlelo ea ka ea pele ea graphomaniac e tsosa thahasello ea babali, joale lihloohong tse latelang ke batla ho hlalosa mokhoa oa ho romela litaelo ho thepa e hōle. Hape re khonne ho kenya ts'ebetsong morero oohle oa lisebelisoa tse thehiloeng ho RouterOS (Mikrotik).

Source: www.habr.com

Eketsa ka tlhaloso