Tailscale 组网后如何防止内部节点被恶意扫描攻击

文章导读
最稳妥的做法是通过 Tailscale 管理后台配置访问控制列表(ACL),限制节点间的通信权限,同时在操作系统层面开启本地防火墙作为第二道防线。
📋 目录
  1. 为什么需要加固
  2. 实操步骤
  3. 怎么验证是否生效
  4. 常见坑
  5. 参考来源
A A

最稳妥的做法是通过 Tailscale 管理后台配置访问控制列表(ACL),限制节点间的通信权限,同时在操作系统层面开启本地防火墙作为第二道防线。

先说结论:默认情况下 Tailscale 网络内节点互通,需手动收缩权限以降低风险。

  • 先判断:确认哪些服务需要对外暴露,哪些仅限特定节点访问
  • 优先做:在 Admin Console 中编写 ACL 规则,默认拒绝未明确允许的流量
  • 再验证:使用受限节点尝试访问目标端口,确认策略生效

为什么需要加固

Tailscale 组建的是一个可信私有网络,默认策略倾向于方便互联,即同一网络内的 authenticated 用户设备通常可以互相访问。如果不加限制,一旦某个节点失陷,攻击者可以利用该节点扫描并攻击网络内的其他设备。通过 ACL 可以实现零信任架构,即使节点在同一网络,也需要明确授权才能通信。

实操步骤

1. 配置访问控制列表(ACL)

登录 Tailscale Admin Console,进入 Access Controls 页面。默认配置通常允许所有用户互访。你需要修改 HuJSON 格式的策略文件。以下是完整的配置模板示例,请根据实际情况修改:

{
  "groups": {
    "group:dev": ["user1@example.com", "user2@example.com"]
  },
  "hosts": {
    "db-server": "100.100.100.100"
  },
  "acls": [
    {
      "action": "accept",
      "src": ["group:dev"],
      "dst": ["db-server:22", "db-server:5432"]
    },
    {
      "action": "accept",
      "src": ["autogroup:members"],
      "dst": ["autogroup:members:22"]
    }
  ]
}

注意:ACL 策略保存后会立即下发。修改前务必备份默认配置,并确保保留对自己当前设备的访问权限(尤其是 SSH 端口),避免把自己锁在门外。

2. 开启本地防火墙

不要完全依赖 Tailscale 的 ACL,建议在操作系统层面也做限制。确保防火墙允许 tailscale0 接口的流量,但拒绝其他不必要的入站连接。

Ubuntu (UFW) 配置示例:

Tailscale 组网后如何防止内部节点被恶意扫描攻击
# 查看当前防火墙状态
sudo ufw status

# 放行 tailscale0 接口的入站流量
sudo ufw allow in on tailscale0

# 启用防火墙(确保先放行了 SSH 和 tailscale0)
sudo ufw enable

CentOS (Firewalld) 配置示例:

# 将 tailscale0 接口添加到 trusted 区域
sudo firewall-cmd `--zone`=trusted `--add-interface`=tailscale0 `--permanent`
sudo firewall-cmd `--reload`

3. 检查服务监听配置

检查节点上是否有服务监听在 0.0.0.0。如果可能,让服务只监听 localhost 或特定的 Tailscale IP。

# 查看所有监听端口及对应进程
ss -tulpn | grep LISTEN

# 筛选特定端口检查
ss -tulpn | grep 5432

如果发现敏感服务监听在 0.0.0.0,建议修改服务配置绑定到 127.0.0.1 或具体的 Tailscale IP 地址。

怎么验证是否生效

找一台不在允许列表内的设备,尝试 telnet 或 nc 连接目标端口。如果连接被拒绝或超时,说明策略生效。

# 测试端口连通性
nc -zv 100.100.100.100 5432

同时可以在 Admin Console 的 Logs 页面查看是否有被拒绝的连接尝试记录(Deny 日志)。

常见坑

  • ACL 语法错误:会导致策略无法应用,修改前建议备份默认配置,使用 JSON 校验工具检查格式。
  • 把自己锁在门外:修改 ACL 时确保保留对自己当前设备的访问权限,尤其是 SSH 端口。
  • 本地防火墙冲突:某些系统防火墙可能会拦截 tailscale0 接口的流量,需放行该接口,否则内网互通会失败。

参考来源

Tailscale Knowledge Base: Access control lists (ACLs) https://tailscale.com/kb/1018/acls/
Tailscale Knowledge Base: Firewalls https://tailscale.com/kb/1155/firewalls/