ืฉืืื ืืืืื, ืื ืืืชื ืกืืช ืืจืืฉืื ื ืฉืื ื-Habrรฉ. ืื ื ืจืืฆื ืืืชืื ืขื ืืื ืื ืื ืฆืืื ืจืฉืช ืืจืฉืช ืืืฆืื ืืช ืืฆืืจื ืื ืกืื ืืจืืืช. ืื ืืืฉืืขืืช ืฉื ืื ืกืื ืืจืื: ืืจืื ืืืงืจืื, ืืื ืื ืื ืฆืืื ืืจืฉืช ืืืฆืื ืืช ืืชื ืฆืจืื:
- ืืชืืืช IP ืฆืืืืจืืช. ืืืื, ืื ืื ืืฆืืื ื ืืฆื ืืืืืจื ื-NAT ืฉื ืืืฉืื, ืื IP ืฆืืืืจื ืืืฆืืื "ืืืขืืจืช".
- ืื ืืจื (PPTP/OpenVPN/L2TP+IPSec ืืื') ืืฆืืืช ืืืจืืื ืฉืืจืื ืืืื ื ืืืฉ.
ืืื, ืชืืืงืง ื"ืืืคื ืืื ืฉืื" ืืืฉืจ ืืฉืืืืช ืืกืื ืืจืืืืช ืืื ื ืืชืืืืืช ืื, ืืืฉื:
- ืืฆืืื ืืืืงื ืืืืืจื NAT โโืืืืฅ ืื-http ืืจืืื (ืืฆืืื 80), ืืื ืกืืืจ. ืืื ืืฆื ื ืืจืืื ืืืืืืื ืขืืืจ ืจืฉืชืืช ืืจืืื ืืืช ืคืืจืืืืช ืืืืืืช. ืื ืืืืืื ืืจืฉืื ืืฆืืืืช, ืืื ืื ืืื, ืื ืืืจ, ืืื ืืฉืืืื.
- ืขืจืืฅ ืชืงืฉืืจืช ืื ืืฆืื ื/ืื "ืฆืจ". ืืืืจืืช ื ืืืื, ืืคืกืืื ืงืืืขืื. ืืื ืืชืกืืื ืืืฉืจ ืื ืกืื ืืืจืื ืื ืืจื.
- ืขืจืืฅ ืชืงืฉืืจืช ืืงืจ, ืฉืื ืืืฉ ืื ืืื ืืืื ื ืืฉื. ืืืฉื, ืชืงืฉืืจืช ืืืืืื ืืช. ืื ืืกืฃ ืขืืืืืื ืืจืืืื ืืจืฆืืขื "ืฆืจื".
- ืืฆื ืฉืื ืฆืจืื "ืืืื" ืืกืคืจ ืจื ืฉื ื ืชืืื ืงืื ืื, ืขืืืื ืืืชืงื ืืฆื ืืื 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 ืืืชืืืช:
ืืขืช ืืืืงืืื ืกืงืจืืคืืื ืฉื 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, ืืืจ ืืืชืคืจืื:
ืืืืจืืช -> ืฆืืชื ืจืฉืช -> ืฆืืจ ืฆืืืช ืจืฉืช. ืืื ืืกืคืืง ืืฆืืื ืืช ืฉื ืืืจื ืืจืฉืช, ืืงืืืฆื ืฉืื ืืืืฉืง ืืกืืื ืืืืืืจ ืืืจืืจืช ืืืื:
ืืขืช ืขืืื ื ืืืืกืืฃ ืืืื ื ื ืชืื ืื ืขืืืจ ืฆืืืช ืืจืฉืช ืืื. ืฉืืื ืื ืืฉื ื ืฉืืืช: "ืืคืชื" - ืื ืืืืืง ืืคืจืืืจ ืฉืืชืื ื ืืงืืืฅ /etc/zabbix/zabbix_agentd.conf (ืืืงืจื ืฉืื ื ืื test), ื-"ืืจืืื ืขืืืื" - ืงืืขืชื ืืืชื ื-5 ืืงืืช , ืื ืืื ืืฆืืื ื ืจืฉื ืืฉืจืช ืืืช ืืืืฉ ืืงืืช.
ืืืื, ืืืื ื ืืกืืฃ ืืจืฃ. ืื ื ืืืืืฅ ืืืืืจ "ืืืืื" ืืกืื ืื ืืขืืืื.
ืืคืื ืืื ืืฉืื ืืืื ืืงืื ื, ืืืฉื ืืื:
ืืฉืืื ืืกืืืจื: "ืืื ืื ืืื ืฉืืื ืืช ืื?", ืืขื ื: ืืืื, ืืืืื, ืจืื "ืกืืืืช ืืืฆืืจืช ืืืคื ืืื" ืืชืืืืช ืืืืืจ.
ืื ืืืืืื ืืืจืคืืื ืืช ืืจืืฉืื ื ืฉืื ืืขืืจืจืช ืืช ืขื ืืื ืืงืืจืืื, ืื ืืืืืจืื ืืืืื ืื ื ืจืืฆื ืืชืืจ ืืืฆื ืืฉืืื ืคืงืืืืช ืืฆืืื ืืจืืืง. ืืื ืื, ืืฆืืื ื ืืืืฉื ืืช ืื ืืกืืืื ืขืืืจ ืืืฉืืจืื ืืืืืกืกืื ืขื RouterOS (Mikrotik).
ืืงืืจ: www.habr.com