Claws Up:用 OpenClaw 把 Caddy + CrowdSec 再拧紧一圈

我把 OpenClaw 当作 homelab 的“动手助手”,需要快速、精准地做小修小改时,它很合适。这次我让它检查 Caddy + CrowdSec 的运行状态,修复一个配置瑕疵,并把 Telegram 告警升级到“看一眼就能判断”的级别。

下面是这次操作的流程与复盘。

1) 先确认系统健康

OpenClaw 做了基础体检:

  • Caddy bouncer 正常拉取决策
  • CrowdSec 解析 access log 正常
  • Alerts / Decisions 都有持续生成

确保系统健康后再改配置,心里更踏实。

2) 修正“以为已经覆盖”的配置缺口

我原本以为所有站点都启用了 CrowdSec,但实际只有 一个站点 在 Caddyfile 里写了 crowdsec 指令。

OpenClaw 给每个站点补上该指令,让所有 vhost 都受保护:

1alpha.example.com {
2    import logjson actual
3    crowdsec
4    route {
5        import sec-headers
6        reverse_proxy 172.10.10.10:8080
7    }
8}

随后 reload Caddy,并确认 bouncer 仍在正常拉取。

3) 让 Telegram 告警包含攻击上下文

默认的 Telegram 通知只有“场景 + IP”,还得进 dashboard 才能看到攻击了哪个域名、哪个 URL。

我希望它包含:

  • 攻击目标域名
  • 请求方法与路径(URL)
  • User-Agent
  • ASN 与国家

OpenClaw 更新了通知模板,从告警元数据里读取这些字段:

1format: |
2  {
3    "chat_id": "<chat_id>",
4    "text": "{{ range . -}}{{ $a := . -}}Scenario: {{ $a.GetScenario }} | {{ $a.GetScope }}:{{ $a.GetValue }}\nTarget: {{ $a.GetMeta \"target_fqdn\" }}\nRequest: {{ $a.GetMeta \"http_verb\" }} {{ $a.GetMeta \"http_path\" }}\nUser-Agent: {{ $a.GetMeta \"http_user_agent\" }}\nASN: {{ $a.GetMeta \"ASNNumber\" }} ({{ $a.GetMeta \"ASNOrg\" }})\nCountry: {{ $a.GetMeta \"IsoCode\" }}\nDecisions:\n{{ range $a.Decisions -}}- {{ .Value }} -> {{ .Type }} ({{ .Duration }})\n{{ end -}}---\n{{ end -}}",
5    "disable_web_page_preview": true
6  }

最后还用最近一次攻击模式模拟触发一次通知,确认 Telegram 显示效果符合预期。

小结

  • 别想当然,逐站点确认 CrowdSec 是否生效。
  • 通知要“有上下文”,才能做到秒级判断。
  • OpenClaw 很适合做快速、可控的小修小改

如果你也在用 Caddy + CrowdSec,这些微调会让日常运维舒服很多。

一点感慨

以前要自己 Google 半天、翻配置语法、反复 debug 才能搞定的事情,现在几分钟就能稳定完成。这才是 AI 应有的样子。

comments powered by Disqus

翻译: