windows+wsl+OpenClaw 安装指南(七):系统安全设置
windows+wsl+OpenClaw 安装指南(七):系统安全设置 —— 防火墙与敏感信息保护
作者:技术实践派
标签:系统安全 | 防火墙 | 环境变量 | 敏感信息保护 | 密码管理
难度:⭐⭐⭐⭐☆(中高级)
阅读时间:20分钟
一、前言
在前几篇文章中,我们完成了 OpenClaw 的搭建、大模型配置和飞书集成。然而,安全是生产环境的基石——一个暴露在公网且无防护的 AI 网关,可能成为攻击者的入口。
本文将系统性地介绍 OpenClaw 部署环境的安全加固方案:
- Windows 防火墙:控制主机层面的入站/出站流量
- WSL + Ubuntu 防火墙:保护 Linux 子系统的网络边界
- 敏感信息管理:将 API Key、App Secret 等从配置文件迁移到系统环境变量
- 高阶方案预告:Vaultwarden 自托管密码管理器(后续专文详细介绍)
⚠️ 安全声明:本文面向本地/内网部署场景。如需公网部署,建议增加反向代理(Nginx/Caddy)、HTTPS 证书、DDoS 防护等额外安全措施。
二、Windows 防火墙配置
2.1 当前网络风险评估
在默认安装情况下,OpenClaw 存在以下潜在风险:
| 风险点 | 说明 | 风险等级 |
|---|---|---|
| Gateway 端口暴露 | 18789 端口可能被局域网内其他设备扫描 | 中 |
| Ollama 端口暴露 | 11434 端口若绑定 0.0.0.0 则全网可达 | 高 |
| 配置文件明文存储 | API Key、App Secret 以明文保存 | 中 |
| 无网络隔离 | WSL 与 Windows 网络互通,攻击可能横向移动 | 中 |
2.2 配置 Windows Defender 防火墙
步骤 1:查看当前防火墙状态
# 以管理员身份运行 PowerShell
Get-NetFirewallProfile | Select-Object Name, Enabled
预期输出:
Name Enabled
---- -------
Domain True
Private True
Public True
确保所有网络类型的防火墙均已启用。
步骤 2:创建 OpenClaw Gateway 入站规则
# 创建入站规则 - 仅允许本地访问
New-NetFirewallRule `
-DisplayName "OpenClaw-Gateway-Localhost" `
-Direction Inbound `
-LocalPort 18789 `
-Protocol TCP `
-RemoteAddress 127.0.0.1 `
-Action Allow `
-Profile Any
# 如需允许局域网访问(谨慎使用)
New-NetFirewallRule `
-DisplayName "OpenClaw-Gateway-LAN" `
-Direction Inbound `
-LocalPort 18789 `
-Protocol TCP `
-RemoteAddress LocalSubnet `
-Action Allow `
-Profile Private
参数说明:
| 参数 | 值 | 说明 |
|---|---|---|
RemoteAddress 127.0.0.1 |
仅本地回环 | 最安全,仅限本机访问 |
RemoteAddress LocalSubnet |
局域网子网 | 允许同网段设备访问 |
RemoteAddress Any |
任意地址 | 不推荐,风险最高 |
步骤 3:创建 Ollama 防火墙规则
Ollama 默认监听 11434 端口,若配置为 0.0.0.0:11434,必须严格限制访问:
# 仅允许 WSL 访问 Ollama(推荐配置)
# 首先获取 WSL 虚拟网卡的 IP 范围
$wslSubnet = "172.20.0.0/16" # 根据实际 WSL 子网调整
New-NetFirewallRule `
-DisplayName "Ollama-WSL-Only" `
-Direction Inbound `
-LocalPort 11434 `
-Protocol TCP `
-RemoteAddress $wslSubnet `
-Action Allow `
-Profile Any
# 阻止其他所有入站连接(显式拒绝规则)
New-NetFirewallRule `
-DisplayName "Ollama-Block-Others" `
-Direction Inbound `
-LocalPort 11434 `
-Protocol TCP `
-RemoteAddress Any `
-Action Block `
-Profile Any
💡 提示:防火墙规则按优先级匹配,允许规则应在阻止规则之前创建。
步骤 4:验证规则生效
# 查看所有 OpenClaw 相关规则
Get-NetFirewallRule -DisplayName "*OpenClaw*", "*Ollama*" |
Select-Object DisplayName, Direction, Action, Enabled
# 测试端口连通性(从另一台机器)
# telnet <windows-ip> 18789 # 应连接失败或被拒绝
2.3 高级:使用 netsh 命令行
对于脚本化部署,使用 netsh 更简洁:
# 添加入站规则(仅本地)
netsh advfirewall firewall add rule `
name="OpenClaw-Gateway-Local" `
dir=in action=allow `
protocol=TCP localport=18789 `
remoteip=127.0.0.1
# 删除规则
netsh advfirewall firewall delete rule name="OpenClaw-Gateway-Local"
# 导出防火墙配置(备份)
netsh advfirewall export "$env:USERPROFILE\firewall-backup.wfw"
三、WSL + Ubuntu 防火墙配置
3.1 WSL 网络架构回顾
Windows 主机 (192.168.1.100)
│
├── WSL2 虚拟网卡 (172.20.0.1)
│ │
│ └── Ubuntu (172.20.133.41)
│ └── OpenClaw Gateway (:18789)
│
└── Windows 防火墙(控制入站流量)
WSL2 使用虚拟网卡与 Windows 通信,因此需要双层防护:
- Windows 防火墙控制外部流量进入 WSL
- Ubuntu 防火墙(ufw)控制 WSL 内部流量
3.2 安装和配置 UFW
步骤 1:安装 ufw
# 在 WSL Ubuntu 中执行
sudo apt-get update
sudo apt-get install -y ufw
步骤 2:配置默认策略
# 默认拒绝所有入站,允许所有出站
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 允许 SSH(如需要远程管理 WSL)
sudo ufw allow 22/tcp
步骤 3:配置 OpenClaw 规则
# 允许本地回环访问(Dashboard 使用)
sudo ufw allow from 127.0.0.1 to any port 18789
# 允许 Windows 主机访问(通过 WSL 虚拟网卡)
# 172.20.0.1 是 Windows 在 WSL 网络中的 IP
sudo ufw allow from 172.20.0.1 to any port 18789
# 如需允许特定网段(例如 Docker 网络)
sudo ufw allow from 172.17.0.0/16 to any port 18789
步骤 4:启用防火墙
# 检查规则(试运行,不实际阻断)
sudo ufw show added
# 启用防火墙(会提示确认)
sudo ufw enable
# 查看状态
sudo ufw status verbose
预期输出:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
18789 ALLOW IN 127.0.0.1
18789 ALLOW IN 172.20.0.1
3.3 WSL 特定注意事项
问题 1:WSL IP 地址动态变化
WSL 重启后 IP 可能变化,硬编码 IP 不可靠。
解决方案:使用脚本自动更新规则
#!/bin/bash
# /usr/local/bin/update-ufw-wsl.sh
# 获取当前 Windows IP(WSL 视角的网关)
WINDOWS_IP=$(ip route show default | grep -oP '(?<=via )\d+\.\d+\.\d+\.\d+')
# 删除旧规则(保留注释标识)
sudo ufw delete allow from any to any port 18789 comment 'windows-host' 2>/dev/null
# 添加新规则
sudo ufw allow from $WINDOWS_IP to any port 18789 comment 'windows-host'
echo "UFW 规则已更新: $WINDOWS_IP -> :18789"
添加到启动脚本:
# 编辑 .bashrc 或创建 systemd 服务
echo "/usr/local/bin/update-ufw-wsl.sh" >> ~/.bashrc
问题 2:WSL 与 Windows 防火墙的交互
WSL2 的虚拟网卡绕过了部分 Windows 防火墙规则。
解决方案:在 Windows 侧控制 WSL 虚拟网卡
# 获取 WSL 虚拟网卡名称
Get-NetAdapter | Where-Object { $_.InterfaceDescription -like "*WSL*" }
# 为 WSL 网卡配置专用防火墙配置文件
Set-NetConnectionProfile -InterfaceAlias "vEthernet (WSL)" -NetworkCategory Private
四、敏感信息管理:配置文件 → 环境变量
4.1 为什么需要迁移?
当前风险:
# config.env - 明文存储敏感信息
TENCENT_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
FEISHU_APP_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- 版本控制风险:容易误提交到 Git
- 文件权限风险:配置文件可能被其他用户读取
- 备份风险:备份文件可能包含明文密钥
4.2 Windows 系统环境变量配置
步骤 1:设置用户级环境变量
# 设置腾讯混元 API Key
[Environment]::SetEnvironmentVariable(
"OPENCLAW_TENCENT_API_KEY",
"sk-your-api-key-here",
"User"
)
# 设置飞书 App Secret
[Environment]::SetEnvironmentVariable(
"OPENCLAW_FEISHU_APP_SECRET",
"your-app-secret-here",
"User"
)
# 设置 Gateway Token
[Environment]::SetEnvironmentVariable(
"OPENCLAW_GATEWAY_TOKEN",
"your-secure-token",
"User"
)
# 验证设置
[Environment]::GetEnvironmentVariable("OPENCLAW_TENCENT_API_KEY", "User")
步骤 2:配置 config.env 读取环境变量
修改 config.env 使用变量引用:
# ============================================
# OpenClaw 配置 - 使用环境变量
# ============================================
# 基础配置
GATEWAY_PORT=18789
GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN}
WSL_DISTRO=Ubuntu-24.04
WSL_USER=demo
# 腾讯混元配置
USE_TENCENT_HUNYUAN=true
TENCENT_API_KEY=${OPENCLAW_TENCENT_API_KEY}
TENCENT_MODEL=hunyuan-turbos
# 飞书配置
ENABLE_FEISHU=true
FEISHU_APP_ID=cli_xxxxxxxxxxxxxxxx
FEISHU_APP_SECRET=${OPENCLAW_FEISHU_APP_SECRET}
FEISHU_CONNECTION_MODE=websocket
FEISHU_DM_POLICY=open
4.3 PowerShell 安装脚本读取环境变量
修改自动化脚本,优先从环境变量读取:
# auto-install-openclaw.ps1 片段
function Get-ConfigValue {
param(
[string]$Key,
[string]$EnvVarName,
[string]$DefaultValue = ""
)
# 优先从环境变量读取
$envValue = [Environment]::GetEnvironmentVariable($EnvVarName, "User")
if ($envValue) {
Write-Log "从环境变量读取 $Key" "INFO"
return $envValue
}
# 其次从配置文件读取
if ($config[$Key]) {
return $config[$Key]
}
# 最后使用默认值
return $DefaultValue
}
# 使用示例
$TencentApiKey = Get-ConfigValue -Key "TENCENT_API_KEY" -EnvVarName "OPENCLAW_TENCENT_API_KEY"
$FeishuSecret = Get-ConfigValue -Key "FEISHU_APP_SECRET" -EnvVarName "OPENCLAW_FEISHU_APP_SECRET"
4.4 WSL 环境变量传递
方式 1:通过 wsl.conf 传递
# /etc/wsl.conf
[interop]
appendWindowsPath = true
[boot]
systemd = true
方式 2:在 WSL 脚本中读取 Windows 环境变量
#!/bin/bash
# wsl-install.sh 片段
# 从 Windows 注册表读取环境变量(需安装 powershell 或 cmd 工具)
get_windows_env() {
local var_name=$1
cmd.exe /c "echo %$var_name%" 2>/dev/null | tr -d '\r'
}
# 读取 Windows 环境变量
TENCENT_API_KEY=$(get_windows_env "OPENCLAW_TENCENT_API_KEY")
FEISHU_APP_SECRET=$(get_windows_env "OPENCLAW_FEISHU_APP_SECRET")
GATEWAY_TOKEN=$(get_windows_env "OPENCLAW_GATEWAY_TOKEN")
# 验证读取成功
if [ -z "$TENCENT_API_KEY" ] || [ "$TENCENT_API_KEY" = "%OPENCLAW_TENCENT_API_KEY%" ]; then
echo "[ERROR] 无法从 Windows 环境变量读取 API Key"
exit 1
fi
echo "[OK] 已从 Windows 环境变量读取配置"
方式 3:使用 .env 文件(推荐开发环境)
# 在 WSL 中创建 .env 文件(设置严格权限)
touch ~/.openclaw/.env
chmod 600 ~/.openclaw/.env
# 写入环境变量
cat > ~/.openclaw/.env << EOF
OPENCLAW_TENCENT_API_KEY=sk-xxx
OPENCLAW_FEISHU_APP_SECRET=xxx
EOF
# 在启动脚本中加载
source ~/.openclaw/.env
4.5 安全最佳实践
| 实践 | 说明 | 优先级 |
|---|---|---|
| 环境变量优先 | 脚本优先从环境变量读取敏感信息 | ⭐⭐⭐⭐⭐ |
| 配置文件脱敏 | config.env 中不存放真实密钥 | ⭐⭐⭐⭐⭐ |
| 权限控制 | 敏感文件设置 600 权限 | ⭐⭐⭐⭐ |
| 定期轮换 | API Key 每 90 天更换一次 | ⭐⭐⭐⭐ |
| 审计日志 | 记录敏感操作(访问、修改) | ⭐⭐⭐ |
五、高阶方案:Vaultwarden 自托管密码管理(预告)
5.1 为什么需要密码管理器?
对于团队部署,面临更多挑战:
- 多人共享:API Key 需要安全地在团队内共享
- 权限分级:不同成员访问不同级别的密钥
- 离职交接:员工离职时快速回收和轮换密钥
- 审计追踪:谁访问了什么密钥,何时访问的
5.2 Vaultwarden 简介
Vaultwarden 是 Bitwarden 的轻量级自托管替代品:
- 开源免费:基于 Rust 实现,资源占用低
- 功能完整:支持密码库、组织/集合、访问控制
- API 支持:可通过 API 获取机密,实现自动化
- 自托管:数据完全掌控在自己手中
5.3 架构预览
┌─────────────────────────────────────────────────────────────────┐
│ Windows 宿主机 │
│ ┌──────────────────────┐ ┌─────────────────────────────┐ │
│ │ OpenClaw Gateway │◄────►│ Vaultwarden (Docker/WSL) │ │
│ │ (读取 API Key) │ │ (密码/机密存储) │ │
│ └──────────────────────┘ └─────────────────────────────┘ │
│ │ │
│ ┌──────────▼──────────┐ │
│ │ 团队密码库 │ │
│ │ - API Keys │ │
│ │ - App Secrets │ │
│ │ - Certificates │ │
│ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
5.4 后续专文预告
我们将在后续文章中详细介绍:
- Vaultwarden 部署:Docker Compose 一键部署
- 组织架构配置:团队、集合、权限分级
- API 集成:OpenClaw 通过 API 动态获取密钥
- 安全加固:2FA、主密码策略、会话管理
- 备份恢复:机密数据的备份与灾难恢复
📌 关注博主,不错过 Vaultwarden 专文更新!
六、安全加固检查清单
6.1 部署前检查
□ Windows 防火墙已启用(所有网络类型)
□ OpenClaw Gateway 端口限制为本地/局域网访问
□ Ollama 端口严格限制为 WSL 访问
□ UFW 已在 WSL 中启用并配置规则
□ 敏感信息已从 config.env 迁移到环境变量
□ config.env 已添加到 .gitignore
□ API Key 已设置轮换提醒(建议 90 天)
6.2 定期审计命令
# Windows 侧
# 查看 OpenClaw 相关防火墙规则
Get-NetFirewallRule -DisplayName "*OpenClaw*", "*Ollama*" |
Format-Table DisplayName, Direction, Action, Enabled
# 检查环境变量设置
Get-ChildItem Env: | Where-Object { $_.Name -like "*OPENCLAW*" }
# WSL 侧
# 检查 UFW 状态
sudo ufw status numbered
# 检查敏感文件权限
ls -la ~/.openclaw/
# 应显示:-rw------- (600) 权限
# 查看当前监听端口
ss -tlnp | grep -E "(18789|11434)"
6.3 应急响应
发现 API Key 泄露时:
- 立即撤销:在腾讯云控制台吊销 API Key
- 快速轮换:生成新 Key 并更新环境变量
- 审计日志:检查异常调用记录
- 重启服务:使新配置生效
- 复盘改进:分析泄露原因,加强安全措施
# 快速轮换脚本示例
$newKey = "sk-new-api-key-here"
[Environment]::SetEnvironmentVariable("OPENCLAW_TENCENT_API_KEY", $newKey, "User")
wsl -d Ubuntu-24.04 -e systemctl --user restart openclaw-gateway.service
七、总结
本文系统介绍了 OpenClaw 部署环境的安全加固方案:
| 层级 | 措施 | 效果 |
|---|---|---|
| Windows 防火墙 | 限制 18789/11434 端口入站 | 阻止外部扫描和访问 |
| WSL UFW | 仅允许 Windows 主机访问 | 双层网络隔离 |
| 环境变量 | 敏感信息脱离配置文件 | 防止版本控制泄露 |
| 权限控制 | 文件 600、定期轮换 | 最小权限原则 |
| 高阶方案 | Vaultwarden 自托管 | 团队级机密管理 |
安全是一个持续的过程,而非一次性任务。建议每季度进行一次安全审计,及时更新防火墙规则和轮换密钥。
下篇预告:
《windows+wsl+OpenClaw 安装指南(八):VS Code 自动化安装实战》—— IDE 集成、远程开发、DevContainer 配置,打造一站式开发体验。
参考文献
Windows 安全
[1] Microsoft. Windows Defender 防火墙文档. https://docs.microsoft.com/zh-cn/windows/security/threat-protection/windows-firewall/windows-firewall-with-advanced-security [EB/OL]. 2024.
[2] Microsoft. PowerShell 网络安全模块. https://docs.microsoft.com/zh-cn/powershell/module/netsecurity/ [EB/OL]. 2024.
[3] Microsoft. netsh 命令参考. https://docs.microsoft.com/zh-cn/windows-server/networking/technologies/netsh/netsh-contexts [EB/OL]. 2024.
Linux 防火墙
[4] Ubuntu Wiki. UFW - Uncomplicated Firewall. https://help.ubuntu.com/community/UFW [EB/OL]. 2024.
[5] Ubuntu Manpages. ufw(8). https://manpages.ubuntu.com/manpages/jammy/en/man8/ufw.8.html [EB/OL]. 2024.
环境变量与配置管理
[6] 12-Factor App 方法论(中文). https://12factor.net/zh_cn/config [EB/OL]. 2024.
[7] Microsoft. 环境变量管理. https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_environment_variables [EB/OL]. 2024.
[8] OWASP. Secrets Management Cheat Sheet. https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html [EB/OL]. 2024.
密码管理器
[9] Vaultwarden GitHub Repository. https://github.com/dani-garcia/vaultwarden [EB/OL]. 2024.
[10] Bitwarden API Documentation. https://bitwarden.com/help/api/ [EB/OL]. 2024.
安全最佳实践
[11] NIST. Security and Privacy Controls. SP 800-53 Rev. 5. https://csrc.nist.gov/publications/detail/sp/800-53/rev-5/final [EB/OL]. 2020.
[12] CIS. Windows 10 Benchmark. https://www.cisecurity.org/benchmark/windows [EB/OL]. 2024.
[13] OWASP. Top 10 Web Application Security Risks. https://owasp.org/www-project-top-ten/ [EB/OL]. 2021.
本文完,敬请期待下篇。
系列文章导航:
- 📎 上一篇:06-飞书集成与企业部署(待上传后添加链接)
- 📎 下一篇:08-VS Code 自动化安装实战(待上传后添加链接)
- 📂 系列目录:windows+wsl+OpenClaw 安装指南
觉得有帮助?
- 👍 点个赞支持一下
- ⭐ 收藏备用
- ✅ 关注博主,不错过后续更新
- 💬 有问题欢迎在评论区留言
更多推荐



所有评论(0)