返回博客

Home Assistant代理:安全的智能家居远程访问,无需黑客攻击

Home Assistant的开放端口是您智能家居安全的漏洞。我们将介绍如何通过代理设置安全的远程访问,以避免成为黑客的受害者。

📅2026年6月12日
```html

您已经安装了Home Assistant,连接了智能插座、温控器和摄像头——并希望从世界任何地方通过智能手机管理这一切。但是,未加保护的互联网开放访问使您的智能家居成为黑客的轻松目标。在本文中,我们将探讨如何通过代理正确组织对Home Assistant的远程访问,并保护您的家庭网络。

为什么直接访问Home Assistant是危险的

Home Assistant是一个强大的开源智能家居自动化平台。全球数百万用户通过它管理照明、气候、锁、摄像头和其他数十种设备。但正是这种受欢迎程度使Home Assistant成为恶意攻击者的诱人目标。

当您通过路由器直接将8123端口(Home Assistant的标准端口)暴露到互联网时,您实际上是在向自动扫描器悬挂“欢迎”牌。这些扫描器遍历整个IP地址范围,寻找已知服务的开放端口。根据Shodan(互联网设备搜索引擎)的数据,数以万计的Home Assistant实例持续处于开放状态。

一旦恶意攻击者发现您的Home Assistant,会发生什么:

  • 密码暴力破解——自动脚本尝试成千上万的登录/密码组合。如果您的密码较弱,破解将是分分钟的事。
  • 利用漏洞——在旧版本的Home Assistant中,时常发现严重漏洞,允许在没有密码的情况下访问。
  • 通过摄像头监视——一旦获得HA的访问权限,攻击者可以实时查看所有连接摄像头的直播。
  • 控制锁和警报——如果您连接了智能锁,黑客可以远程打开您家的门。
  • 窃取自动化数据——从HA的历史记录中可以得知您何时在家,何时离开,睡眠模式及其他私人数据。

⚠️ 实际案例

在2023年,安全研究人员发现了Home Assistant中的CVE-2023-27482漏洞,允许绕过身份验证而无需任何凭据。所有开放到互联网的实例在补丁发布之前都处于脆弱状态。使用代理层或VPN的用户则自动受到保护。

代理如何保护智能家居:工作原理

在Home Assistant的上下文中,代理充当互联网与您的服务器之间的中介。您的Home Assistant并不是直接在网络中可见,而是外部仅可见代理服务器——它负责转发请求,并进行额外的检查。

工作原理如下:

您的智能手机(互联网)
        ↓
  代理服务器
  (过滤、加密、授权)
        ↓
  家庭网络(封闭)
        ↓
  Home Assistant(192.168.1.X:8123)
  

这个额外的层次带来了什么好处:

  • 隐藏真实IP——扫描器看到的是代理的IP,而不是您的家庭地址。即使代理被黑客入侵,他们也无法直接访问家庭网络。
  • SSL/TLS加密——代理可以终止HTTPS连接并提供有效的证书,从而保护流量不被截获。
  • 额外的身份验证——可以在代理层面为Home Assistant设置基本身份验证或双因素身份验证。
  • 速率限制——限制来自单个IP的请求数量,可以在攻击到达Home Assistant之前阻止暴力破解攻击。
  • 地理封锁——可以仅允许来自特定国家或IP范围的访问。
  • 日志记录——所有访问尝试都会被记录,有助于识别可疑活动。

重要的是要理解在此场景中使用的两种类型的代理之间的区别:反向代理(reverse proxy)安装在您的服务器或路由器上,接受传入连接,而外部代理是一个云中的中介服务器,通过它隧道化您的流量。这两种方法各有优缺点,我们将逐一探讨。

哪些类型的代理适合Home Assistant

在选择解决方案之前,重要的是要理解Home Assistant的任务与例如套利者或SMM专家的任务是根本不同的。对于智能家居,我们需要的不是用于绕过封锁的匿名代理,而是用于远程管理的安全隧道。我们来看看不同的选项:

解决方案类型 工作原理 优点 缺点 复杂性
反向代理(Nginx/Caddy) 接受来自外部的HTTPS请求并转发到内部的HA 免费,完全控制,SSL 需要白IP或DDNS,开放443端口 中等
Cloudflare Tunnel 从HA到Cloudflare服务器的隧道,不需要端口 免费,不需要白IP,DDoS保护 流量经过Cloudflare,需要域名
VPS + 代理 租用VPS,通过它隧道化流量 自己的IP,最大控制 付费,需要配置
Nabu Casa(官方) 来自HA开发者的云服务 非常简单,支持Alexa/Google 付费订阅 ~$6.50/月 非常低
住宅代理 通过真实家庭IP路由出站流量 真实IP,不被服务阻止 适合出站流量,不适合入站流量

对于大多数Home Assistant用户,最佳选择将是Cloudflare Tunnel(免费,不需要白IP)或反向代理在Nginx/Caddy上(如果有白IP或动态DNS)。Nabu Casa适合那些完全不想处理设置的人。我们将详细探讨每个选项。

反向代理(Nginx, Caddy):逐步设置

反向代理是组织安全访问Home Assistant的经典且最灵活的方法。它安装在与HA相同的设备上(例如,Raspberry Pi或Home Assistant OS),或在家庭网络中的单独服务器上。

选项1:Caddy(推荐给新手)

Caddy是一个现代的Web服务器,可以通过Let's Encrypt自动获取和更新SSL证书。无需手动设置certbot。

步骤1:您需要什么

  • 域名(可以在DuckDNS或No-IP上免费获得)
  • 在路由器上将443端口转发到您的Home Assistant的IP
  • 已安装的Home Assistant(任何版本)

步骤2:将Caddy作为HAOS中的附加组件安装

如果您使用Home Assistant OS(HAOS),请打开设置 → 附加组件 → 附加组件商店,找到Caddy 2附加组件。安装它并进入配置。

步骤3:Caddyfile的基本配置

your-domain.duckdns.org {
    reverse_proxy localhost:8123
    
    # 额外保护:在HA前的基本身份验证
    # basicauth {
    #     admin $2a$14$密码哈希
    # }
    
    # 速率限制:每秒不超过10个请求
    rate_limit {
        zone static_zone {
            key    {remote_host}
            events 10
            window 1s
        }
    }
    
    # 安全头部
    header {
        X-Frame-Options DENY
        X-Content-Type-Options nosniff
        Referrer-Policy no-referrer
    }
}
  

步骤4:配置Home Assistant以在代理后工作

打开文件configuration.yaml,并添加以下行。这是必要的——否则HA将拒绝来自代理的请求:

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 127.0.0.1
    - ::1
  

保存后,重启Home Assistant。现在通过https://your-domain.duckdns.org访问它——连接将被加密,您路由器的真实IP将隐藏在域名后面。

选项2:Cloudflare Tunnel(无白IP)

如果您没有白IP(大多数家庭提供商通过NAT分配灰IP),Cloudflare Tunnel是理想的解决方案。您在运行Home Assistant的设备上安装一个小代理cloudflared,它会自动创建到Cloudflare服务器的加密隧道。无需在路由器上开放端口!

逐步设置:

  1. cloudflare.com上注册并添加您的域名(或使用免费的子域名)。
  2. 在Cloudflare面板中,转到零信任 → 网络 → 隧道
  3. 点击创建隧道,为隧道命名(例如,home-assistant)。
  4. 复制安装命令并在HA设备上执行(或从HAOS商店安装Cloudflared附加组件)。
  5. 公共主机名部分中输入:
    — 子域名:ha
    — 域名:您的域名
    — 服务:http://localhost:8123
  6. configuration.yaml中添加Cloudflare的受信任代理(IP范围可以在cloudflare.com/ips上找到)。
  7. 可选:启用零信任访问——在进入HA之前通过电子邮件或Google账户进行额外身份验证。

💡 提示

Cloudflare Tunnel对个人使用完全免费。唯一的限制是流量经过Cloudflare的服务器。对于智能家居管理来说,这完全可以接受,并且提供DDoS和机器人保护。

外部代理服务器:何时需要以及如何连接

外部代理服务器是一个云中的中介节点,通过它路由您的流量。在Home Assistant的上下文中,它用于一些反向代理无法覆盖的特定场景。

场景1:从企业网络访问Home Assistant

许多企业网络会阻止非标准端口和VPN连接。如果您想从工作计算机管理智能家居,而大多数连接被阻止,通过住宅代理的流量看起来就像普通家庭用户的HTTPS流量,不会引起企业防火墙的怀疑。

场景2:与地理限制服务的集成

Home Assistant可以与成千上万的外部服务集成:天气API、智能音箱、流媒体平台。其中一些服务仅在特定国家可用。例如,与Amazon Alexa或Google Assistant的集成要求服务器能够从美国或欧洲访问。在这种情况下,可以通过数据中心代理将HA的出站流量路由到所需区域。

场景3:匿名化HA的出站请求

Home Assistant定期访问外部API:检查天气、获取交通数据、与云服务同步。所有这些请求都通过您的家庭IP发送,暴露了您的位置给第三方服务。在HA的系统设置中配置出站代理可以隐藏真实IP。

如何在Home Assistant中设置出站代理:

在Home Assistant OS中,转到设置 → 系统 → 网络。在这里,您可以为所有出站连接指定HTTP/HTTPS代理。以以下格式输入代理数据:

HTTP Proxy:  http://用户:密码@代理服务器:端口
HTTPS Proxy: http://用户:密码@代理服务器:端口
  

另外,如果您在Docker中运行HA,可以在docker-compose.yml文件中设置环境变量HTTP_PROXYHTTPS_PROXY

version: '3'
services:
  homeassistant:
    image: ghcr.io/home-assistant/home-assistant:stable
    environment:
      - HTTP_PROXY=http://user:pass@proxy-server:port
      - HTTPS_PROXY=http://user:pass@proxy-server:port
      - NO_PROXY=localhost,127.0.0.1,192.168.0.0/16
    volumes:
      - ./config:/config
    network_mode: host
    restart: unless-stopped
  

请注意变量NO_PROXY——它将本地地址排除在代理之外,以便HA可以直接与您家庭网络中的设备通信。

Nabu Casa与自建代理:选择哪个

Nabu Casa是Home Assistant团队的官方云服务。它以一键解决远程访问问题:无需DNS、SSL、开放端口的设置。只需订阅即可获得类似https://您的ID.ui.nabu.casa的URL。

标准 Nabu Casa Cloudflare Tunnel Nginx/Caddy
成本 ~$6.50/月 免费 免费
设置复杂性 ⭐ 非常简单 ⭐⭐ 简单 ⭐⭐⭐ 中等
需要白IP 是(或DDNS)
自己的域名
Alexa / Google Home ✅ 内置 手动设置 手动设置
隐私 流量通过Nabu Casa的服务器 流量通过Cloudflare 完全控制
HA开发者支持 ✅ 是

总结:如果您刚开始并希望尽量减少麻烦——选择Nabu Casa。如果您希望免费解决方案而不需要白IP——选择Cloudflare Tunnel。如果重视完全控制和自己的域名——配置Nginx或Caddy。

安全检查清单:保护Home Assistant的10条规则

代理是重要但不是唯一的保护元素。以下是完整的检查清单,可以关闭大多数针对您智能家居的攻击向量:

✅ Home Assistant安全检查清单

  1. 设置代理层(Caddy、Nginx或Cloudflare Tunnel)——绝不要直接开放8123端口。
  2. 启用HTTPS——仅允许加密连接。Caddy会自动完成此操作。
  3. 使用复杂密码——至少16个字符,包含数字和特殊字符。最好使用密码管理器。
  4. 在Home Assistant中启用双因素身份验证:设置 → 用户 → 启用2FA(通过Google Authenticator或Authy的TOTP)。
  5. 在初始设置后禁用通过UI创建帐户(入门)。
  6. 在代理上设置速率限制——每个IP每分钟不超过5-10次登录尝试。
  7. 启用fail2ban或类似工具——在多次失败的登录尝试后自动阻止IP。
  8. 定期更新Home Assistant——大多数关键漏洞在发现后的24-48小时内得到修复。
  9. 将智能家居设备隔离到单独的VLAN或访客Wi-Fi网络——如果某个设备被黑客入侵,其余网络将保持安全。
  10. 禁用不必要的集成和附加组件——每个活动组件都会扩大攻击面。

附加:为Home Assistant配置fail2ban

如果您使用的是Linux系统(例如,Debian上的Home Assistant Supervised),请安装fail2ban以自动阻止攻击者的IP:

# 安装fail2ban
sudo apt install fail2ban

# 创建文件/etc/fail2ban/filter.d/hass.conf
[Definition]
failregex = ^%(__prefix_line)s.*Login attempt or request with invalid authentication from <HOST>.*$
ignoreregex =

# 在/etc/fail2ban/jail.d/hass.conf中创建规则
[hass]
enabled  = true
filter   = hass
logpath  = /config/home-assistant.log
maxretry = 5
bantime  = 3600
findtime = 600
  

该规则在10分钟内5次失败的登录尝试后将IP阻止1小时。可以收紧参数:将bantime增加到86400(24小时)或将maxretry减少到3。

监控可疑活动

Home Assistant具有内置的身份验证日志。定期通过设置 → 系统 → 日志检查它。查找包含Login attemptinvalid authentication的行。如果看到来自不熟悉的IP的尝试——这表明您的HA被扫描器发现了。

还可以设置在登录失败时通过Telegram自动通知。创建Home Assistant中的自动化:

alias: 登录失败通知
trigger:
  - platform: event
    event_type: system_log_event
    event_data:
      level: WARNING
condition:
  - condition: template
    value_template: "{{ 'Login attempt' in trigger.event.data.message }}"
action:
  - service: notify.telegram
    data:
      message: "⚠️ 尝试登录Home Assistant:{{ trigger.event.data.message }}"
  

结论

对Home Assistant的安全远程访问不是可选的“功能”,而是所有希望通过互联网管理智能家居的人的必要条件。没有保护层的开放端口不是“会被黑客入侵吗”,而是“何时会被黑客入侵”。代理层(反向代理或隧道)根本改变了局面:攻击者只能看到代理,而不是您的真实服务器和家庭网络。

关于解决方案选择的简要总结:

  • 新手,想要简单快速 → Nabu Casa或Cloudflare Tunnel
  • 有白IP,想要控制 → Caddy或Nginx作为反向代理
  • 没有白IP,想要免费 → Cloudflare Tunnel + DuckDNS
  • 最大隐私 → VPS + WireGuard隧道 + 反向代理

请记住,代理是第一道防线。通过双因素身份验证、定期更新和日志监控来补充它。智能家居在安全问题上也应该聪明。

如果除了保护入站流量外,您还需要隐藏Home Assistant对外部API的出站请求或访问地理限制集成,建议考虑住宅代理——它们提供真实的家庭IP地址,不会被云服务和API提供商阻止。

```