ื ื™ื˜ื•ืจ ื•ื‘ืงืจื” ืžืจื—ื•ืง ืฉืœ ื”ืชืงื ื™ื ืžื‘ื•ืกืกื™ Lunix/OpenWrt/Lede ื“ืจืš ื™ืฆื™ืื” 80...

ืฉืœื•ื ืœื›ื•ืœื, ื–ื• ื”ื”ืชื ืกื•ืช ื”ืจืืฉื•ื ื” ืฉืœื™ ื‘-Habrรฉ. ืื ื™ ืจื•ืฆื” ืœื›ืชื•ื‘ ืขืœ ืื™ืš ืœื ื”ืœ ืฆื™ื•ื“ ืจืฉืช ื‘ืจืฉืช ื—ื™ืฆื•ื ื™ืช ื‘ืฆื•ืจื” ืœื ืกื˜ื ื“ืจื˜ื™ืช. ืžื” ื”ืžืฉืžืขื•ืช ืฉืœ ืœื ืกื˜ื ื“ืจื˜ื™: ื‘ืจื•ื‘ ื”ืžืงืจื™ื, ื›ื“ื™ ืœื ื”ืœ ืฆื™ื•ื“ ื‘ืจืฉืช ื—ื™ืฆื•ื ื™ืช ืืชื” ืฆืจื™ืš:

  • ื›ืชื•ื‘ืช IP ืฆื™ื‘ื•ืจื™ืช. ื•ื‘ื›ืŸ, ืื• ืื ื”ืฆื™ื•ื“ ื ืžืฆื ืžืื—ื•ืจื™ ื”-NAT ืฉืœ ืžื™ืฉื”ื•, ืื– IP ืฆื™ื‘ื•ืจื™ ื•ื™ืฆื™ืื” "ืžื•ืขื‘ืจืช".
  • ืžื ื”ืจื” (PPTP/OpenVPN/L2TP+IPSec ื•ื›ื•') ืœืฆื•ืžืช ื”ืžืจื›ื–ื™ ืฉื“ืจื›ื• ื™ื”ื™ื” ื ื’ื™ืฉ.

ืœื›ืŸ, ืชื–ื“ืงืง ืœ"ืื•ืคื ื™ื™ื ืฉืœื™" ื›ืืฉืจ ื”ืฉื™ื˜ื•ืช ื”ืกื˜ื ื“ืจื˜ื™ื•ืช ืื™ื ืŸ ืžืชืื™ืžื•ืช ืœืš, ืœืžืฉืœ:

  1. ื”ืฆื™ื•ื“ ืžืžื•ืงื ืžืื—ื•ืจื™ NAT โ€‹โ€‹ื•ื—ื•ืฅ ืžื”-http ื”ืจื’ื™ืœ (ื™ืฆื™ืื” 80), ื”ื›ืœ ืกื’ื•ืจ. ื–ื”ื• ืžืฆื‘ ื ื•ืจืžืœื™ ืœื—ืœื•ื˜ื™ืŸ ืขื‘ื•ืจ ืจืฉืชื•ืช ืืจื’ื•ื ื™ื•ืช ืคื“ืจืœื™ื•ืช ื’ื“ื•ืœื•ืช. ื”ื ื™ื›ื•ืœื™ื ืœืจืฉื•ื ื™ืฆื™ืื•ืช, ืื‘ืœ ืœื ืžื™ื“, ืœื ืžื”ืจ, ื•ืœื ื‘ืฉื‘ื™ืœืš.
  2. ืขืจื•ืฅ ืชืงืฉื•ืจืช ืœื ื™ืฆื™ื‘ ื•/ืื• "ืฆืจ". ืžื”ื™ืจื•ืช ื ืžื•ื›ื”, ื”ืคืกื“ื™ื ืงื‘ื•ืขื™ื. ื›ืื‘ ื•ืชืกื›ื•ืœ ื›ืืฉืจ ืžื ืกื™ื ืœืืจื’ืŸ ืžื ื”ืจื”.
  3. ืขืจื•ืฅ ืชืงืฉื•ืจืช ื™ืงืจ, ืฉื‘ื• ืžืžืฉ ื›ืœ ืžื’ื” ื‘ื™ื™ื˜ ื ื—ืฉื‘. ืœืžืฉืœ, ืชืงืฉื•ืจืช ืœื•ื•ื™ื™ื ื™ืช. ื‘ื ื•ืกืฃ ืขื™ื›ื•ื‘ื™ื ืืจื•ื›ื™ื ื•ืจืฆื•ืขื” "ืฆืจื”".
  4. ืžืฆื‘ ืฉื‘ื• ืฆืจื™ืš "ืœื”ื˜ื˜" ืžืกืคืจ ืจื‘ ืฉืœ ื ืชื‘ื™ื ืงื˜ื ื™ื, ืขืœื™ื”ื ืžื•ืชืงืŸ ืžืฆื“ ืื—ื“ OpenWrt/Lede ืœื”ืจื—ื‘ืช ื”ื™ื›ื•ืœื•ืช, ื•ืžืฆื“ ืฉื ื™, ื”ืžืฉืื‘ื™ื (ื”ื–ื™ื›ืจื•ืŸ) ืฉืœ ื”ื ืชื‘ ืื™ื ื ืžืกืคื™ืงื™ื. ืœื›ืœ ื“ื‘ืจ.

ืฉื™ืžื• ืœื‘ ืžืกืคืจ ืคืขืžื™ื ืžื” ืžื•ื ืข ืžืžืš ืœื”ืชืงื™ืŸ ื›ื•ื ืŸ ื”ื‘ื–ืง ืœื™ืฆื™ืืช ื”-USB ืฉืœ ื”ื ืชื‘ ื•ืœื”ืจื—ื™ื‘ ืืช ื–ื™ื›ืจื•ืŸ ื”ื ืชื‘?

ืœืจื•ื‘, ื”ื“ืจื™ืฉื•ืช ื”ืŸ ืœืขืœื•ืช ื”ืคืชืจื•ืŸ ื‘ื›ืœืœื•ืชื•, ืืš ืœืขื™ืชื™ื ื’ื ื’ื•ืจื ื”ืฆื•ืจื” ืžืฉื—ืง ืชืคืงื™ื“ ืžืจื›ื–ื™. ืœื“ื•ื’ืžื”, ื™ืฉ ื‘ืืชืจ TP-Link ML3020, ื™ืฆื™ืืช ื”-USB ื”ื™ื—ื™ื“ื” ืฉืœื• ืžืฉืžืฉืช ืœืžื•ื“ื 2G/3G, ื›ืœ ื–ื” ืขื˜ื•ืฃ ื‘ืื™ื–ืฉื”ื• ืžืืจื– ืคืœืกื˜ื™ืง ืงื˜ืŸ ื•ืžืžื•ืงื ื‘ืžืงื•ื ื’ื‘ื•ื”, ื’ื‘ื•ื” (ืขืœ ื”ืชื•ืจืŸ), ืจื—ื•ืง, ืจื—ื•ืง (ื‘ืฉื˜ื—, 30 ืง"ืž ืžืชื—ื ืช ื”ื‘ืกื™ืก ืฉืœ ื”ืžืคืขื™ืœ ื”ืกืœื•ืœืจื™ ื”ืงืจื•ื‘). ื›ืŸ, ืืชื” ื™ื›ื•ืœ ืœื—ื‘ืจ ืจื›ื–ืช USB ื•ืœื”ืจื—ื™ื‘ ืืช ืžืกืคืจ ื”ื™ืฆื™ืื•ืช, ืื‘ืœ ื”ื ื™ืกื™ื•ืŸ ืžืœืžื“ ืฉื–ื” ืžืกื•ืจื‘ืœ ื•ืœื ืืžื™ืŸ.

ืื– ื ื™ืกื™ืชื™ ืœืชืืจ ืœื›ื ืืช ื”ืžืฆื‘ ื”ื˜ื™ืคื•ืกื™ ืฉืœื™: "ืื™ืคืฉื”ื• ืจื—ื•ืง, ืจื—ื•ืง, ื™ืฉ ื ืชื‘ ื—ืฉื•ื‘ ืžืื•ื“, ื‘ื•ื“ื“ ื•ืงื˜ืŸ ืฉืžืจื™ืฅ ืœื™ื ื•ืงืก. ื—ืฉื•ื‘ ืœื“ืขืช ืœืคื—ื•ืช ืคืขื ื‘ื™ื•ื ืฉื”ื•ื "ื—ื™" ื•ื‘ืžื™ื“ืช ื”ืฆื•ืจืš ื ืฉืœื—ื•ืช ืืœื™ื• ืคืงื•ื“ื•ืช, ืœืžืฉืœ "ืžื•ืชืง, ืืชื—ื•ืœ ืžื—ื“ืฉ!"

ื ืขื‘ื•ืจ ืœื™ื™ืฉื•ื:

1) ื‘ืฆื“ ื”ื ืชื‘, ื“ืจืš cron, ื›ืœ 5/10/1440 ื“ืงื•ืช, ืื• ืžืชื™ ืฉืชืจืฆื•, ืฆืจื™ืš ืœืฉืœื•ื— ื‘ืงืฉืช http ืœืฉืจืช ื‘ืืžืฆืขื•ืช wget, ืœืฉืžื•ืจ ืืช ืชื•ืฆืืช ื”ื‘ืงืฉื” ืœืงื•ื‘ืฅ, ืœื”ืคื•ืš ืืช ื”ืงื•ื‘ืฅ ืœื‘ืจ-ื”ืคืขืœื” , ื•ืœื‘ืฆืข ืื•ืชื•.

ืงื• ื”ืงืจื•ืŸ ืฉืœื™ ื ืจืื” ื‘ืขืจืš ื›ืš:

ืงื•ื‘ืฅ /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

, ืฉื‘ื•
xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai ื”ื•ื ื”ื“ื•ืžื™ื™ืŸ ืฉืœ ื”ืฉืจืช ืฉืœื™. ืชืŸ ืœื™ ืœืฆื™ื™ืŸ ืžื™ื“: ื›ืŸ, ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ื›ืชื•ื‘ืช IP ืกืคืฆื™ืคื™ืช ืฉืœ ื”ืฉืจืช, ื ื”ื’ื ื• ืœืขืฉื•ืช ื–ืืช ืขื“ ืฉื”ืžื“ื™ื ื” ืฉืœื ื•, ื‘ื“ื—ืฃ ืฆื“ืง ืฉืœ ืžืื‘ืง, ืื ื™ ืื’ื™ื“, ืื ื™ ืœื ื™ื•ื“ืข, ื—ืกืžื” ืืช ื”ื’ื™ืฉื” ืœืืจื™ื” ืฉืœ ื”ืืจื™ื”. ื ืชื— ื”"ืขื ื ื™ื" ืฉืœ DigitalOcean ื•ืืžื–ื•ืŸ. ืื ืืชื” ืžืฉืชืžืฉ ื‘ื“ื•ืžื™ื™ืŸ ืกืžืœื™, ืื ืžืชืจื—ืฉ ืื™ืจื•ืข ื›ื–ื”, ืืชื” ื™ื›ื•ืœ ื‘ืงืœื•ืช ืœื”ืขืœื•ืช ืขื ืŸ ื’ื™ื‘ื•ื™, ืœื”ืคื ื•ืช ืืช ื”ื“ื•ืžื™ื™ืŸ ืืœื™ื• ื•ืœืฉื—ื–ืจ ืืช ื ื™ื˜ื•ืจ ื”ืžื›ืฉื™ืจื™ื.

a.php ื”ื•ื ื”ืฉื ืฉืœ ื”ืกืงืจื™ืคื˜ ื‘ืฆื“ ื”ืฉืจืช. ื›ืŸ, ืื ื™ ื™ื•ื“ืข ืฉื–ื” ืœื ื ื›ื•ืŸ ืœืชืช ืฉื ืœืžืฉืชื ื™ื ื•ืฉืžื•ืช ืงื‘ืฆื™ื ื‘ืื•ืชื” ืื•ืช... ืื ื™ ืžืฆื™ืข ืฉื›ืš ื ื—ืกื•ืš ื›ืžื” ื‘ืชื™ื ื‘ืขืช ืฉืœื™ื—ืช ื‘ืงืฉื” :)
u - ืฉื ืžืฉืชืžืฉ, ื›ื ื™ืกื” ืœื—ื•ืžืจื”
p - ืกื™ืกืžื”
"-O /tmp/wa.sh" ื”ื•ื ืงื•ื‘ืฅ ื‘ื ืชื‘ ื”ืžืจื•ื—ืง ืฉื‘ื• ืชื™ืฉืžืจ ืชื’ื•ื‘ืช ื”ืฉืจืช, ืœืžืฉืœ ืคืงื•ื“ืช ืืชื—ื•ืœ ืžื—ื“ืฉ.

ื”ืขืจื” ืžืกืคืจ ืฉืชื™ื™ื: ืื”ื”ื”, ืœืžื” ืื ื—ื ื• ืžืฉืชืžืฉื™ื ื‘-wget ื•ืœื ื‘-curl, ื›ื™ ื“ืจืš curl ืืคืฉืจ ืœืฉืœื•ื— ื‘ืงืฉื•ืช https ืœื ืขื GET, ืืœื ืขื POST? ืื”ื”ื” ื›ื™, ื›ืžื• ื‘ื‘ื“ื™ื—ื” ื”ื™ืฉื ื” "NE ืžื˜ืคืก ืœืชื•ืš ื”ืฆื ืฆื ืช!" curl ื›ื•ืœืœ ืกืคืจื™ื•ืช ื”ืฆืคื ื” ื‘ื’ื•ื“ืœ ืฉืœ ื›-2MB, ื•ื‘ื’ืœืœ ื–ื” ืœื ืกื‘ื™ืจ ืฉืชืฆืœื™ื—ื• ืœื”ืจื›ื™ื‘ ืชืžื•ื ื” ืขื‘ื•ืจ TP-LINK ML3020 ืงื˜ืŸ, ืœืžืฉืœ. ื•ืขื wget - ื‘ื‘ืงืฉื”.

2) ื‘ืฆื“ ื”ืฉืจืช (ื™ืฉ ืœื™ ืื•ื‘ื•ื ื˜ื•) ื ืฉืชืžืฉ ื‘- Zabbix. ืœืžื”: ืื ื™ ืจื•ืฆื” ืฉื–ื” ื™ื”ื™ื” ื™ืคื” (ืขื ื’ืจืคื™ื) ื•ื ื•ื— (ืฉืœื— ืคืงื•ื“ื•ืช ื“ืจืš ืชืคืจื™ื˜ ื”ื”ืงืฉืจ). ืœ-Zabix ื™ืฉ ื“ื‘ืจ ื ืคืœื ื›ืžื• ืกื•ื›ืŸ ื”-zabbix. ื“ืจืš ื”ืกื•ื›ืŸ ื ืชืงืฉืจ ืœืกืงืจื™ืคื˜ PHP ื‘ืฉืจืช, ืฉื™ื—ื–ื™ืจ ืžื™ื“ืข ืœื’ื‘ื™ ื”ืื ื”ื ืชื‘ ืฉืœื ื• ื ืจืฉื ื‘ืคืจืง ื”ื–ืžืŸ ื”ื ื“ืจืฉ. ื›ื“ื™ ืœืื—ืกืŸ ืžื™ื“ืข ืขืœ ื–ืžืŸ ืจื™ืฉื•ื, ืคืงื•ื“ื•ืช ืœืžื›ืฉื™ืจื™ื, ืื ื™ ืžืฉืชืžืฉ ื‘-MySQL, ื˜ื‘ืœื” ื ืคืจื“ืช ืœืžืฉืชืžืฉื™ื ืขื ื‘ืขืจืš ื”ืฉื“ื•ืช ื”ื‘ืื™ื:

		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;

ื ื™ืชืŸ ืœื”ื•ืจื™ื“ ืืช ื›ืœ ื”ืžืงื•ืจื•ืช ืžืžืื’ืจ Git ื‘ื›ืชื•ื‘ืช: https://github.com/BazDen/iotnet.online.git
ื›ืขืช ืžืžื•ืงืžื™ื ืกืงืจื™ืคื˜ื™ื ืฉืœ PHP ื‘ืฆื“ ื”ืฉืจืช (ืœื ื•ื—ื•ืช, ื ื™ืชืŸ ืœืžืงื ืื•ืชื ื‘ืชื™ืงื™ื™ื” /usr/share/zabbix/):

ืงื•ื‘ืฅ 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();
	?>

ืงื•ื‘ืฅ Agent.php (ื–ื”ื• ื”ืกืงืจื™ืคื˜ ืฉืœ ื”ืกื•ื›ืŸ zabbix ืฉื ืงืจื):

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

ื•ื‘ื›ืŸ, ื”ืฉืœื‘ ื”ืื—ืจื•ืŸ: ืจื™ืฉื•ื ืกื•ื›ืŸ ื•ื”ื•ืกืคืช ืœื•ื—ื•ืช ื–ืžื ื™ื.

ืื ืขื“ื™ื™ืŸ ืœื ื”ืชืงื ืช ืืช ื”ืกื•ื›ืŸ zabbix, ืื–:

apt-get install zabbix-agent

ืขืจื•ืš ืืช ื”ืงื•ื‘ืฅ /etc/zabbix/zabbix_agentd.conf.

ื”ื•ืกืฃ ืืช ื”ืฉื•ืจื”:

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

, ืฉื‘ื•
ืžื‘ื—ืŸ ื”ื•ื ืฉืžื• ืฉืœ ื”ืกื•ื›ืŸ ืฉืœื ื•
"php /usr/share/zabbix/agent.php user password" - ืกืงืจื™ืคื˜ ืฉื ืงืจื ื”ืžืฆื™ื™ืŸ ืืช ื ืชื•ื ื™ ื”ืจื™ืฉื•ื ืฉืœ ื”ืžื›ืฉื™ืจ.

ื”ื•ืกืคืช ืชืจืฉื™ืžื™ื: ืคืชื— ืืช ืžืžืฉืง ื”ืื™ื ื˜ืจื ื˜ ืฉืœ zabbix, ื‘ื—ืจ ืžื”ืชืคืจื™ื˜:
ื”ื’ื“ืจื•ืช -> ืฆืžืชื™ ืจืฉืช -> ืฆื•ืจ ืฆื•ืžืช ืจืฉืช. ื›ืืŸ ืžืกืคื™ืง ืœืฆื™ื™ืŸ ืืช ืฉื ืžืืจื— ื”ืจืฉืช, ื”ืงื‘ื•ืฆื” ืฉืœื• ื•ืžืžืฉืง ื”ืกื•ื›ืŸ ื”ืžื•ื’ื“ืจ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ:

ื ื™ื˜ื•ืจ ื•ื‘ืงืจื” ืžืจื—ื•ืง ืฉืœ ื”ืชืงื ื™ื ืžื‘ื•ืกืกื™ Lunix/OpenWrt/Lede ื“ืจืš ื™ืฆื™ืื” 80...

ื›ืขืช ืขืœื™ื ื• ืœื”ื•ืกื™ืฃ ืืœืžื ื˜ ื ืชื•ื ื™ื ืขื‘ื•ืจ ืฆื•ืžืช ื”ืจืฉืช ื”ื–ื”. ืฉื™ืžื• ืœื‘ ืœืฉื ื™ ืฉื“ื•ืช: "ืžืคืชื—" - ื–ื” ื‘ื“ื™ื•ืง ื”ืคืจืžื˜ืจ ืฉื›ืชื‘ื ื• ื‘ืงื•ื‘ืฅ /etc/zabbix/zabbix_agentd.conf (ื‘ืžืงืจื” ืฉืœื ื• ื–ื” test), ื•-"ืžืจื•ื•ื— ืขื“ื›ื•ืŸ" - ืงื‘ืขืชื™ ืื•ืชื• ืœ-5 ื“ืงื•ืช , ื›ื™ ื•ื’ื ื”ืฆื™ื•ื“ ื ืจืฉื ื‘ืฉืจืช ืื—ืช ืœื—ืžืฉ ื“ืงื•ืช.

ื ื™ื˜ื•ืจ ื•ื‘ืงืจื” ืžืจื—ื•ืง ืฉืœ ื”ืชืงื ื™ื ืžื‘ื•ืกืกื™ Lunix/OpenWrt/Lede ื“ืจืš ื™ืฆื™ืื” 80...

ื•ื‘ื›ืŸ, ื‘ื•ืื• ื ื•ืกื™ืฃ ื’ืจืฃ. ืื ื™ ืžืžืœื™ืฅ ืœื‘ื—ื•ืจ "ืžื™ืœื•ื™" ื›ืกื’ื ื•ืŸ ื”ืขื™ื‘ื•ื“.

ื ื™ื˜ื•ืจ ื•ื‘ืงืจื” ืžืจื—ื•ืง ืฉืœ ื”ืชืงื ื™ื ืžื‘ื•ืกืกื™ Lunix/OpenWrt/Lede ื“ืจืš ื™ืฆื™ืื” 80...

ื”ืคืœื˜ ื”ื•ื ืžืฉื”ื• ืžืื•ื“ ืœืงื•ื ื™, ืœืžืฉืœ ื›ื›ื”:

ื ื™ื˜ื•ืจ ื•ื‘ืงืจื” ืžืจื—ื•ืง ืฉืœ ื”ืชืงื ื™ื ืžื‘ื•ืกืกื™ Lunix/OpenWrt/Lede ื“ืจืš ื™ืฆื™ืื” 80...

ืœืฉืืœื” ื”ืกื‘ื™ืจื”: "ื”ืื ื–ื” ื”ื™ื” ืฉื•ื•ื” ืืช ื–ื”?", ืืขื ื”: ื•ื‘ื›ืŸ, ื›ืžื•ื‘ืŸ, ืจืื” "ืกื™ื‘ื•ืช ืœื™ืฆื™ืจืช ืื•ืคื ื™ื™ื" ื‘ืชื—ื™ืœืช ื”ืžืืžืจ.

ืื ื”ื—ื•ื•ื™ื” ื”ื’ืจืคื•ืžื ื™ืช ื”ืจืืฉื•ื ื” ืฉืœื™ ืžืขื•ืจืจืช ืืช ืขื ื™ื™ืŸ ื”ืงื•ืจืื™ื, ืื– ื‘ืžืืžืจื™ื ื”ื‘ืื™ื ืื ื™ ืจื•ืฆื” ืœืชืืจ ื›ื™ืฆื“ ืœืฉืœื•ื— ืคืงื•ื“ื•ืช ืœืฆื™ื•ื“ ืžืจื•ื—ืง. ื›ืžื• ื›ืŸ, ื”ืฆืœื—ื ื• ืœื™ื™ืฉื ืืช ื›ืœ ื”ืกื›ื™ืžื” ืขื‘ื•ืจ ืžื›ืฉื™ืจื™ื ื”ืžื‘ื•ืกืกื™ื ืขืœ RouterOS (Mikrotik).

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”