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

Ini adalah bagian akhir dari artikel ini, ini adalah awalnya .

Terakhir kali saya menulis tentang bagaimana saya menerapkan pemantauan perangkat, sekarang kita akan fokus pada manajemen. Dalam diskusi dengan "teknisi" pada bagian Pelanggan, saya sering menemukan persepsi terbatas tentang kemampuan perangkat kecil tersebut (dengan sumber daya memori rendah dan kinerja), banyak orang berpikir bahwa "maksimum yang kami butuhkan adalah mengirim reboot, untuk sesuatu yang lebih serius - kami akan mengirim tim" .

Tetapi latihan menunjukkan bahwa ini tidak sepenuhnya benar.

Berikut adalah daftar singkat dari tugas umum yang umum:

  1. Diagnosis dan pemecahan masalah jaringan. Di belakang port ethernet router Anda, perangkat keras lain biasanya memiliki alamat IP internal sendiri. Terkadang, itu bisa (perlu) "ping". Atau manajemen terowongan - jika router yang tidak tiba-tiba naik pada router yang berjalan melalui modem 3G, tetapi kita melihat router itu sendiri.
  2. Layanan sistem. Pembaruan firmware, peningkatan skrip layanan.
  3. Tindakan penyeimbangan. Ini bisa disebut "penyimpangan", tetapi konsep "penyeimbang" seperti, saya kutip, "kemampuan seorang seniman sirkus untuk menjaga keseimbangan dalam posisi tubuh yang tidak stabil" lebih cocok. Situasi serupa muncul karena terbatasnya anggaran pelanggan. Berikut adalah beberapa contoh, tetapi karena mereka tidak memiliki hubungan langsung dengan subjek narasi, taruh dalam catatan

Pemantauan wifi
Topik modis selama lima tahun terakhir terutama di antara rantai ritel federal. Anda berjalan perlahan melalui lantai perdagangan, dan ponsel Anda dengan Wi-Fi dihidupkan dalam upaya untuk "menempel" ke beberapa utas jaringan secara teratur mengirimkan paket Permintaan Probe yang dapat dianalisis untuk menghitung seberapa sering Anda datang ke toko ini, untuk apa berjalan lintasan dan sebagainya. Kemudian data dikumpulkan, dianalisis, peta panas diambil dan manajer untuk gambar-gambar seperti "knock out" uang dari manajemen atau investor. Sementara itu .... "tidak ada uang, tetapi Anda tunggu ...", dan hasilnya (nyata) harus sudah ditampilkan, lagu lama yang baik termasuk "Ya, ya, maka tentu saja kita akan meletakkan tsiska dan apa pun yang kita inginkan, tetapi sekarang kita perlu tunjukkan pada pelanggan hasilnya! Ngomong-ngomong, mereka lupa mengatakan bahwa Pelanggan mengizinkan peralatan kami terhubung ke hotspot-nya melalui Wi-Fi, tetapi secara umum, itu sama seperti kita adalah klien tamu. " Dan sekarang Anda harus membuat router-balancers - beberapa subfaces WiFi naik, salah satunya menempel pada hotspot, dan yang kedua memonitor lingkungan, dengan panik membongkar hasil tcpdump ke dalam dirinya sendiri, lalu isi file tersebut dikemas ke dalam arsip dan berisiko mati karena "makan berlebihan" mencoba memuntahkan konten di server ftp. Tidak mengherankan bahwa router-balancer sering "rusak" dan entah bagaimana harus disusupkan dari jarak jauh.

Radius
Di sini lebih mudah untuk menggambarkan situasi dengan sesuatu seperti pernyataan ini oleh pelanggan: “Kami menginginkan jaringan hotspot yang terdesentralisasi yang bekerja pada peralatan yang modelnya tidak diketahui sebelumnya, melalui saluran, tetapi kami belum tahu yang mana. Ah, mereka lupa mengatakan, kami tidak hanya ingin menampilkan iklan kepada pelanggan, tetapi juga menganalisis segala sesuatu di sekitar tempat pemasangan hotspot. Tidak, kami belum tahu mengapa, tapi kami akan datang, jangan ragu, kami dapat menemukan ide ini "

Dan kita tidak boleh lupa bahwa karena banyak keadaan yang tidak menentu sebelumnya, kontrol harus dilakukan dalam kondisi non-standar, ketika kita tidak dapat terhubung ke router langsung melalui ip: port dan dipaksa untuk hanya menunggu aktivitas darinya. Jika kita mengabaikannya, maka dialog antara server dan router dapat direpresentasikan seperti ini:

  • Router : hai. Saya router seperti itu, apakah ada tugas untuk saya?
  • Server : router ini dan itu saya daftarkan Anda bahwa Anda masih hidup. Inilah tugasnya: tunjukkan pada saya hasil dari perintah ifconfig?
  • Router : hai. Saya seperti router, terakhir kali Anda meminta saya untuk menunjukkan hasil ifconfig, ini dia. Apakah ada tugas untuk saya?
  • Server : router ini dan itu saya daftarkan Anda bahwa Anda masih hidup. Tidak ada tugas untuk Anda.

Pertanyaan yang paling menarik: bagaimana sebuah remote router dapat mengirimkan sejumlah informasi? Pada bagian terakhir, saya menggambarkan bahwa pada router karena sumber daya yang terbatas hanya ada "stripped down" wget yang hanya berfungsi melalui GET dan tidak ada yang lain, tidak ada ftp client atau curl. Lebih tepatnya, kita membutuhkan cara universal, terlepas dari fitur perakitan gambar. Saya memutuskan untuk menggunakan wget. Lebih tepatnya, bagaimana saya "berhenti" - Saya tidak punya pilihan :)

Segera reservasi
Solusi manajemen saya berfungsi, tetapi sangat terbatas dan saya yakin itu bengkok, bahkan jika itu cocok untuk sebagian besar pelanggan saya. Bagaimana mungkin melakukannya dengan bijak - untuk menulis utilitas kecil yang mengirim data biner melalui port ke-80. Masukkan (utilitas) dalam firmware router dan gunakan bash untuk mengaksesnya. Tetapi kenyataannya adalah: a) Anda harus cepat b) mungkin Anda perlu melakukan segala sesuatu di "router zoo" yang ada c) "jangan membahayakan!" - jika router bekerja dan melakukan tugas-tugas lain, cobalah untuk membuat perubahan yang akan mempengaruhi fungsionalitas yang ada.

Mari beralih ke implementasi. Katakanlah pelanggan Anda inginkan dari zabbix untuk mem-boot ulang router dengan mudah dan alami, dengan "klik mouse." Hari ini kita akan memulai deskripsi implementasi dengan zabbiksa.

Dalam menu "Administrasi" -> "Skrip" tambahkan skrip baru. Kami menyebutnya "Reboot", seperti perintah yang kami tulis "php /usr/share/zabbix/reboot.php {HOST.HOST}"



Selanjutnya: Menu "Pemantauan" -> "Data terbaru" -> "Klik kanan pada node jaringan." Beginilah tampilan menu setelah menambahkan skrip.


Oleh karena itu, kami meletakkan skrip reboot.php di direktori / usr / share / zabbix (Anda mungkin memiliki yang lain, saya menggunakan direktori root zabbixa).

Penafian untuk keamanan
Untuk kejelasan penjelasan dalam skrip, saya hanya menggunakan id router, tetapi saya tidak menggunakan kata sandi. Dalam versi yang berfungsi, ini tidak direkomendasikan! Mengapa saya melakukan ini: karena pertanyaan besarnya adalah di mana menyimpan kata sandi untuk router? Dalam zabbixe sendiri dalam "inventaris"? Praktek yang saling bertentangan. Sebagai pilihan: batasi akses eksternal ke file reboot.php itu sendiri

Reboot.php file

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

Sebenarnya semuanya. Pertanyaan "bagaimana mendapatkan hasil dari eksekusi perintah dari sisi perangkat" tetap terbuka. Pertimbangkan masalah 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 

dimana:
message = `ifconfig` - kami menetapkan hasil dari output perintah ifconfig ke variabel $ message
wget " xn - 80abgfbdwanb2akugdrd3a2e5gsbj.xn - p1ai / a.php - skrip a.php kami yang mendaftarkan router dan menerima pesan dari mereka
u = pengguna & p = kata sandi! & m = $ message - kredensial dan nilai variabel permintaan m - memberikan konten variabel $ message
-O /tmp/out.txt - kami tidak perlu menampilkan ke file /tmp/out.txt dalam kasus ini, tetapi jika Anda tidak menentukan parameter ini, wget tidak berfungsi

Mengapa ini bekerja dengan bengkok
Karena itu lubang keamanan potensial. kesalahan paling berbahaya yang dapat terjadi adalah jika, misalnya, ada simbol "&" di output dari perintah Anda. Oleh karena itu, perlu untuk memfilter semua yang dikirim dari router dan semua yang datang ke server. Ya, saya benar-benar malu. Dalam pembelaan saya, saya hanya dapat menulis - bahwa seluruh artikel dikhususkan untuk bagaimana mengelola router dengan firmware yang tidak ditentukan sebelumnya, dengan saluran komunikasi yang tidak ditentukan sebelumnya.

Yah, saya telah menyentuh masa depan: Saya belum menemukan cara untuk mencerminkan hasil (misalnya, hasil dari perintah) yang datang ke server menggunakan alat zabbix standar.

Saya mengingatkan Anda bahwa semua sumber dapat diambil dari repositori Git

Source: https://habr.com/ru/post/id446230/


All Articles