Skip to content
twinkling.top安全EN

加固与暴露面

家庭机架最常见的失守方式不是被打穿,而是某个管理面板被转发到了公网。所以先看端口:下面是全部已发布服务里对公网开放的端口——目前只有反向代理和 VPN 两个入口,其余一律只监听局域网或用 WireGuard 进来。

对公网开放

服务端口用途
WireGuard (wg-easy):51820the tunnel itself; the only UDP port forwarded at the router
Caddy:80ACME HTTP-01 challenge and the permanent redirect to https
Caddy:443every web front end on the rack, one hostname each

出现最多的加固规则

  1. 关闭注册,账号只能由管理员创建
  2. git 的 SSH 端口是 2222 而不是 22,这样被封锁或被误转发的 22 端口永远不会意外打到仓库服务上
  3. 管理员账号强制开启双因素;在用的 API 令牌除备份任务那一个外全部只读
  4. 启用了 LFS 但对象存储保持在本地;大二进制文件在贡献说明里被劝阻,而不是悄悄把固态盘填满
  5. 匿名访问关闭,管理员密码在首次启动时由环境变量提供
  6. 数据源使用只读的 Prometheus 账号,被攻陷的仪表盘也写不了指标
  7. 面板受代理层的仅局域网规则保护,从不做端口转发
  8. 关闭公开仪表盘功能,这里没有任何需要公开分享的东西
  9. 建完家庭成员的账号后关闭注册,任何人找到这个网址也进不来
  10. 上传只在局域网内或通过 WireGuard 进行,不做端口转发
  11. 数据库只在容器网络内监听,完全不发布端口
  12. 机器学习容器不发布端口,除首次启动下载模型外不需要外网
  13. 后台只在局域网可达,并在代理层再加一道基本认证,从不做端口转发
  14. 一台设备一个客户端配置,并且命名,这样手机丢失时只需删掉对应的那一份

三条不写在 compose 里的规矩

  • 管理面板默认只监听 127.0.0.1,需要时用 SSH 端口转发过去看,不做 0.0.0.0 转发
  • 密码与 API key 只放在 /srv/homelab/.env 里,权限 600,compose 用 env_file 读,不写进仓库
  • 每季度做一次演练:随机停掉一个容器,只用备份把它恢复到新 SD 卡上