Windows 旧工作节点最小权限 SSH 与遗留监听治理
#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、服务或计划任务引用。删除流程是:
-
保存账户 SID、组关系和零引用证据,备份目录 ACL 仅允许 SYSTEM 与 Administrators。
-
先禁用账户。
-
用标准和管理员两个新 SSH 连接验证维护路径。
-
永久删除账户,再复查 SID、组成员、profile 和 SSH 引用。
账户删除不能靠备份恢复原 SID 或密码,因此“先禁用并验证”比事后回滚更重要。
五、重启是持久性验收,不是形式步骤
不重启验收只能证明当前 ActiveStore 和当前进程状态。计划重启后重新检查得到:
-
官方
sshd为 Running、Automatic、LocalSystem,单一主 PID 同时监听 IPv4/IPv6 22。 -
PythonHTTP、SSHDServer、WslShutdown和sshtest均未复生。 -
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、磁盘空间和安全基线审计,并完成已授权的确定性清理。后续只保留两个独立事项:
-
在稳定家庭内网和路由器回退通道就绪后,收窄官方 SSH 规则的管理来源。
-
把已过支持期的 Windows 版本升级作为独立项目,单独评估备份、兼容性、磁盘空间和回滚。
这两个事项都不应重新打开本轮已经冻结的账户与监听清理范围。
