小内存 Debian 服务器防护改造:从 CrowdSec 迁移到 Caddy GeoIP 与 Fail2ban
在一台内存较小的 Debian 服务器上,我原先使用 CrowdSec 分析 SSH 和 Web 日志,再通过 Firewall Bouncer 将封禁决策同步到 nftables。 这套方案能够根据攻击行为动态封禁 IP,但对于只有数百 MiB 内存、运行多个个人服务的服务器,资源开销需要重新权衡。最终我采用了以下组合: 网站:Caddy GeoIP 与手动 IP 白名单,按站点选择是否允许 CDN 回源豁免。 SSH:Fail2ban 读取 systemd journal,通过 nftables 封禁异常来源。 本文记录完整改造方法,以及部署过程中遇到的日志来源和启动时序问题。所有域名、地址和主机标识均已替换为示例。命令按 root 用户执行。 一、先明确防护能力的变化 项目 原方案 新方案 Web 访问控制 CrowdSec 分析日志并生成封禁决策 Caddy 按来源地区或 IP 放行 SSH 异常登录 CrowdSec SSH 场景 Fail2ban SSH jail Web 行为检测 取决于安装的 Collection 和 Scenario 本文没有保留 社区威胁情报 可使用 CrowdSec 社区名单 本文没有接入 Web 拒绝位置 Firewall Bouncer 的防火墙规则 Caddy HTTP 请求处理阶段 地区白名单不能等价替代行为检测。允许地区内的恶意请求仍可能到达应用,Caddy 的 GeoIP 规则也不会覆盖没有经过它的其他公网端口。 ...