Máy Tính

Tự Chế “Tunnel” Bảo Mật: Điều Khiển Home Assistant Từ Xa Với Tines

Giao diện quản lý TrueNAS và Proxmox trên laptop, minh họa hệ thống máy chủ tự host

Tôi luôn thích thử nghiệm các dịch vụ khác nhau và kết nối chúng lại để xem những “công thức” độc đáo nào có thể tạo ra. Một trong những nền tảng mà tôi đã mày mò là Tines, một nền tảng tự động hóa tập trung mạnh mẽ vào bảo mật. Mặc dù có các gói đăng ký trả phí, phiên bản miễn phí của Tines vẫn cho phép bạn làm được rất nhiều điều. Tuy nhiên, tính năng Tines Tunnel – về cơ bản là một Cloudflare Tunnel – lại nằm sau rào cản của gói đăng ký cao cấp, và để có được gói này cần liên hệ với Tines để báo giá, chủ yếu nhắm đến các công ty.

Tôi thực sự thích các tính năng mà Tines cung cấp, và điều này khiến tôi suy nghĩ: Điều gì sẽ xảy ra nếu tôi có thể tự xây dựng một dạng “tunnel” của riêng mình, chỉ thông qua sức mạnh của Home Assistant và các quy trình tự động hóa? Với gói đăng ký Nabu Casa, tôi có thể tạo các webhook công khai. Tines có khả năng thực hiện các yêu cầu HTTP và cũng có thể tự lưu trữ các webhook của riêng mình. Bằng cách xâu chuỗi những thành phần này lại với nhau, tôi có thể đạt được chức năng tương tự như một tunnel, với giao tiếp hai chiều an toàn giữa hai nền tảng. Nó không linh hoạt bằng một tunnel thực sự, nhưng như bạn sẽ thấy, nó hoàn thành tốt công việc.

Lưu ý rằng đây là một thử nghiệm mang tính “làm vì có thể” chứ không phải là điều mọi người nên cân nhắc. Đó là một trải nghiệm thú vị, hấp dẫn và là cơ hội để học hỏi các phần mềm mới. Đôi khi, việc thử một điều gì đó mới và xem kết quả ra sao cũng là một niềm vui, và đây chính xác là điều đó.

Lên Kế Hoạch Cho Dự Án Tự Động Hóa Độc Đáo

Tận Dụng Sức Mạnh Của Home Assistant Ngoài Giới Hạn

Giao diện quản lý TrueNAS và Proxmox trên laptop, minh họa hệ thống máy chủ tự hostGiao diện quản lý TrueNAS và Proxmox trên laptop, minh họa hệ thống máy chủ tự host

Sau khi đã xác định có thể triển khai giao tiếp hai chiều, bước tiếp theo là nghĩ ra một dự án và xây dựng kế hoạch. Tôi đã nghĩ về cách Home Assistant liên kết gần như mọi thứ trong nhà mình, điều này khiến việc tìm một ý tưởng trở nên khó khăn. Với hầu hết mọi thứ, việc triển khai một tự động hóa ngay trong Home Assistant là điều dễ dàng, vì vậy tôi cần nghĩ ra một điều gì đó độc đáo.

Đó là lúc tôi phát hiện hai hành động thú vị mà Tines có: “Send email” (Gửi email) và “Receive email” (Nhận email). Chúng thực hiện đúng như tên gọi; “Send email” để gửi đi một email, trong khi “Receive email” thiết lập một địa chỉ email với một chuỗi số và chữ cái ngẫu nhiên mà bạn có thể gửi yêu cầu tới. Điều gì sẽ xảy ra nếu tôi có thể gửi lệnh qua email, sau đó nhận lại phản hồi từ Tines bằng thông tin được yêu cầu hoặc một email xác nhận rằng hành động của tôi đã được hoàn thành? Có thể nói email là API nguyên thủy, vì vậy việc thử nghiệm nó nghe có vẻ là một ý tưởng thú vị.

Cuối cùng, tôi chọn hai hướng để làm bằng chứng khái niệm: đầu tiên là tương tác với mô hình LLM tự host của mình và nhận phản hồi qua email; thứ hai là điều khiển các container Proxmox đang chạy trong phòng thí nghiệm tại nhà, cho phép tôi khởi động, dừng hoặc khởi động lại chúng từ xa. Có những ý nghĩa về bảo mật với điều này, nhưng tôi sẽ đề cập và giải thích cách tôi xử lý chúng. Chúng ta đã có một kế hoạch, và việc triển khai nó đã dễ dàng đến bất ngờ.

Cách Tines Xử Lý Lệnh Từ Email Một Cách Thông Minh

Kiểm Soát Bảo Mật: Không Chấp Nhận Mọi Dữ Liệu Gửi Đến Home Assistant

Ứng dụng Home Assistant trên máy tính bảng hiển thị trạng thái hệ thống Raspberry PiỨng dụng Home Assistant trên máy tính bảng hiển thị trạng thái hệ thống Raspberry Pi

Email là một giao thức khá phức tạp với nhiều thành phần giúp bạn có thể tin tưởng rằng người gửi thực sự là người họ nói. Ví dụ, nếu bạn nhận được một email từ “[email protected]”, làm thế nào bạn có thể xác minh nó đến từ tôi? Việc giả mạo nguồn gốc email cực kỳ dễ dàng, và nếu tôi có các lệnh điều khiển phòng thí nghiệm tại nhà của mình, tôi cần chắc chắn rằng những lệnh đó thực sự đến từ tôi chứ không phải từ ai đó đang giả mạo địa chỉ email của tôi.

Khi nói đến email, có một vài công nghệ có thể chứng minh liệu người gửi email có thực sự là người gửi hay không. Hai trong số đó là SPF và DKIM, viết tắt của Sender Policy Framework và DomainKeys Identified Mail. SPF là một kiểm tra đơn giản để đảm bảo rằng địa chỉ IP gửi email được ủy quyền bởi tên miền để làm như vậy. Điều này vốn đã khó giả mạo, và sẽ yêu cầu một cuộc tấn công man-in-the-middle, tấn công BGP hijacking, hoặc một chính sách SPF được triển khai kém trên tên miền để vượt qua.

Tuy nhiên, DKIM lại khó vượt qua hơn nhiều. DKIM về cơ bản cung cấp một chữ ký số với mỗi email được gửi đi, và chữ ký này sau đó có thể được so sánh với khóa công khai được liên kết với tên miền. Nếu khớp, email đến từ một người gửi hợp pháp và chưa bị can thiệp. Bằng cách kết hợp hai điều này với DMARC, rất khó để có được sự mạnh mẽ hơn mà không cần thêm một khóa vào email của bạn mà chỉ bạn biết và kiểm tra. Nếu tôi định sử dụng giải pháp này lâu dài, tôi chắc chắn sẽ triển khai điều đó.

Khi bạn gửi email đến địa chỉ Tines cung cấp, tất cả các kiểm tra này đều nằm trong các header. Vì vậy, chúng ta chỉ cần kiểm tra xem “spf=pass”, “dkim=pass”, và “dmarc=pass” có tồn tại trong đối tượng “Authentication-Results” hay không. Nếu không, chúng ta có thể tạo một luồng thất bại sẽ gửi email thông báo cho tôi, và nếu chúng vượt qua, chúng ta có thể tiếp tục với phần còn lại của quy trình.

Trích Xuất Lệnh và Kích Hoạt Hành Động

Sơ đồ luồng tự động hóa email của Tines minh họa các bước xử lý lệnh gửi qua emailSơ đồ luồng tự động hóa email của Tines minh họa các bước xử lý lệnh gửi qua email

Phần còn lại của quy trình của chúng ta khá đơn giản. Đầu tiên, chúng ta cần trích xuất các lệnh từ tiêu đề và nội dung email, sau đó thiết lập một luồng dẫn đến các bộ kích hoạt (triggers) khác nhau. Các triggers về cơ bản là một chuỗi các khối “if-else”, vì chúng ta có thể kích hoạt dựa trên một lệnh và có một loạt các lệnh này dựa trên văn bản mà chúng ta trích xuất.

Khi nói đến việc trích xuất văn bản, Tines làm điều đó khá dễ dàng. Bạn có thể chỉ cần truyền một chuỗi từ một biến đã khai báo, hoặc bạn có thể trích xuất từ một đối tượng JSON, và còn nhiều tùy chọn khác nữa. Chúng ta sẽ trích xuất từ tham số “receive_email_action.body”, nhưng có một vấn đề: nội dung email trông như thế này (dấu ngoặc nhọn đã được thay thế bằng dấu ngoặc vuông thông thường):

"(div dir="ltr")104(/div)n"

Chúng ta muốn lấy phần 104, nhưng việc chỉ lấy bất cứ thứ gì bên trong thẻ div là khó. May mắn thay, Tines cũng hỗ trợ regex, vì vậy chúng ta có thể làm như sau để lấy văn bản bên trong thẻ div một cách nhất quán, trong đó dấu ngoặc nhọn đã được thay thế bằng một chữ C.

Cdiv[^C]*C s*w+s+(.*?) C/divC

Điều này chỉ cho chúng ta văn bản bên trong thẻ div và gán nó cho một biến. Dòng tiêu đề thì dễ dàng, và regex duy nhất chúng ta cần là “.*”. Cuối cùng, các triggers chỉ đơn giản kiểm tra văn bản được trích xuất là gì, và phản ứng tương ứng dựa trên việc đó là “proxmox start”, “proxmox stop”, hoặc “proxmox reboot”.

Cấu hình các 'Triggers' trong Tines để định tuyến các lệnh điều khiển ProxmoxCấu hình các 'Triggers' trong Tines để định tuyến các lệnh điều khiển Proxmox

Phần tiếp theo này có thể được cải thiện đáng kể bằng cách kết nối mọi thứ với một yêu cầu HTTP duy nhất, nhưng sau đó tôi thực hiện một yêu cầu HTTP từ Tines đến webhook Home Assistant của mình, với khóa của đối tượng JSON được gửi là “start”, “stop” hoặc “reboot”, và giá trị là số được trích xuất từ email.

Để cải thiện điều này hơn nữa và giảm số lượng khối tôi đang sử dụng, tôi có thể tạo động khóa được gửi trong đối tượng JSON dựa trên lệnh, và giữ tất cả trong một khối yêu cầu HTTP duy nhất trong Tines. Nhưng còn về phía Home Assistant? Các lệnh phải được gửi đến một nơi nào đó, vì vậy chúng ta sẽ chuyển sang việc kết nối tất cả lại với nhau.

Ảnh chụp màn hình giao diện Home Assistant với các thẻ tùy chỉnhẢnh chụp màn hình giao diện Home Assistant với các thẻ tùy chỉnh

Thiết Lập Home Assistant Để Phản Hồi Các Lệnh

Đơn Giản Hóa Với Một Quy Trình Tự Động Hóa Duy Nhất

Luồng tự động hóa Home Assistant điều khiển Proxmox thông qua TinesLuồng tự động hóa Home Assistant điều khiển Proxmox thông qua Tines

Trước hết, tôi đang sử dụng tích hợp Proxmox VE HACS, một phiên bản nâng cao của tích hợp Proxmox tích hợp sẵn. Nó có một quá trình thiết lập hơi dài, nhưng kết quả là bạn có thể điều khiển tất cả các VM và LXC của mình từ Home Assistant.

Để bắt đầu, chúng ta tạo một quy trình tự động hóa trong Home Assistant, được kích hoạt dựa trên một webhook. Điều này sẽ tự động tạo webhook cho bạn. Ở đây tôi chỉ thiết lập nó cho các LXC, nhưng sẽ khá dễ dàng để chuyển đổi và làm cho nó có thể điều khiển cả các VM. Chúng ta có thể tận dụng thực tế là mọi cảm biến được tạo bởi tích hợp đều tuân theo cùng một định dạng:

button.lxc_(name)_(number)_(start/stop/reboot)

Với tích hợp của chúng ta, chúng ta định nghĩa các biến sau:

  • action: là start, stop, hoặc reboot
  • number: giá trị trong payload được gửi từ Tines
  • button_entity: lặp qua tất cả các nút, kiểm tra:
    • các nút bắt đầu bằng “button.lxc_”
    • các nút kết thúc bằng “_(action)”
    • các nút có chứa số
  • status_sensor: cảm biến liên quan đến dịch vụ, để xác nhận liệu hành động của chúng ta có hoạt động hay không

Với điều này, chúng ta có thể gửi một lệnh như “proxmox start 104” qua email đến Tines, lệnh này được trích xuất, sau đó được gửi đến webhook Home Assistant của chúng ta. Nó được diễn giải, các biến được đặt, và chúng ta nhấn biến “button_entity”.

Cuối cùng, chúng ta đợi 15 giây, sau đó thăm dò cảm biến. Nếu nó trả về giá trị mong đợi, chúng ta gửi một rest_command đến webhook Tines của chúng ta, kích hoạt một email với thông báo liệu hành động đã thành công hay thất bại, bằng cách kiểm tra xem giá trị mong đợi có khớp với giá trị thực tế hay không.

Tương Lai Của Tự Động Hóa Với Các Nền Tảng Thông Minh

Mở Rộng Tiềm Năng Điều Khiển Phòng Thí Nghiệm Tại Nhà

Hãy rõ ràng: đây là một “giải pháp” được thiết kế quá mức cho một vấn đề thực sự không tồn tại. Tuy nhiên, tôi đã làm điều đó để cho thấy cách một công cụ như Tines có thể được sử dụng để tự động hóa việc điều khiển phòng thí nghiệm tại nhà của bạn. Thông qua Home Assistant như một dạng tunnel, bạn có thể kích hoạt giao tiếp hai chiều giữa phòng thí nghiệm tại nhà và nền tảng đám mây Tines, điều này có thể hữu ích theo những cách khác thông qua các công cụ như tích hợp command_line để gửi hướng dẫn đến các máy chủ hoặc container khác trong mạng của bạn.

Đối với những người lo ngại về bảo mật khi sử dụng một công cụ tự động hóa dựa trên đám mây, Tines đặt bảo mật lên hàng đầu. Dịch vụ đám mây của họ tuân thủ SOC2 Type 2, mặc dù “tuân thủ” là một chủ đề hoàn toàn khác khi không có cơ quan tập trung nào để thực hiện các cuộc kiểm toán đó. Tuy nhiên, hãy yên tâm rằng Tines được xây dựng trên tự động hóa và bảo mật. Các tài khoản Community edition, mà tôi đang sử dụng ở đây, chỉ lưu giữ nhật ký trong bảy ngày. Có những hạn chế đối với điều đó, chẳng hạn như các quy trình tự động hóa dài hạn bị giới hạn trong một tuần, nhưng điều đó cũng rất tuyệt vì có nghĩa là dữ liệu của bạn sẽ biến mất một tuần sau đó.

Triển khai một thứ như thế này đòi hỏi sự cẩn trọng đặc biệt đối với việc bảo vệ dữ liệu của bạn và bảo vệ cách các lệnh của bạn được gọi, nhưng nền tảng này được xây dựng để cung cấp loại chức năng đó cho các doanh nghiệp lớn. Một số người thích kiểm soát mọi thứ cục bộ, điều này hoàn toàn dễ hiểu, và đối với những người đó, một công cụ như n8n sẽ phù hợp hơn với trường hợp sử dụng của bạn.


Bạn có ý tưởng tự động hóa độc đáo nào với Home Assistant và các nền tảng khác không? Hãy chia sẻ suy nghĩ của bạn trong phần bình luận bên dưới! Hoặc khám phá thêm các bài viết về tự động hóa nhà thông minh tại blogcongnghe.net để tìm nguồn cảm hứng mới.

Related posts

5 Hàm Excel ‘Quyền Lực’ Giúp Chuyên Gia Tài Chính Kế Toán Nâng Tầm Kỹ Năng

Administrator

6 Lầm Tưởng Phổ Biến Về Mạng Mesh Wi-Fi: Sự Thật Đằng Sau Công Nghệ Phủ Sóng

Administrator

Vì Sao Máy Ảo Vượt Trội Hơn Dual-Boot: Chuyên Gia Chia Sẻ Kinh Nghiệm Chuyển Đổi

Administrator