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