Pemantauan jarak jauh dan pengelolaan perangkat berbasis Linux/OpenWrt/Lede melalui port 80, dilanjutkan

Ini adalah bagian akhir artikel, ini awalnya habr.com/en/post/445568
Terakhir kali saya menulis tentang cara saya menerapkan pemantauan perangkat, sekarang kita akan membahas tentang manajemen. Dalam diskusi dengan “teknisi” di pihak Pelanggan, saya sering menemukan persepsi terbatas tentang kemampuan perangkat kecil tersebut (dengan sumber daya memori dan kinerja rendah), banyak yang percaya bahwa “yang paling kita perlukan adalah mengirimkan reboot, untuk sesuatu yang lebih serius kami akan mengirimkan tim”.
Namun praktik menunjukkan bahwa hal ini tidak sepenuhnya benar. Berikut adalah daftar kecil tugas umum yang umum:

  1. Diagnostik jaringan dan pemecahan masalah. Di balik port ethernet router Anda biasanya terdapat perangkat keras lain yang memiliki alamat IP internalnya sendiri. Terkadang, Anda dapat (harus) melakukan "ping". Atau manajemen terowongan - jika terowongan tiba-tiba tidak muncul di router yang beroperasi melalui modem 3G, tetapi kita dapat melihat router itu sendiri.
  2. Perbaikan sistem. Pembaruan firmware, peningkatan skrip layanan.
  3. Usaha menyeimbangkan. Ini bisa disebut “penyimpangan”, tapi konsep “keseimbangan” seperti, saya kutip, “kemampuan seorang pemain sirkus untuk menjaga keseimbangan dalam posisi tubuh yang tidak stabil” - lebih cocok. Situasi seperti ini muncul karena terbatasnya anggaran pelanggan. Di bawah ini saya memberikan beberapa contoh, tapi... Tidak berhubungan langsung dengan tema cerita, saya cantumkan di catatan

Pemantauan Wi-FiSebuah topik yang populer selama lima tahun terakhir, terutama di kalangan jaringan ritel federal. Anda berjalan santai melalui lantai perdagangan, dan ponsel Anda dengan Wi-Fi dihidupkan, dalam upaya untuk "menempel" ke beberapa rangkaian jaringan, secara teratur mengirimkan paket Permintaan Probe, yang dapat dianalisis untuk menghitung kamu: seberapa sering kamu datang ke toko ini, untuk alasan apa? kamu berjalan mengikuti lintasan dan sebagainya. Kemudian data dikumpulkan, dianalisis, peta panas dibuat, dan manajer “memeras” uang dari manajemen atau investor untuk gambar tersebut. Nah, untuk saat ini.... "tidak ada uang, tapi kamu bertahan...", dan hasilnya (nyata) sudah perlu ditunjukkan, lagu lama yang bagus dimulai: "Ya, ya, maka tentu saja kita akan menginstal cis dan semua yang Anda inginkan, tetapi sekarang kita perlu menunjukkan hasilnya kepada Pelanggan! Ngomong-ngomong, kami lupa mengatakan bahwa Pelanggan mengizinkan kami menghubungkan peralatan kami ke hotspotnya melalui Wi-Fi, namun secara umum, sama seperti kami adalah klien tamu.” Jadi kita harus membuat router penyeimbang - beberapa subinterface WiFi dimunculkan, salah satunya menempel ke hotspot, dan yang kedua memantau lingkungan, dengan panik mengunggah hasil tcpdump ke dirinya sendiri, lalu mengemas konten file ke dalam arsip dan risiko sekarat karena “makan berlebihan” mencoba memuntahkan konten di server FTP. Tidak mengherankan jika router penyeimbang sering kali “rusak” dan entah bagaimana harus “dihidupkan kembali” dari jarak jauh.

RadiusLebih mudah untuk menggambarkan situasi di sini dengan pernyataan seperti ini dari pelanggan: “Kami menginginkan jaringan hotspot terdesentralisasi yang dapat bekerja pada peralatan yang modelnya belum diketahui sebelumnya, melalui saluran, namun mana yang belum kami ketahui. Oh, kami lupa bilang, kami tidak hanya ingin menampilkan iklan kepada klien, tapi juga menganalisis segala sesuatu di sekitar lokasi pemasangan hotspot. Tidak, kami belum tahu kenapa, tapi kami akan mencari tahu, jangan ragu, kami bisa mendapatkan ide ini.”

Dan kita tidak boleh lupa bahwa karena banyak keadaan yang sebelumnya tidak diketahui, kontrol harus dilakukan dalam kondisi non-standar, ketika kita tidak dapat terhubung ke router secara langsung melalui port IP: dan terpaksa menunggu aktivitas darinya. Jika kita abstrak, dialog antara server dan router dapat direpresentasikan seperti ini:

  • Router: Halo. Saya adalah router ini dan itu, apakah ada tugas untuk saya?
  • Server: router ini dan itu, saya mendaftarkan Anda, bahwa Anda masih hidup. Inilah tantangannya: tunjukkan hasil dari perintah ifconfig?
  • Router: Halo. Saya router ini dan itu, terakhir kali Anda meminta untuk menunjukkan hasil ifconfig, ini dia. Apakah ada tugas untuk saya?
  • Server: router ini dan itu, saya mendaftarkan Anda, bahwa Anda masih hidup. Tidak ada tugas untuk Anda.

Pertanyaan paling menarik: bagaimana router jarak jauh dapat mengirimkan sejumlah informasi tertentu? Pada bagian terakhir, saya menjelaskan bahwa karena sumber daya yang terbatas, router hanya memiliki wget yang "dipreteli", yang hanya berfungsi melalui GET dan tidak ada yang lain; tidak ada klien FTP atau curl. Lebih tepatnya, kita memerlukan metode universal, terlepas dari fitur perakitan gambar. Saya memutuskan untuk menggunakan wget. Lebih tepatnya, bagaimana saya “berhenti” - saya tidak punya pilihan :)

Hanya penafianSolusi manajemen saya berhasil, tidak terlalu terbatas, dan saya yakin solusi tersebut tidak tepat, meskipun solusi tersebut cocok untuk sebagian besar pelanggan saya. Bagaimana Anda bisa melakukannya dengan bijak - tulis utilitas kecil yang mengirimkan data biner POST melalui port 80. Sertakan (utilitas) di firmware router dan akses menggunakan bash. Namun kenyataannya adalah: a) kita harus segera b) kita mungkin perlu melakukan segala sesuatu di “kebun binatang router” yang ada c) “jangan menyakiti!” — jika router berfungsi dan melakukan tugas lain, cobalah melakukan perubahan yang tidak akan mempengaruhi fungsi yang ada.

Mari kita beralih ke implementasi. Katakanlah pelanggan Anda ingin me-reboot router dari zabbix dengan mudah dan alami, hanya dengan “klik mouse”. Hari ini kita akan mulai menjelaskan implementasinya dengan Zabbix.
Di menu “Administrasi” -> “Skrip”, tambahkan skrip baru. Kami menyebutnya “Reboot”, masukkan “php /usr/share/zabbix/reboot.php {HOST.HOST}” sebagai perintah

Pemantauan jarak jauh dan pengelolaan perangkat berbasis Linux/OpenWrt/Lede melalui port 80, dilanjutkan

Berikutnya: Menu “Monitoring” -> “Data terbaru” -> “Klik kanan pada node jaringan yang diinginkan.” Seperti inilah tampilan menu setelah menambahkan skrip.

Pemantauan jarak jauh dan pengelolaan perangkat berbasis Linux/OpenWrt/Lede melalui port 80, dilanjutkan
Oleh karena itu, skrip reboot.php kami letakkan di direktori /usr/share/zabbix (milik Anda mungkin berbeda, saya menggunakan direktori root zabbixa).

Penafian KeamananAgar penjelasan di script lebih jelas, saya hanya menggunakan router id saja, tidak menggunakan password. Tidak disarankan melakukan ini dalam versi produksi! Mengapa saya melakukan ini: karena pertanyaan besarnya adalah di mana menyimpan kata sandi untuk router? Di zabbixe sendiri di “data inventaris”? Praktek kontroversial. Alternatifnya: batasi akses eksternal ke file reboot.php itu sendiri

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

Itu saja. Pertanyaannya tetap terbuka: “bagaimana mendapatkan hasil pelaksanaan perintah dari perangkat.” Mari kita lihat tugas menggunakan perintah ifconfig sebagai contoh. Perintah ini dapat dikirim ke perangkat:

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

, di mana:
pesan=`ifconfig` — kita menugaskan hasil keluaran perintah ifconfig ke variabel $message
dapatkan "xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — skrip a.php kami yang mendaftarkan router dan menerima pesan dari mereka
u=pengguna&p=kata sandi!&m=$pesan — kredensial dan nilai variabel permintaan m — menetapkan konten variabel $message
-O /tmp/keluar.txt — kita tidak memerlukan output ke file /tmp/out.txt dalam kasus ini, tetapi jika parameter ini tidak ditentukan, wget tidak akan berfungsi

Mengapa ini tidak berhasil?Karena ini berpotensi menjadi celah keamanan. Kesalahan paling tidak berbahaya yang dapat terjadi adalah jika, misalnya, ada karakter “&” di output perintah Anda. Oleh karena itu, perlu untuk menyaring semua yang dikirim dari router dan semua yang masuk ke server. Ya, aku malu, sungguh. Dalam pembelaan saya, saya hanya dapat menulis bahwa keseluruhan artikel dikhususkan untuk cara mengelola router dengan firmware yang telah ditentukan sebelumnya dan saluran komunikasi yang tidak ditentukan sebelumnya.

Nah, permulaan untuk masa depan: Saya belum menemukan cara menggunakan alat zabbix standar untuk mencerminkan hasil (misalnya, hasil menjalankan perintah) yang datang ke server.

Saya mengingatkan Anda bahwa semua sumber dapat diperoleh dari repositori Git di: github.com/BazDen/iotnet.online.git

Sumber: www.habr.com

Tambah komentar