Tiếp tục giám sát và quản lý từ xa các thiết bị dựa trên Linux/OpenWrt/Lede qua cổng 80

Đây là phần cuối cùng của bài viết, đây là phần mở đầu habr.com/vi/post/445568
Lần trước tôi đã viết về cách triển khai giám sát thiết bị, bây giờ chúng ta sẽ nói về quản lý. Trong các cuộc thảo luận với các “kỹ thuật viên” về phía Khách hàng, tôi thường gặp phải nhận thức hạn chế về khả năng của những thiết bị nhỏ như vậy (với hiệu suất và tài nguyên bộ nhớ thấp), nhiều người tin rằng “điều chúng tôi cần nhất là gửi một bản khởi động lại, để biết thêm điều gì đó”. nghiêm túc đấy, chúng tôi sẽ cử một đội”.
Nhưng thực tế cho thấy điều này không hoàn toàn đúng. Dưới đây là danh sách nhỏ các nhiệm vụ điển hình phổ biến:

  1. Chẩn đoán và xử lý sự cố mạng. Đằng sau cổng ethernet của bộ định tuyến của bạn thường có một phần cứng khác có địa chỉ IP nội bộ riêng. Đôi khi, bạn có thể (nên) “ping” nó. Hoặc quản lý đường hầm - nếu đường hầm đột nhiên không xuất hiện trên bộ định tuyến hoạt động qua modem 3G, nhưng chúng ta có thể nhìn thấy chính bộ định tuyến đó.
  2. Bảo trì hệ thống. Cập nhật chương trình cơ sở, nâng cấp tập lệnh dịch vụ.
  3. Hành động cân bằng. Điều này có thể được gọi là “sự đồi trụy”, nhưng khái niệm “cân bằng” như tôi trích dẫn, “khả năng của người biểu diễn xiếc giữ thăng bằng trong tư thế cơ thể không ổn định” - phù hợp hơn. Những tình huống như vậy phát sinh do ngân sách hạn chế của khách hàng. Dưới đây tôi đã đưa ra một vài ví dụ, nhưng... Chúng không liên quan trực tiếp đến chủ đề của câu chuyện, tôi ghi chúng vào phần ghi chú

Giám sát Wi-FiMột chủ đề thời thượng trong XNUMX năm qua, chủ yếu là giữa các chuỗi bán lẻ liên bang. Bạn đang thong thả dạo quanh các sàn giao dịch và điện thoại di động có Wi-Fi của bạn đang bật, nhằm cố gắng “bám” vào một số luồng của mạng, hãy thường xuyên gửi các gói Yêu cầu thăm dò, có thể được phân tích để tính toán bạn: bạn có thường xuyên đến cửa hàng này không, vì lý do gì? bạn đi dọc theo quỹ đạo, v.v. Sau đó, dữ liệu được thu thập, phân tích, bản đồ nhiệt được vẽ ra và các nhà quản lý “đắt tiền” từ ban quản lý hoặc nhà đầu tư cho những bức tranh như vậy. Chà, hiện tại.... “không có tiền, nhưng bạn hãy cố gắng…”, và kết quả (thực) đã được hiển thị, bài hát cổ hay bắt đầu: “Vâng, vâng, vậy thì tất nhiên chúng ta sẽ cài đặt cis và mọi thứ bạn muốn, nhưng bây giờ chúng tôi cần cho Khách hàng xem kết quả! Nhân tiện, chúng tôi quên nói rằng Khách hàng đã cho phép chúng tôi kết nối thiết bị của mình với điểm phát sóng của anh ấy qua Wi-Fi, nhưng về cơ bản, giống như thể chúng tôi là khách hàng.” Và vì vậy, chúng tôi phải tạo ra các bộ định tuyến cân bằng - một số giao diện phụ WiFi được nâng lên, một trong số đó bám vào điểm phát sóng và giao diện thứ hai giám sát môi trường, điên cuồng tải kết quả tcpdump lên chính nó, sau đó đóng gói nội dung của tệp vào kho lưu trữ và gặp rủi ro chết vì “ăn quá nhiều” cố gắng nhổ ra nội dung trên máy chủ FTP. Không có gì đáng ngạc nhiên khi bộ định tuyến cân bằng thường xuyên “hỏng” và bằng cách nào đó phải “hồi sinh” từ xa.

RadiusSẽ dễ dàng hơn để mô tả tình huống ở đây bằng những câu như sau từ khách hàng: “Chúng tôi muốn một mạng lưới các điểm phát sóng phi tập trung có thể hoạt động trên các thiết bị có mô hình chưa được biết trước, thông qua các kênh nhưng chúng tôi chưa biết mô hình nào. Ồ, chúng tôi quên nói, chúng tôi không chỉ muốn hiển thị quảng cáo cho khách hàng mà còn phân tích mọi thứ xung quanh vị trí cài đặt điểm phát sóng. Không, chúng tôi vẫn chưa biết tại sao, nhưng chúng tôi sẽ tìm ra cách, đừng nghi ngờ gì nữa, chúng tôi đã có thể nghĩ ra ý tưởng này.”

Và chúng ta không được quên rằng do có rất nhiều trường hợp chưa biết trước đó, việc kiểm soát phải được thực hiện trong điều kiện không chuẩn, khi chúng ta không thể kết nối trực tiếp với bộ định tuyến qua cổng IP: và buộc phải chờ hoạt động từ nó. Nếu chúng ta tự trừu tượng hóa, cuộc đối thoại giữa máy chủ và bộ định tuyến có thể được biểu diễn như thế này:

  • Bộ định tuyến: Xin chào. Tôi là một bộ định tuyến như vậy, có nhiệm vụ nào cho tôi không?
  • Máy chủ: bộ định tuyến như vậy và như vậy, tôi đã đăng ký cho bạn rằng bạn còn sống. Đây là thử thách: cho tôi xem kết quả của lệnh ifconfig?
  • Bộ định tuyến: Xin chào. Tôi là một bộ định tuyến như vậy, lần trước bạn yêu cầu hiển thị kết quả của ifconfig, nó đây. Có nhiệm vụ nào dành cho tôi không?
  • Máy chủ: bộ định tuyến như vậy và như vậy, tôi đã đăng ký cho bạn rằng bạn còn sống. Không có nhiệm vụ nào dành cho bạn.

Câu hỏi thú vị nhất: làm thế nào một bộ định tuyến từ xa có thể gửi một lượng thông tin nhất định? Trong phần trước, tôi đã mô tả rằng do tài nguyên hạn chế, bộ định tuyến chỉ có một wget "rút gọn", chỉ hoạt động thông qua GET và không có gì khác; không có ứng dụng khách FTP hoặc cuộn tròn. Chính xác hơn, chúng ta cần một phương pháp phổ quát, bất kể tính năng của việc lắp ráp hình ảnh. Tôi quyết định sử dụng wget. Chính xác hơn là cách tôi "dừng lại" - đơn giản là tôi không còn lựa chọn nào khác :)

Chỉ là tuyên bố từ chối trách nhiệmGiải pháp quản lý của tôi đang hoạt động, không có nhiều hạn chế và tôi chắc chắn rằng nó không ổn, ngay cả khi nó phù hợp với hầu hết khách hàng của tôi. Làm cách nào bạn có thể làm điều đó một cách khôn ngoan - viết một tiện ích nhỏ gửi dữ liệu nhị phân POST qua cổng 80. Đưa nó (tiện ích) vào chương trình cơ sở của bộ định tuyến và truy cập nó bằng bash. Nhưng thực tế là: a) chúng ta cần nhanh chóng b) chúng ta có thể cần phải làm mọi thứ trên “vườn thú bộ định tuyến” hiện có c) “không gây hại gì!” — nếu bộ định tuyến đang hoạt động và thực hiện các tác vụ khác, hãy thử thực hiện các thay đổi không ảnh hưởng đến chức năng hiện có.

Hãy chuyển sang thực hiện. Giả sử khách hàng của bạn muốn khởi động lại bộ định tuyến từ zabbix một cách dễ dàng và tự nhiên chỉ bằng một “cú nhấp chuột”. Hôm nay chúng ta sẽ bắt đầu mô tả cách triển khai với Zabbix.
Trong menu “Quản trị” -> “Tập lệnh”, thêm tập lệnh mới. Chúng tôi gọi nó là “Reboot”, nhập “php /usr/share/zabbix/reboot.php {HOST.HOST}” làm lệnh

Tiếp tục giám sát và quản lý từ xa các thiết bị dựa trên Linux/OpenWrt/Lede qua cổng 80

Tiếp theo: Menu “Giám sát” -> “Dữ liệu mới nhất” -> “Nhấp chuột phải vào nút mạng mong muốn.” Đây là giao diện của menu sau khi thêm tập lệnh.

Tiếp tục giám sát và quản lý từ xa các thiết bị dựa trên Linux/OpenWrt/Lede qua cổng 80
Theo đó, chúng tôi đặt tập lệnh restart.php vào thư mục /usr/share/zabbix (của bạn có thể khác, tôi sử dụng thư mục gốc zabbixa).

Tuyên bố từ chối trách nhiệm về an toànĐể giải thích rõ ràng hơn trong kịch bản, tôi chỉ sử dụng id bộ định tuyến chứ không sử dụng mật khẩu. Không nên làm điều này trong phiên bản sản xuất! Tại sao tôi làm điều này: bởi vì câu hỏi lớn là nơi lưu trữ mật khẩu cho bộ định tuyến? Trong zabbixe chính nó có trong “dữ liệu hàng tồn kho”? Thực hành gây tranh cãi. Ngoài ra: hạn chế quyền truy cập bên ngoài vào chính tệp restart.php

Tập tin khởi động lại.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();
?>

Đó là tất cả. Câu hỏi vẫn còn bỏ ngỏ: “làm thế nào để có được kết quả khi thực hiện lệnh từ thiết bị”. Hãy xem nhiệm vụ sử dụng lệnh ifconfig làm ví dụ. Lệnh này có thể được gửi đến thiết bị:

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

Ở đâu:
tin nhắn=`ifconfig` - chúng ta gán kết quả đầu ra của lệnh ifconfig cho biến $message
quên "xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php — tập lệnh a.php của chúng tôi đăng ký bộ định tuyến và nhận tin nhắn từ chúng
u=user&p=password!&m=$message — thông tin đăng nhập và giá trị của biến yêu cầu m — gán nội dung của biến $message
-O /tmp/out.txt — chúng ta không cần xuất ra tệp /tmp/out.txt trong trường hợp này, nhưng nếu tham số này không được chỉ định, wget sẽ không hoạt động

Tại sao cai nay không hoạt động?Bởi vì đó là một lỗ hổng bảo mật tiềm ẩn. Ví dụ: lỗi vô hại nhất có thể xảy ra là nếu có ký tự “&” trong đầu ra lệnh của bạn. Vì vậy, cần phải lọc cả mọi thứ được gửi từ bộ định tuyến và mọi thứ đến máy chủ. Ừ, tôi xấu hổ thật đấy. Để bảo vệ, tôi chỉ có thể viết rằng toàn bộ bài viết được dành cho cách quản lý bộ định tuyến với các kênh liên lạc và chương trình cơ sở được xác định trước mà không được xác định trước.

Chà, một sự khởi đầu cho tương lai: Tôi vẫn chưa tìm ra cách sử dụng các công cụ zabbix tiêu chuẩn để phản ánh kết quả (ví dụ: kết quả của việc thực thi một lệnh) đến máy chủ.

Tôi nhắc bạn rằng tất cả các nguồn có thể được lấy từ kho Git tại: github.com/BazDen/iotnet.online.git

Nguồn: www.habr.com

Thêm một lời nhận xét