首页
圈子
登录
其他记一次自建 Gitea 被黑客 Bot 爆破 DoS 的排查与加固全过程
作者:偶尔小澎湃
发布于:2026/08/10 16:48:44
阅读量:2
文章标签
gitea
黑客
维护

📌 背景与现象

某天突然注意到 Synology NAS 的 CPU 占用率高居不下,系统响应变得极为迟钝。通过群晖 Container Manager 的资源监控查看,发现 CPU 占用率持续在 140% - 150% 左右拉满,终端频繁抛出内存不足(OOM)和进程被强制杀掉的错误日志:

signal: Killed

进一步检查容器状态和系统日志发现:

  1. Gitea 容器资源耗尽:后台充斥着大量的 git 子进程死循环解析 three-way merge/diffpatch API。

  2. 安全顾问日志报警:系统安全日志显示 SSH(22 端口)正遭受来自全球各地 IP(法国、德国、美国等)针对 root 账号的高频暴力破解。

很明显,开放了公网访问的自建服务已经被互联网上的自动化黑客扫描引擎(Bot / PoC 工具)标记并入侵/攻击了。

🔍 问题深度排查

经过一步步溯源,我们将整个“病因链”梳理清晰:

  1. 源头漏洞:Gitea 默认安装时开启了公开注册(Open Registration),且暴露在公网环境下。

  2. 恶意注入:扫描 Bot 通过脚本在 Gitea 上自动化批量注册了数百个伪装成测试账号的用户(如 [email protected]gitea_exp 等)。

  3. 资源耗尽(DoS):这些 Bot 在注册后,自动创建大量测试仓库并发送高并发、高消耗的异常 Patch / Commit 请求。Gitea 在后台尝试索引和计算 Diff 时,瞬间吃光了 NAS 的 CPU 和内存,导致服务瘫痪。

  4. 伴随风险:公网 22 端口暴露使 NAS 暴露在大范围的 SSH 爆破攻击下,白白浪费系统计算资源。

🛠️ 解决方案与实操步骤

针对上述问题,我们采取了“彻底清理 -> 关闭漏洞 -> 外部防线加固”的组合拳。

1. 彻底清理恶意账号与垃圾仓库

在容器中使用 Gitea 内置的 CLI 工具,可以直接物理粉碎恶意账号及其名下的所有仓库与数据库记录(加上 --purge 参数)。

打开 Gitea 容器终端(切换至 git 运行用户),运行以下 Shell 自动化脚本,一键粉碎除管理员(root)外的所有垃圾账号:

Bash

# 自动提取除了 root 以外的所有用户名,并执行彻底清理 (--purge)
for user in $(gitea admin user list --config /data/gitea/conf/app.ini | awk '{print $2}' | grep -v -E "^(root|Username)$"); do
    echo "=========================================="
    echo "正在彻底粉碎垃圾用户及其所有仓库: $user"
    gitea admin user delete --username "$user" --purge --config /data/gitea/conf/app.ini
done
效果:一键清空数百个垃圾账户,NAS 磁盘与数据库占用瞬间恢复清爽,CPU 负载断崖式下跌至 0.3%

2. 封堵注册漏洞(修改 app.ini

找到 Gitea 挂载目录下的配置文件 app.ini,重点修改以下三处:

Ini, TOML

[service]
; 1. 彻底禁用自主注册
DISABLE_REGISTRATION = true
; 2. 强制要求登录后才能查看任何内容(对公网未授权访问隐身)
REQUIRE_SIGNIN_VIEW = true

[openid]
; 3. 禁用 OpenID 注册/登录(防止攻击者绕过普通注册入口)
ENABLE_OPENID_SIGNIN = false
ENABLE_OPENID_SIGNUP = false

修改完成后,重启容器使配置生效:

Bash

docker restart gitea-copy

3. NAS 系统级安全防护加固

针对 SSH 爆破与端口裸奔,实施以下三项加固:

  • 关闭/重定向 SSH 端口:在 DSM 控制面板中,平时关闭 SSH 功能,必须使用时修改默认 22 端口为随机高位端口(如 38291)。

  • 开启群晖自动封锁:设置防爆破规则(如 5 分钟内失败 3 次,永久封锁该 IP)。

  • 架构升级(Cloudflare Tunnel 替代公网端口映射)

    • 取消路由器上的任何公网端口转发(Port Forwarding)。

    • 在 NAS 上配置 cloudflared 容器,通过 Cloudflare Tunnel 暴露 Gitea 服务。

    • 优势:利用 Cloudflare 强大的 WAF 流量清洗与 Rate Limiting 挡掉绝大多数公网 Bot;可结合 Cloudflare Zero Trust 增加预认证(Access),从根源上杜绝裸奔被扫描的风险。

💡 总结与反思

对于个人或小团队自建私有云服务(Self-hosted),安全往往是最容易被忽略的环节。“暴露公网”不等于“开放给全世界”,切记遵循以下原则:

  1. 最小权限原则:私有服务必须关闭公开注册(DISABLE_REGISTRATION = true),需要新账号时通过管理员后台手动添加。

  2. 避免端口裸奔:极力推荐使用内网穿透 / 零信任方案(如 Cloudflare Tunnel、Tailscale、WireGuard),不要直接将默认端口映射到公网。

  3. 定期巡检与监控:关注 CPU/内存异常飙高的现象,及时排查后台进程与日志。

做完这套组合拳后,服务不仅运行得更加平稳,也彻底告别了公网黑客工具的无休止打扰!

发表评论
下拉刷新
加载中
今日pv:
今日iv:
今日uv: