# 服务器暴露面清单(常设) > **定位**:跨迭代常设文档——服务器上**每个对公网开放的端口**与**每个常驻服务**都必须在此登记:用途、归属决策、谁在用、最后确认日期。 > **缘起**:2026-09-11 的[安全事件](iterations/iteration-3.5/07-security-incident-20260911.md)——Nacos 在 ADR-002 已将其从项目移除后,进程与防火墙规则仍暴露公网近两个月。代码侧有 ADR + 契约测试防「决策变了实现没跟上」,服务器侧此前无任何对应机制,本页即为补上这一环。 > **维护约定**:① 新开端口/新增常驻服务必须先在此登记;② 每次迭代收官核对一遍,更新「最后确认」;③ 登记不出理由的开放端口,默认删除。 --- ## 1. 对公网开放的端口(2026-09-11 核对) | 端口 | 协议 | 用途 | 谁在用 | 归属决策 | 最后确认 | | --- | --- | --- | --- | --- | --- | | 22 | TCP | SSH 登录与 git push/pull(三仓 remote 均为 SSH) | 维护者、本机 git | —— | 2026-09-11 | | 80 | TCP | HTTP(跳转 443) | nginx | —— | 2026-09-11 | | 443 | TCP | HTTPS:Gitea Web/API、CI checkout、act_runner 回连 | nginx → 127.0.0.1:3000 | [CI Runner 手册](ci-runner-setup.md) | 2026-09-11 | | ICMP | —— | ping 连通性 | 运维排查 | —— | 2026-09-11 | **已于 2026-09-11 关闭**(记录在此以防重开): | 端口 | 原用途 | 关闭原因 | | --- | --- | --- | | 3000 | Gitea HTTP 直连 | **本次安全事件入口**;nginx 已从 127.0.0.1 反代,无需公网暴露 | | 8848 / 9848 | Nacos HTTP / gRPC | 项目已由 **ADR-002** 移除 Nacos;暴露公网近两个月,且 Nacos 历史高危漏洞多(默认凭证、鉴权绕过、反序列化 RCE) | | 2222 | 不明(疑为早期 Gitea 内建 SSH) | `ss -tlnp` 确认无任何服务监听,空规则即无谓攻击面 | ## 2. 常驻服务 | 服务 | 监听 | 用途 | 归属决策 | 状态 | | --- | --- | --- | --- | --- | | gitea | **127.0.0.1:3000** | 代码托管 + Actions 调度 | [CI Runner 手册](ci-runner-setup.md) | ✅ 运行(2026-09-11 起改为仅本机监听) | | nginx | 0.0.0.0:80/443 | 反向代理,按域名分流 | —— | ✅ 运行 | | act_runner(容器) | 无监听(主动回连) | Gitea Actions 执行器 | [CI Runner 手册](ci-runner-setup.md) | ✅ 运行 | | dockerd / containerd | 本机 socket | 容器运行时(runner 与 job 容器) | ADR-006 | ✅ 运行 | | sshd | 0.0.0.0:22 | SSH | —— | ✅ 运行 | | 腾讯云 agent(barad_agent / YDEyes / YDLive / stargate) | —— | 云监控与主机安全,云厂商预装 | —— | ✅ 运行(预期存在) | | **nacos** | ~~*:8848 / *:9848~~ | **项目已不使用** | **ADR-002 已移除** | ⛔ 已停止;`nacos.service` 仍为 enabled,**待 `systemctl disable`** | ## 3. 核对方法 ```bash # 开放端口与监听服务 sudo ss -tlnp # 云平台防火墙规则:腾讯云轻量服务器控制台 → 防火墙(轻量无安全组) # 常驻服务与自启项 systemctl list-unit-files --state=enabled | grep -viE "^(systemd|dbus|network|cloud|snap|apt|unattended|multipathd|open-iscsi|lvm2|rsyslog|cron|ssh)" docker ps -a # 异常检查(安全事件后例行) ps aux --sort=-%cpu | head -15 crontab -l; sudo crontab -l cat ~/.ssh/authorized_keys sudo last -20 ``` ## 4. 纪律 1. **默认拒绝**:新服务一律只监听 `127.0.0.1`,需要外部访问时经 nginx 反代 + 域名分流,不直接开端口。 2. **内部 API 不得对外**:Gitea 的 `/api/internal/**` 属内部通道(SSH serv 命令等经 127.0.0.1 调用),nginx 层应显式拒绝——本次事件的注入正是走这条路径。 3. **决策与环境同步**:ADR 决定移除某组件时,**同一次收口内**必须停服务、禁自启、删防火墙规则,并更新本页。 4. **凭证轮换触发条件**:任何「外部可调用内部 API」的迹象,一律视为对应 token 已泄露并轮换(`INTERNAL_TOKEN`、`SECRET_KEY`)。 5. **本页与实际不符即为缺陷**:核对时发现未登记的开放端口或常驻服务,按缺陷处理——先查清用途,无正当理由即关闭。