找回密碼
 立即註冊
惟家LINE群QRCODE
    查看: 0|回覆: 0

    ESPHome 的安全設定:OTA、加密、以及那些預設沒開的東西

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005752
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    ESPHome 裝置是你自己家網路裡的一台小電腦

    這篇講該做的安全設定,以及 2026 年的新功能。



    四層要顧


    • 跟 HA 的連線 —— api encryption
    • 韌體更新 —— OTA 密碼 + 加密更新
    • 網頁介面 —— web_server 的密碼
    • 網路位置 —— 放在哪個 VLAN


    一、API 加密(一定要)
    1. api:
    2.   encryption:
    3.     key: !secret api_key
    複製代碼

    產生金鑰:ESPHome 建立新裝置時會自動產生,
    或者到 esphome.io/components/api 的頁面有產生器。

    沒有加密的話:同網段的任何人都能連上你的裝置,
    讀取狀態、控制繼電器

    所有裝置共用同一把金鑰可以嗎


    • 技術上可以(放在 secrets.yaml 裡)
    • 但建議每台不同 —— 一台被攻破不會影響其他台
    • 我自己是共用,因為管理方便。這是便利性和安全性的取捨


    二、OTA 設定(2026 年有重要更新)
    1. ota:
    2.   - platform: esphome
    3.     password: !secret ota_password
    複製代碼

    2026.9 的新功能:加密更新

    ESPHome 2026.9 開始,OTA 更新會用「保護 HA 連線的那把金鑰」加密。

    意思是:


    • 韌體在傳輸過程中是加密的
    • 不用額外設定,用你原本的 api encryption key
    • 防止有人在網路上攔截或竄改韌體


    還有一個 2026.8 的功能:多金鑰 OTA 簽章驗證

    可以設定多把簽章金鑰,方便輪替(舊金鑰還沒淘汰就能先加新的)。

    一般家庭用不太到,但如果你管理很多裝置值得了解。



    三、web_server(預設沒開,開了要設密碼)
    1. web_server:
    2.   port: 80
    3.   auth:
    4.     username: !secret web_username
    5.     password: !secret web_password
    6.   version: 3
    7.   local: true
    複製代碼

    幾個重點


    • auth 一定要設 —— 不然任何人都能開你的裝置網頁控制它
    • local: true —— 把網頁資源打包進韌體,不用連外網 CDN
    • version: 3 —— 新版介面,比較好用


    要不要開 web_server


    • 除錯很方便(可以直接在瀏覽器看狀態、按按鈕)
    • 但會佔記憶體(尤其 local: true 的時候)
    • 我的做法:除錯階段開,穩定之後關掉


    四、密碼放在 secrets.yaml
    1. # /config/esphome/secrets.yaml
    2. wifi_ssid: "MyHome-IoT"
    3. wifi_password: "xxxxx"
    4. ap_password: "xxxxx"
    5. api_key: "base64的一長串"
    6. ota_password: "xxxxx"
    7. web_username: "admin"
    8. web_password: "xxxxx"
    複製代碼

    為什麼


    • 設定檔可以分享或進 Git,不會洩漏密碼
    • 換 Wi-Fi 密碼只要改一個地方


    記得把 secrets.yaml 加進 .gitignore。

    五、網路隔離(最重要但最常被忽略)



    ESPHome 裝置應該放在 IoT 網段。

    但有一個問題:HA 要能連到它們

    做法(前面有一篇講 VLAN 的有詳細步驟):


    • ESPHome 裝置放 VLAN 20(IoT)
    • HA 主機放主網段
    • 防火牆規則:允許 HA → IoT禁止 IoT → 主網段


    ESPHome 的設定
    1. wifi:
    2.   ssid: !secret iot_wifi_ssid
    3.   password: !secret iot_wifi_password
    4.   # 固定 IP 比較好管(或者用 DHCP 保留)
    5.   manual_ip:
    6.     static_ip: 192.168.20.51
    7.     gateway: 192.168.20.1
    8.     subnet: 255.255.255.0
    複製代碼

    但我建議用 DHCP 保留(前面有一篇專門講為什麼)。

    mDNS 的問題

    ESPHome 的自動發現靠 mDNS,跨 VLAN 會失效。

    三個解法


    • 在路由器開 mDNS reflector(前面有專門的一篇)
    • 在 HA 手動指定 IP 加入(設定 → 裝置與服務 → 新增整合 → ESPHome → 填 IP)
    • 關掉 mDNS 省記憶體:

    1. mdns:
    2.   disabled: true
    複製代碼

    關掉之後一定要用手動 IP 加入,而且 IP 要固定。

    六、幾個容易忽略的設定

    logger 的等級
    1. logger:
    2.   level: INFO         # 預設是 DEBUG,很吵而且佔資源
    3.   baud_rate: 0        # 關掉序列埠輸出(省一點效能)
    複製代碼

    baud_rate: 0 的注意事項:關掉之後接 USB 線也看不到日誌了
    除錯階段不要關。

    某些元件(例如 PMS5003)會跟序列埠日誌搶 UART
    那種情況一定要設 0。

    AP 後備模式的密碼
    1. wifi:
    2.   ap:
    3.     ssid: "${device_name} Fallback"
    4.     password: !secret ap_password      # 一定要設
    複製代碼

    沒設密碼的話,連不上 Wi-Fi 時會開一個「開放的熱點」 ——
    任何人都能連上去改你的 Wi-Fi 設定。

    reboot_timeout
    1. wifi:
    2.   reboot_timeout: 15min
    複製代碼

    連不上 Wi-Fi 超過 15 分鐘就自動重開機。

    預設是 15 分鐘,但如果你的裝置在訊號邊緣,
    可能會一直重開 —— 那種情況調長一點或者改善訊號。

    一份安全檢查清單


    • api 有 encryption
    • ota 有 password
    • web_server 有 auth(如果有開的話)
    • ap 有 password
    • 所有密碼在 secrets.yaml
    • secrets.yaml 在 .gitignore 裡
    • 裝置在 IoT 網段
    • ESPHome 保持更新(安全修正才會進來)


    一個提醒:不要把 ESPHome 裝置直接開到公網

    我看過有人為了「在外面也能控制」而做通訊埠轉發。

    絕對不要。


    • ESPHome 的 API 不是設計來面對公網的
    • 要遠端存取就透過 HA(HA 再透過 VPN 或 Nabu Casa)


    ---

    下一篇:離線也能動 ——
    on_boot、備援邏輯,讓裝置在 HA 掛掉時還能運作。
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-9-24 10:28 , Processed in 0.080715 second(s), 26 queries .

    快速回覆 返回頂部 返回列表