Sanibonani nonke, lokhu kuyinto yami yokuqala ku-Habré. Ngifuna ukubhala ngendlela yokuphatha imishini yenethiwekhi kunethiwekhi yangaphandle ngendlela engajwayelekile. Kusho ukuthini okungajwayelekile: ezikhathini eziningi, ukuphatha okokusebenza kunethiwekhi yangaphandle udinga:
- Ikheli lasesizindeni se-intanethi. Hhayi-ke, noma uma okokusebenza kungemuva kwe-NAT yomuntu othile, bese kuba yi-IP yomphakathi kanye nembobo "edluliselwe phambili".
- Umhubhe (PPTP/OpenVPN/L2TP+IPSec, njll.) oya endaweni emaphakathi lapho ezofinyeleleka khona.
Ngakho-ke, uzodinga "ibhayisikili lami" lapho izindlela ezijwayelekile zingahambisani nawe, isibonelo:
- Imishini itholakala ngemuva kwe-NAT futhi, ngaphandle kwe-http evamile (port 80), konke kuvaliwe. Lesi isimo esijwayelekile ngokuphelele samanethiwekhi amakhulu ezinkampani zombuso. Bangakwazi ukubhalisa amachweba, kodwa hhayi ngokushesha, hhayi ngokushesha, futhi hhayi ngawe.
- Isiteshi sokuxhumana esingazinzile kanye/noma “esincane”. Isivinini esiphansi, ukulahlekelwa okuqhubekayo. Ubuhlungu nokukhungatheka lapho uzama ukuhlela umhubhe.
- Isiteshi sokuxhumana esibizayo, lapho ngokoqobo wonke ama-megabyte ebalwa. Isibonelo, ukuxhumana ngesathelayithi. Kanye nokulibaziseka okude kanye nebhendi "encane".
- Isimo lapho udinga "ukuguqula" inani elikhulu lamarutha amancane, lapho, ngakolunye uhlangothi, i-OpenWrt/Lede ifakwe ukuze kwandiswe amakhono, futhi ngakolunye uhlangothi, izinsiza (inkumbulo) yomzila azanele. kukho konke.
Qaphela izikhathi zezinombolo Yini ekuvimbela ukuthi ufake i-flash drive embotsheni ye-USB yerutha futhi wandise inkumbulo yomzila?
Ezikhathini eziningi, izidingo zingezezindleko zesixazululo sisonke, kodwa ngezinye izikhathi isici sefomu sidlala indima ebalulekile. Isibonelo, kukhona i-TP-Link ML3020 esizeni, imbobo yayo kuphela ye-USB isetshenziselwa imodemu ye-2G/3G, konke lokhu kugoqwe ohlotsheni oluthile lwebhokisi lepulasitiki elincane futhi libekwe endaweni ethile phezulu, phezulu (ku-mast), kude, kude (insimu, 30 km ukusuka esiteshini esiseduze sika-opharetha weselula). Yebo, ungakwazi ukuxhuma ihabhu le-USB futhi wandise inombolo yezimbobo, kodwa ulwazi lubonisa ukuthi lokhu kunzima futhi akuthembeki.
Ngakho-ke, ngizamile ukukuchazela isimo sami esijwayelekile: “Ndaweni ethile ekude, kude, kunerutha ebaluleke kakhulu, enesizungu futhi encane esebenzisa i-Linux. Kubalulekile ukwazi okungenani kanye ngosuku ukuthi "uyaphila" futhi, uma kunesidingo, imiyalo ithunyelwa kuye, isibonelo, "uju, qala kabusha!"
Masiqhubekele ekusetshenzisweni:
I-1) Ohlangothini lwe-router, nge-cron, njalo ngemizuzu engu-5/10/1440, noma nini lapho ufuna, udinga ukuthumela isicelo se-http kuseva usebenzisa i-wget, gcina umphumela wesicelo efayeleni, wenze ifayela lisebenze. , futhi ukwenze.
Ulayini wami we-cron ubukeka kanjena:
Ifayela /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
, lapho:
I-xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai isizinda seseva yami. Ake ngiphawule ngokushesha: yebo, ungacacisa ikheli elithile le-IP leseva, sasivame ukwenza lokhu kuze kube yilapho isimo sethu, ngomfutho olungile womzabalazo, ngizothi, angazi, ngivimbe ukufinyelela kwengonyama. isabelo se-DigitalOcean ne-Amazon "amafu". Uma usebenzisa isizinda esingokomfanekiso, uma kwenzeka isigameko esinjalo, ungakwazi ukuphakamisa kalula ifu eliyisipele, uqondise kabusha isizinda kuso futhi ubuyisele ukugadwa kwedivayisi.
i-a.php igama lesikripthi sohlangothi lweseva. Yebo, ngiyazi ukuthi akulungile ukusho okuguquguqukayo namagama wamafayela anohlamvu olufanayo... Ngiphakamisa ukuthi ngale ndlela silondoloze amabhayithi ambalwa lapho sithumela isicelo :)
u - igama lomsebenzisi, ukungena kwehadiwe
p - iphasiwedi
I-“-O /tmp/wa.sh” iyifayela kurutha ekude lapho impendulo yeseva, isibonelo umyalo wokuqalisa kabusha, izogcinwa khona.
Qaphela inombolo yesibili: Ahhh, kungani sisebenzisa i-wget hhayi i-curl, ngoba nge-curl ungathumela izicelo ze-https hhayi nge-GET, kodwa nge-POST? Ahhh ngoba, njengasehlayeni elidala elithi “NE ugibela embizeni!” i-curl ihlanganisa amalabhulali okubhala ngemfihlo angaba ngu-2MB ngobukhulu futhi ngenxa yalokhu mancane amathuba okuthi ukwazi ukuhlanganisa isithombe se-TP-LINK ML3020 encane, isibonelo. Futhi nge-wget - sicela.
2) Ohlangothini lweseva (nginobuntu) sizosebenzisa i-Zabbix. Kungani: Ngifuna ibe yinhle (namagrafu) futhi ibe lula (thumela imiyalo ngemenyu yokuqukethwe). I-Zabbix inento emangalisayo njenge-ejenti ye-zabbix. Nge-ejenti, sizobiza iskripthi se-PHP kuseva, esizobuyisela ulwazi mayelana nokuthi umzila wethu ubhalisiwe yini phakathi nesikhathi esidingekayo. Ukugcina ulwazi mayelana nesikhathi sokubhalisa, imiyalo yamadivayisi, ngisebenzisa i-MySQL, abasebenzisi betafula abahlukene abanezinkambu cishe ezilandelayo:
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;
Yonke imithombo ingalandwa endaweni yokugcina ye-Git ku:
Manje imibhalo ye-PHP ibekwe ohlangothini lweseva (ukuze kube lula, ingafakwa kufolda /usr/share/zabbix/):
ifayela le-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();
?>
Ifayela le-agent.php (lesi iskripthi somenzeli we-zabbix esibizwa):
<?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();
?>
Nokho, isigaba sokugcina: ukubhalisa i-ejenti nokwengeza amashejuli.
Uma ungakayifaki i-ejenti ye-zabbix, khona-ke:
apt-get install zabbix-agent
Hlela ifayela /etc/zabbix/zabbix_agentd.conf.
Engeza umugqa:
UserParameter=test,php /usr/share/zabbix/agent.php user password
, lapho:
test igama le-ejenti yethu
“php /usr/share/zabbix/agent.php iphasiwedi yomsebenzisi” - iskripthi esibizwa esibonisa idatha yokubhaliswa kwedivayisi.
Ukwengeza amashadi: vula i-zabbix web interface, khetha kumenyu:
Izilungiselelo -> Amanodi enethiwekhi -> Dala indawo yenethiwekhi. Lapha kwanele ukucacisa igama lomsingathi wenethiwekhi, iqembu lakhe, kanye nesixhumi esibonakalayo se-ejenti esizenzakalelayo:
Manje sidinga ukwengeza i-elementi yedatha yale nodi yenethiwekhi. Naka izinkambu ezimbili: “ukhiye” - lena kanye ipharamitha esiyibhale kufayela /etc/zabbix/zabbix_agentd.conf (kithi isivivinyo), kanye “nesikhathi sokubuyekeza” - ngiyibeke kumaminithi angu-5 , ngoba futhi imishini ibuye ibhaliswe kuseva kanye njalo ngemizuzu emihlanu.
Awu, ake sengeze igrafu. Ngincoma ukukhetha okuthi "Gcwalisa" njengesitayela sokunikeza.
Okukhiphayo kuyinto e-laconic kakhulu, isibonelo kanje:
Embuzweni onengqondo: "ingabe bekufanelekile?", Ngizophendula: kahle, bheka, "izizathu zokudala ibhayisikili" ekuqaleni kwalesi sihloko.
Uma isipiliyoni sami sokuqala se-graphomaniac sivusa isithakazelo sabafundi, khona-ke ezihlokweni ezilandelayo ngifuna ukuchaza indlela yokuthumela imiyalo kumishini ekude. Siphinde sakwazi ukusebenzisa lonke uhlelo lwamadivayisi asekelwe ku-RouterOS (Mikrotik).
Source: www.habr.com