Συνεχίστηκε η απομακρυσμένη παρακολούθηση και έλεγχος συσκευών Linux/OpenWrt/Lede μέσω της θύρας 80

Αυτό είναι το τελευταίο μέρος του άρθρου, εδώ είναι η αρχή habr.com/en/post/445568
Την τελευταία φορά που έγραψα για το πώς εφάρμοσα την παρακολούθηση συσκευών, τώρα θα μιλήσουμε για τη διαχείριση. Σε συζητήσεις με "τεχνικούς" από την πλευρά του Πελάτη, συναντώ συχνά μια περιορισμένη αντίληψη για τις δυνατότητες τέτοιων μικρών συσκευών (με χαμηλούς πόρους μνήμης και απόδοση), πολλοί πιστεύουν ότι "το μέγιστο που χρειαζόμαστε είναι να στείλουμε μια επανεκκίνηση , για κάτι πιο σοβαρό - θα στείλουμε ταξιαρχία» .
Αλλά η πρακτική δείχνει ότι αυτό δεν είναι απολύτως αλήθεια. Ακολουθεί μια μικρή λίστα κοινών τυπικών εργασιών:

  1. Διαγνωστικά και αντιμετώπιση προβλημάτων δικτύου. Πίσω από τη θύρα ethernet του δρομολογητή σας, συνήθως «ζει» ένα άλλο κομμάτι σιδήρου, το οποίο έχει τη δική του εσωτερική διεύθυνση IP. Μερικές φορές, μπορεί (πρέπει) να «πιναριστεί». Ή διαχείριση σήραγγας - εάν η σήραγγα δεν σηκωθεί ξαφνικά στο δρομολογητή που λειτουργεί μέσω του μόντεμ 3G, αλλά βλέπουμε τον ίδιο τον δρομολογητή.
  2. Υπηρεσία συστήματος. Ενημέρωση υλικολογισμικού, αναβάθμιση σεναρίων υπηρεσιών.
  3. Ισορροπίες. Αυτό θα μπορούσε να ονομαστεί "εκτροπές", αλλά η έννοια του "σχοινοβάτη" όπως, παραθέτω, «η ικανότητα ενός ερμηνευτή τσίρκου να διατηρεί ισορροπία σε ασταθή θέση σώματος» - ταιριάζει καλύτερα. Τέτοιες καταστάσεις προκύπτουν λόγω του περιορισμένου προϋπολογισμού του πελάτη. Έδωσα μερικά παραδείγματα παρακάτω, αλλά από τότε δεν σχετίζονται άμεσα με το θέμα της ιστορίας, τα βάζω στις σημειώσεις

παρακολούθηση wifiΈνα μοδάτο θέμα τα τελευταία πέντε χρόνια, κυρίως μεταξύ ομοσπονδιακών αλυσίδων λιανικής. Περπατάτε αργά στους ορόφους συναλλαγών και το κινητό σας τηλέφωνο με ενεργοποιημένο Wi-Fi, σε μια προσπάθεια να «κολλήσει» σε κάποιο νήμα του δικτύου, στέλνει τακτικά πακέτα αιτήματος ανίχνευσης που μπορούν να αναλυθούν για να υπολογιστούν για εσάς : πόσο συχνά έρχεστε σε αυτό το κατάστημα, για ποιες τροχιές περπατάτε και ούτω καθεξής. Περαιτέρω, τα δεδομένα συλλέγονται, αναλύονται, σχεδιάζονται χάρτες θερμότητας και οι διαχειριστές «χτυπούν» χρήματα από τη διοίκηση ή τους επενδυτές για τέτοιες εικόνες. Εν τω μεταξύ .... "δεν υπάρχουν λεφτά, αλλά κρατάτε...", και το αποτέλεσμα (πραγματικό) θα πρέπει ήδη να φανεί, το παλιό καλό τραγούδι "Ναι, ναι, τότε φυσικά θα προμηθευτούμε cisco και ό,τι θέλετε, αλλά τώρα πρέπει να δείξουμε στον Πελάτη το αποτέλεσμα! Παρεμπιπτόντως, ξέχασαν να πουν ότι ο Πελάτης επέτρεψε τη σύνδεση του εξοπλισμού μας στο hotspot του μέσω Wi-Fi, αλλά σε γενική βάση, σαν να ήμασταν guest πελάτες. Και τώρα πρέπει να φτιάξετε δρομολογητές ισορροπίας - πολλές υποδιεπαφές WiFi αυξάνονται, η μία από τις οποίες προσκολλάται στο hotspot και η δεύτερη παρακολουθεί το περιβάλλον, ξεφορτώνει μανιωδώς το αποτέλεσμα του tcpdump μέσα του και στη συνέχεια συσκευάζει τα περιεχόμενα του αρχείου σε ένα αρχείο και κινδυνεύει να πεθάνει από "υπερφαγία" προσπαθώντας να φτύσει το περιεχόμενο στον διακομιστή ftp. Δεν προκαλεί έκπληξη το γεγονός ότι ο δρομολογητής ισορροπίας συχνά «σπάει» και με κάποιο τρόπο πρέπει να «αναζωογονηθεί» εξ αποστάσεως.

ΑκτίναΕδώ είναι ευκολότερο να περιγράψουμε την κατάσταση με κάτι σαν αυτή τη δήλωση του πελάτη: «Θέλουμε ένα αποκεντρωμένο δίκτυο hotspot που θα λειτουργούσε σε εξοπλισμό του οποίου το μοντέλο δεν είναι γνωστό εκ των προτέρων, μέσω καναλιών, αλλά ποια δεν γνωρίζουμε ακόμη. Ω, ξεχάσαμε να πούμε, όχι μόνο θέλουμε να δείχνουμε διαφημίσεις στους πελάτες, αλλά και να αναλύουμε τα πάντα γύρω από την τοποθεσία εγκατάστασης του hotspot. Όχι, δεν ξέρουμε ακόμα γιατί, αλλά θα το καταλήξουμε, μην διστάσετε, μπορέσαμε να καταλήξουμε σε αυτήν την ιδέα.»

Και δεν πρέπει να ξεχνάμε ότι λόγω πολλών αβέβαιων συνθηκών εκ των προτέρων, η διαχείριση πρέπει να πραγματοποιείται σε μη τυπικές συνθήκες, όταν δεν μπορούμε να συνδεθούμε στο δρομολογητή απευθείας μέσω ip: port και αναγκαζόμαστε απλώς να περιμένουμε να εμφανιστεί η δραστηριότητα από το. Εάν κάνουμε αφηρημένα, τότε ο διάλογος μεταξύ διακομιστή και δρομολογητή μπορεί να αναπαρασταθεί ως εξής:

  • Router: Γειά σου. Είμαι ο τάδε ρούτερ, υπάρχουν εργασίες για μένα;
  • Διακομιστή: τάδε ρούτερ, σε κατέγραψα ότι είσαι ζωντανός. Εδώ είναι η πρόκληση: δείξε μου την έξοδο της εντολής ifconfig;
  • Router: Γειά σου. Είμαι τάδε ρούτερ, την τελευταία φορά που ζητήσατε να δείξετε το αποτέλεσμα του ifconfig, ορίστε. Υπάρχουν εργασίες για μένα;
  • Διακομιστή: τάδε ρούτερ, σε κατέγραψα ότι είσαι ζωντανός. Δεν υπάρχουν εργασίες για εσάς.

Η πιο ενδιαφέρουσα ερώτηση είναι: πώς μπορεί ένας απομακρυσμένος δρομολογητής να στείλει μια συγκεκριμένη ποσότητα πληροφοριών; Στο τελευταίο μέρος, περιέγραψα ότι ο δρομολογητής, λόγω περιορισμένων πόρων, έχει μόνο ένα "απογυμνωμένο" wget, το οποίο λειτουργεί μόνο μέσω GET και τίποτα άλλο, δεν υπάρχει ftp client ή curl. Πιο συγκεκριμένα, χρειαζόμαστε έναν καθολικό τρόπο, ανεξάρτητα από τα χαρακτηριστικά του συγκροτήματος εικόνας. Συμφώνησα να χρησιμοποιήσω το wget. Πιο συγκεκριμένα, πόσο "σταμάτησε" - απλά δεν είχα άλλη επιλογή 🙂

Άμεση κράτησηΗ λύση διαχείρισης μου λειτουργεί, όχι πολύ περιορισμένη, και είμαι σίγουρος ότι είναι στραβά, ακόμα κι αν ταιριάζει στους περισσότερους πελάτες μου. Πώς θα ήταν δυνατό να το κάνετε με σύνεση - γράψτε ένα μικρό βοηθητικό πρόγραμμα που στέλνει δυαδικά δεδομένα μέσω POST μέσω της 80ης θύρας. Συμπεριλάβετε το (βοηθητικό πρόγραμμα) στο υλικολογισμικό του δρομολογητή και χρησιμοποιήστε το bash για πρόσβαση σε αυτό. Αλλά η πραγματικότητα είναι ότι: α) πρέπει γρήγορα β) μάλλον πρέπει να κάνετε τα πάντα στον υπάρχοντα "ζωολογικό κήπο των δρομολογητών" γ) "μην κάνετε κακό!" - εάν ο δρομολογητής λειτουργεί και εκτελεί άλλες εργασίες, προσπαθήστε να κάνετε αλλαγές που δεν θα επηρεάσουν την υπάρχουσα λειτουργικότητα.

Ας περάσουμε στην υλοποίηση. Ας υποθέσουμε ότι ο πελάτης σας θέλει από το zabbix να κάνει επανεκκίνηση του δρομολογητή εύκολα και φυσικά, με ένα «κλικ» του ποντικιού. Σήμερα θα ξεκινήσουμε την περιγραφή της υλοποίησης με το zabbix.
Στο μενού "Διαχείριση" -> "Σενάρια" προσθέστε ένα νέο σενάριο. Το ονομάζουμε "Reboot", ως εντολή γράφουμε "php /usr/share/zabbix/reboot.php {HOST.HOST}"

Συνεχίστηκε η απομακρυσμένη παρακολούθηση και έλεγχος συσκευών Linux/OpenWrt/Lede μέσω της θύρας 80

Επόμενο: Μενού "Παρακολούθηση" -> "Τελευταία δεδομένα" -> "Κάντε δεξί κλικ στον επιθυμητό κεντρικό υπολογιστή". Έτσι θα φαίνεται το μενού μετά την προσθήκη του σεναρίου.

Συνεχίστηκε η απομακρυσμένη παρακολούθηση και έλεγχος συσκευών Linux/OpenWrt/Lede μέσω της θύρας 80
Αντίστοιχα, βάζουμε το σενάριο reboot.php στον κατάλογο /usr/share/zabbix (μπορεί να είναι διαφορετικό για εσάς, χρησιμοποιώ τον ριζικό κατάλογο zabbixa).

Αποποίηση ευθύνης για την ασφάλειαΓια λόγους σαφήνειας στο σενάριο, χρησιμοποιώ μόνο το αναγνωριστικό του δρομολογητή, αλλά δεν χρησιμοποιώ τον κωδικό πρόσβασης. Στην έκδοση εργασίας, αυτό δεν συνιστάται! Γιατί το έκανα αυτό: επειδή το μεγάλο ερώτημα είναι πού να αποθηκεύονται οι κωδικοί πρόσβασης για τους δρομολογητές; Στο ίδιο το zabbixe σε "απογραφή"; Αντιφατική πρακτική. Ως επιλογή: περιορίστε την εξωτερική πρόσβαση στο ίδιο το αρχείο reboot.php

αρχείο reboot.php

<?php
	// присваиваем параметры с консоли переменным
	$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");
			
	// "Отправляем" команду reboot за счет изменения поля task таблицы users. В поле task можно отправлять любую команду.
	$sql_users=$conn->prepare("UPDATE users SET task='reboot' WHERE id=? AND status='active';");
	$sql_users->bind_param('s', $user);
	$sql_users->execute();
	$sql_users->close();
?>

Στην πραγματικότητα τα πάντα. Το ερώτημα "πώς να λάβετε το αποτέλεσμα της εκτέλεσης της εντολής από την πλευρά της συσκευής" παραμένει ανοιχτό. Ας εξετάσουμε την εργασία χρησιμοποιώντας την εντολή ifconfig ως παράδειγμα. Η ακόλουθη εντολή μπορεί να σταλεί στη συσκευή:

message=`ifconfig`; wget "http://xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php?u=user&p=password!&m=$message" -O /tmp/out.txt

, όπου:
message=`ifconfig` - εκχωρούμε το αποτέλεσμα της εξόδου της εντολής ifconfig στη μεταβλητή $message
wget "xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php - το σενάριο a.php που καταχωρεί δρομολογητές και λαμβάνει μηνύματα από αυτούς
u=user&p=password!&m=$μήνυμα - διαπιστευτήρια και η τιμή της μεταβλητής ερωτήματος m - εκχωρεί τα περιεχόμενα της μεταβλητής $message
-O /tmp/out.txt - δεν χρειαζόμαστε έξοδο στο αρχείο /tmp/out.txt σε αυτήν την περίπτωση, αλλά εάν αυτή η παράμετρος δεν έχει καθοριστεί, το wget δεν λειτουργεί

Γιατί αυτό δεν λειτουργεί σωστάΕπειδή είναι μια πιθανή τρύπα ασφαλείας. το πιο αβλαβές λάθος που μπορεί να συμβεί είναι εάν η έξοδος της εντολής σας, για παράδειγμα, περιέχει το σύμβολο "&". Επομένως, είναι απαραίτητο να φιλτράρετε όλα όσα αποστέλλονται από τους δρομολογητές και όλα όσα έρχονται στον διακομιστή. Ναι, πραγματικά ντρέπομαι. Προς υπεράσπισή μου, μπορώ μόνο να γράψω ότι ολόκληρο το άρθρο είναι αφιερωμένο στον τρόπο διαχείρισης δρομολογητών με απροσδιόριστο υλικολογισμικό, με ακαθόριστα κανάλια επικοινωνίας.

Λοιπόν, έχω αγγίξει το μέλλον: δεν έχω καταλάβει ακόμη πώς να αντικατοπτρίζω τα αποτελέσματα (για παράδειγμα, το αποτέλεσμα μιας εκτέλεσης εντολής) που έρχονται στον διακομιστή χρησιμοποιώντας τυπικά εργαλεία zabbix.

Σας υπενθυμίζω ότι όλες οι πηγές μπορούν να ληφθούν από το αποθετήριο Git στη διεύθυνση: github.com/BazDen/iotnet.online.git

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο