公网家庭服务器安全部署方案

—— UFW + Tailscale + Caddy 反向代理完整实践

在 IPv6 普及的今天,家庭宽带已经可以直接获得公网 IPv6 地址。这意味着:

你的设备不再躲在 NAT 后面,而是真正暴露在公网。

如果不加防护,基本等于裸奔。

本文记录一套完整、安全、可长期运行的家庭服务器架构:

  • Debian 13
  • 公网 IPv6 + DDNS
  • UFW 精细化防火墙控制
  • Tailscale 内网穿透
  • Caddy 反向代理网关
  • 统一通过 mini.keepon.fun/{服务名} 访问

一、我的网络环境

主机网络信息如下:

1
2
3
4
公网接口:enp2s0
IPv4 内网:192.168.1.10/24
IPv6 公网:2409:xxxx:xxxx::/64
Tailscale 接口:tailscale0

域名:

1
mini.keepon.fun

通过 DDNS 解析到公网 IPv6。


二、整体架构设计

最终目标架构如下:

1
2
3
4
5
6
7
8
9
公网 IPv6

UFW(默认拒绝)

仅放行 80 / 443

Caddy 反向代理

内部服务(127.0.0.1:端口)

内网访问:

1
LAN 或 Tailscale → 直接访问内部服务

核心原则:

  • 默认拒绝所有公网入站
  • 只暴露 80 / 443
  • 所有服务不直接暴露公网端口
  • 所有内部服务只监听 127.0.0.1
  • Tailscale 不受限制

三、UFW 防火墙设计

1️⃣ 启用 IPv6 支持

编辑:

1
/etc/default/ufw

确保:

1
IPV6=yes

2️⃣ 重置并初始化

1
2
3
sudo ufw reset
sudo ufw default deny incoming
sudo ufw default allow outgoing

3️⃣ 放行 Tailscale

1
sudo ufw allow in on tailscale0

4️⃣ 放行局域网

1
2
sudo ufw allow from 192.168.1.0/24
sudo ufw allow from fd00::/8

5️⃣ 只开放公网 80 和 443

1
2
sudo ufw allow in on enp2s0 to any port 80 proto tcp
sudo ufw allow in on enp2s0 to any port 443 proto tcp

最终 ufw status 结构如下:

1
2
3
4
5
6
7
8
Default: deny (incoming)

ALLOW:
- tailscale0
- 192.168.1.0/24
- fd00::/8
- 80/tcp (v6)
- 443/tcp (v6)

此时:

  • 公网 IPv6 只开放 80 / 443
  • 所有其他端口默认拒绝
  • 8096 等内部端口不再暴露

四、部署 Caddy 作为网关

为什么选 Caddy?

  • 自动申请 HTTPS 证书
  • 自动续期
  • 原生支持 IPv6
  • 配置简单
  • 默认安全

安装 Caddy

1
sudo apt install caddy

Caddyfile 示例

编辑:

1
/etc/caddy/Caddyfile

示例配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mini.keepon.fun {

encode gzip

# 修正 /jellyfin 访问问题
redir /jellyfin /jellyfin/ 308

handle_path /jellyfin/* {
reverse_proxy 127.0.0.1:8096
}

handle_path /blog/* {
reverse_proxy 127.0.0.1:3000
}
}

重载:

1
sudo systemctl reload caddy

五、重要坑点说明

坑 1:路径匹配问题

/jellyfin/* 不匹配 /jellyfin

必须添加:

1
redir /jellyfin /jellyfin/ 308

否则访问会 404。


坑 2:Caddy 默认启用 HTTPS

Caddy 会自动:

  • 申请证书
  • 强制 HTTP → HTTPS 重定向

如果 443 未开放,就会访问失败。


坑 3:IPv6 没有 NAT

很多人误以为:

“我在路由器后面,很安全”

IPv6 没有 NAT。

你的主机是真公网设备。

必须依赖防火墙。


六、最终安全模型

公网:

1
2
80  → Caddy
443 → Caddy

内部:

1
2
127.0.0.1:8096 (Jellyfin)
127.0.0.1:3000 (Blog)

Tailscale:

1
完全放行

局域网:

1
完全放行

七、安全等级评估

当前方案安全等级:

⭐⭐⭐⭐☆(家庭服务器高等级)

优点:

  • 默认拒绝公网
  • 只暴露 443
  • 自动 HTTPS
  • 内部服务隐藏
  • Tailscale 隔离

如果再加:

  • fail2ban
  • rate limit
  • HSTS
  • 关闭 Caddy 示例站点

可达到:

⭐⭐⭐⭐⭐


八、总结

这套架构实现了:

  • IPv6 公网安全暴露
  • 精细化防火墙控制
  • 零信任内网访问
  • 统一网关管理
  • 自动 HTTPS

它适合:

  • 家庭服务器
  • 轻量 VPS
  • 个人云
  • 开发环境

如果一句话总结:

不再裸奔公网,而是用网关做唯一入口。