#Windows11 #OpenSSH #防火墙 #最小权限 #安全审计

背景与结论

旧工作节点 milin_win11 长期承担过本地模型、OCR、WSL 和远程维护实验。用途变化后,机器上留下了重复 SSH 启动链、失效端口转发、临时模型发布任务、空 Ollama 服务、宽泛第三方入站规则和测试管理员账户。

本轮没有按“看到监听就停服务”的方式处理,而是先建立受限日常入口和独立管理员维护入口,再按账户、任务、端口、规则、模型与安全基线逐项取证。最终完成以下收口:

  • 日常 SSH 使用标准账户 milin_auto,保持非管理员 token,并禁止端口转发;管理员入口仅用于明确维护。

  • 删除失效的 2222/18789 portproxy、模型 blob HTTP 发布任务、重复 SSH 启动任务和过期 WSL 关机任务。

  • 停止空 Ollama 的登录自启动与 LAN 暴露,但保留软件和未来测试所需模型资产。

  • 删除遗留管理员 sshtest,并把 SSH、ASUS、Logitech、Steam 相关入站规则收敛到实际用途。

  • 计划重启后再次验证任务、账户、规则、Startup 和 SSH 边界,确认清理结果持久。

最终从 N100 访问旧工作节点时,仅 SSH 22 在本轮目标端口中开放;2222、8080、9012、9013、11434、18789、59885 均不可达。RDP、SMB、Hyper-V、远控软件和系统升级不与本轮混合处理。


一、先拆分日常入口与维护入口

原始风险不是 SSH 本身,而是日常自动化和管理员权限共用同一入口。治理后的边界是:

入口 身份 用途 关键限制
milin_win11 milin_auto 日常只读审计、受限自动化 非管理员,密钥带 restrict,禁止转发
milin_win11_admin 管理员账户 明确授权的系统维护 不作为默认入口

重启后用新连接验证标准入口仍为非管理员;direct-tcpip 请求由服务端明确返回 administratively prohibited。管理员入口也保持可用,因此后续修改不会因单一凭据或单一路径失效而锁死机器。

Windows OpenSSH 的管理员密钥、ACL 和部署注意事项见 《Windows ssh-copy-id 实现与部署》

二、把监听还原到启动链和规则

只看端口无法判断是否可以删除。本轮把每个候选还原为“监听进程—启动来源—防火墙规则—实际调用方”:

候选 取证结论 处理
2222 portproxy 转发到无服务的本机端口,已有官方 SSH 22 删除精确映射和对应规则
18789 portproxy 本机不是 OpenClaw 生产节点,后端不存在 删除精确映射
PythonHTTP 无认证发布模型 blob 目录 备份任务 XML 后删除
SSHDServer 与官方 sshd 服务重复,曾造成端口竞争 备份后删除
WslShutdown 一次性触发已过期、失败且无下次运行 核对 WSL 后删除任务,不停 WSL 服务
Ollama Startup 无模型服务需求却监听 LAN 移出双 Startup,移除 OLLAMA_HOST,保留软件

这里有一个重要更正:受限账户最初看到的 WSL 空列表不能证明系统没有发行版。管理员复核确认 Ubuntu 仍存在,因此删除 WslShutdown 的依据只能是任务本身已过期、失败且无下一次运行,不能据此删除 WSL 或其数据。

三、第三方程序规则只收窄网络面

ASUS Armoury 和 Logitech Options+ 仍有本机功能用途,因此没有停进程、卸载软件或删除 Startup。处理只针对 LAN 暴露:

  • ASUS 两个本地调试/Socket 程序规则的远端地址限制为 127.0.0.1

  • Logitech Agent 的主允许规则同样限制为 127.0.0.1

  • 因套件还有其它宽泛规则,首次复测 59885 仍可达;新增一个仅绑定 Agent 程序、TCP 59885、LocalSubnet 的阻断规则,关闭残余入口。

  • Steam 的两条所有 profile、任意端口入站规则删除;Steam 进程、登录启动和出站能力保留。

官方 OpenSSH 入站规则继续保留。将它进一步收窄到固定管理来源,需要先完成 DHCP reservation 和稳定内网回退路径,因此被拆成后续独立维护阶段。

四、账户删除必须先证明没有引用

遗留 sshtest 属于 Administrators 和 Users,但没有 profile,也没有 SSH、服务或计划任务引用。删除流程是:

  1. 保存账户 SID、组关系和零引用证据,备份目录 ACL 仅允许 SYSTEM 与 Administrators。

  2. 先禁用账户。

  3. 用标准和管理员两个新 SSH 连接验证维护路径。

  4. 永久删除账户,再复查 SID、组成员、profile 和 SSH 引用。

账户删除不能靠备份恢复原 SID 或密码,因此“先禁用并验证”比事后回滚更重要。

五、重启是持久性验收,不是形式步骤

不重启验收只能证明当前 ActiveStore 和当前进程状态。计划重启后重新检查得到:

  • 官方 sshd 为 Running、Automatic、LocalSystem,单一主 PID 同时监听 IPv4/IPv6 22。

  • PythonHTTPSSHDServerWslShutdownsshtest 均未复生。

  • portproxy 仍为空;冗余 SSH 与 Steam 入站规则未复生。

  • ASUS/Logitech 收窄和 59885 阻断规则持久。

  • Ollama Startup 与 OLLAMA_HOST 未复生;无 Ollama/llama runtime。

  • WSL 没有运行实例,Docker 保持按需启动;三个既有 KEEP 模型完整保留。

  • Defender 的防病毒、实时、行为、IOAV、网络、脚本扫描和 PUA 保护保持开启。

这次重启也验证了一个容易误判的细节:SSH -L 可以先在客户端建立本地监听,只有产生实际转发流量时服务器才会裁决。验证 restrict 应发送真实 direct-tcpip 请求,并以服务端的行政拒绝为准。

最终边界

当前阶段已经完成遗留监听、账户、任务、模型 runtime、磁盘空间和安全基线审计,并完成已授权的确定性清理。后续只保留两个独立事项:

  1. 在稳定家庭内网和路由器回退通道就绪后,收窄官方 SSH 规则的管理来源。

  2. 把已过支持期的 Windows 版本升级作为独立项目,单独评估备份、兼容性、磁盘空间和回滚。

这两个事项都不应重新打开本轮已经冻结的账户与监听清理范围。