CrowdSec 防火墙联动指南:让公网服务器自动识别并封禁恶意访问

CrowdSec 防火墙联动的服务器安全防护场景

当一台公网服务器暴露 SSH、Web 后台或业务接口后,扫描、爆破和异常请求通常不是偶发事件,而是持续噪声。本文将用一套可落地的 CrowdSec 防火墙联动方案,说明如何把日志分析、威胁情报和本机封禁串起来,帮助你减少重复告警,并让安全策略从“人工发现后处理”变成“发现、决策、封禁、复核”的闭环。

这类方案并不替代补丁、最小权限和备份,而是承担第一层自动化防护:识别明显异常的来源 IP,把风险请求挡在服务入口之前。对于运行在 VPS(虚拟专用服务器)独立服务器 上的业务,它尤其适合处理每天重复出现的 SSH 爆破和 Web 探测。

CrowdSec 联动防火墙解决什么问题

传统防火墙更像一张静态规则表:开放 22、80、443 端口,限制少数可信来源,或者手动把可疑 IP 加入黑名单。问题在于,攻击来源经常变化,扫描工具也会不断切换路径。只靠人工查看日志,很容易出现两个后果:告警太多没人看,真正需要封禁的来源已经尝试了上百次。

CrowdSec 的思路是把安全事件拆成三个环节。agent 负责读取 SSH、Nginx、Apache 等日志;场景规则负责判断“多少次失败登录”“哪些 URL 探测行为”属于异常;bouncer 再把决策同步到防火墙。这样一来,防护动作不再只依赖单条固定规则,而是基于日志行为持续更新。

在公网服务器场景中,它主要解决三类具体问题:

  • SSH 爆破:例如 10 分钟内同一来源连续出现 6 次以上认证失败,就可以触发临时封禁。
  • Web 探测:例如短时间访问 /wp-login.php/.env/phpmyadmin 等明显探测路径,可被归入恶意扫描。
  • 重复攻击来源:本机检测到的恶意 IP 可以结合社区情报,降低同类来源在多台服务器间反复试探的成本。

这套机制的价值不在于“装上就安全”,而在于把重复、低价值、可以规则化判断的处置交给系统完成。管理员仍然需要定期复核决策、更新系统和检查业务日志,但日常噪声会明显减少。

部署前先确认日志、防火墙和业务边界

在安装之前,先把服务器现状梳理清楚。CrowdSec 依赖日志做判断,如果日志路径错了,或者防火墙后端和系统实际使用的不一致,就会出现“控制台有告警,但没有真正封禁”的情况。

你可以先确认 3 个基础条件。第一,系统日志要可读,例如 /var/log/auth.log/var/log/secure、Nginx access log 和 error log。第二,防火墙后端要明确,常见组合包括 iptables、nftables、firewalld 或云平台安全组;本机 bouncer 通常处理的是系统层规则,不能替代上游安全组策略。第三,业务白名单要提前记录,例如办公室固定出口 IP、监控节点、CI/CD 发布机,避免被误判后影响维护。

下面是一组适合部署前执行的检查命令,用来确认日志和防火墙基础状态:

sudo tail -n 20 /var/log/auth.log
sudo systemctl status ssh --no-pager
sudo nft list ruleset | head -n 40
sudo iptables -S | head -n 20

如果系统使用的是 RHEL 系发行版,认证日志常见路径是 /var/log/secure。如果 Web 服务运行在容器内,还要确认容器日志是否已经落盘,或者是否通过反向代理写入宿主机日志。

部署前检查日志路径和防火墙后端

确认基础条件后,再决定规则范围。刚上线时不建议把所有场景一次性打开,而是从 SSH 和主 Web 服务开始。这样可以先观察 24-48 小时的决策质量,再逐步加入 WordPress、反向代理或应用层规则。若你同时管理多台 服务器,建议先选一台非核心节点验证策略。

安装 agent 与 firewall bouncer 的推荐流程

安装过程可以分成两条线:先让 CrowdSec 正常读取日志并产生决策,再安装 firewall bouncer 把决策落到系统防火墙。这样排查更清楚:如果没有产生决策,问题在日志或场景;如果有决策但没有封禁,问题多半在 bouncer 或防火墙后端。

以常见 Linux 服务器为例,安装后可以先查看本机已识别的服务集合,再安装适配场景。具体命令会随发行版和官方仓库变化,生产环境应以 CrowdSec 官方文档为准:

sudo cscli collections list
sudo cscli scenarios list
sudo cscli decisions list
sudo systemctl status crowdsec --no-pager

当 agent 已经正常运行,再安装 firewall bouncer。bouncer 会向本机 CrowdSec Local API 获取封禁决策,并将结果写入防火墙。安装完成后,建议立即检查 bouncer 服务状态、API 连接和防火墙规则是否同步,而不是等攻击流量出现后再排查。

sudo systemctl status crowdsec-firewall-bouncer --no-pager
sudo cscli bouncers list
sudo cscli decisions add --ip 203.0.113.10 --duration 10m --reason test
sudo cscli decisions list

测试 IP 建议使用文档保留网段,例如 203.0.113.0/24。测试完成后应删除决策,避免把演示规则长期留在环境里:

sudo cscli decisions delete --ip 203.0.113.10
sudo cscli decisions list

CrowdSec agent、决策和防火墙 bouncer 的联动路径

如果你管理的是线上业务,建议先把封禁时间设置得保守一些,例如 10 分钟到 1 小时,并在观察期内每天查看 cscli decisions list 和 Web 访问日志。等确认误判率可控,再延长高风险行为的封禁时间。

上线后如何验证封禁真的生效

很多安全工具部署失败,并不是因为安装命令报错,而是因为“看起来运行了,实际没有拦截”。CrowdSec 防火墙联动上线后,至少要从服务状态、决策列表、防火墙规则和业务访问 4 个角度验证。

第一步看 CrowdSec 是否持续读取日志。可以在安全日志里找到最近的失败登录,再查看是否产生 alert。第二步看 cscli decisions list 是否出现对应封禁。第三步查看 nftables 或 iptables 规则中是否出现 bouncer 创建的集合或链。第四步用非生产来源做受控测试,确认被封禁后目标端口确实不可访问。

受控测试时不要从办公室公网出口直接做攻击模拟,也不要在核心业务高峰期测试激进规则。更稳妥的方式是使用临时测试实例、低权限测试账户和短时封禁窗口,测试完立即清理。

sudo cscli alerts list --limit 5
sudo cscli decisions list
sudo journalctl -u crowdsec-firewall-bouncer -n 50 --no-pager
sudo nft list ruleset | grep -i crowdsec

上线验证时从日志、决策和防火墙三处交叉检查

如果 alert 存在但没有 decision,通常说明场景规则未达到封禁阈值;如果 decision 存在但防火墙没有规则,多半是 bouncer 连接 Local API 失败、服务未启动,或防火墙后端配置不一致。如果防火墙规则存在但业务仍可访问,则要检查流量是否绕过本机防火墙。

验证完成后,建议建立一个简单的日常观察表:每天看一次新增决策数量、误封反馈、Top 触发场景和 Web 错误日志。连续 7 天没有误封,再考虑延长封禁时间或开启更多集合。若网站同时做性能优化,可以把安全日志与 TTFB(首字节时间)优化 观察结合起来。

误封、白名单和多节点同步的处理方式

自动封禁机制上线后,最需要关注的不是封禁数量越多越好,而是决策是否稳定、可解释、可回滚。误封通常来自三种情况:共享出口 IP 下有正常用户、监控或压测触发阈值、业务后台短时间出现大量失败登录。处理误封时,不建议直接关闭整套防护,而是先缩小规则范围并建立白名单。

白名单应尽量具体。办公室固定 IP、监控探针、部署机可以加入允许列表;但不要把整个运营商网段放进白名单。若后台登录失败频繁,应该先检查认证策略,而不是只靠白名单绕过封禁。

多节点环境还要考虑一致性。如果你有 3 台 Web 节点,每台都单独分析本机日志,同一个攻击来源可能在不同节点分别触发规则。访问量不大的站点可先使用本机独立决策;流量较大的业务可考虑集中日志或统一策略。

排查误封时可以按下面顺序处理,避免一上来就删除大量规则:

  • 先查 IP:用 sudo cscli decisions list --ip <IP> 确认封禁原因和剩余时间。
  • 再查日志:定位触发前 5-10 分钟内的 SSH 或 Web 请求,判断是否为真实用户行为。
  • 临时放行:确认误封后删除单个 IP 决策,而不是清空全部 decisions。
  • 调整阈值:把高频误触发场景改为更长窗口或更高次数,再观察 24 小时。

对于中小团队,我们建议把安全策略写进运维交接文档:哪些 IP 是白名单、哪些场景会封禁、谁有权限删除决策、误封后多久内复盘。

总结:把自动封禁纳入日常运维,而不是一次性安装

CrowdSec 防火墙联动的核心价值,是把公网服务器上高频、重复、可规则化识别的恶意访问转成自动处置流程。它适合降低 SSH 爆破、Web 扫描和已知恶意来源带来的噪声,但仍需要和系统更新、最小权限、备份、监控一起使用。

如果你准备上线这套机制,建议按“先观察、再封禁、再扩展”的节奏推进:第一天只确认日志读取和基础场景;第二阶段开启短时封禁并检查误判;第三阶段再把策略复制到更多服务器。对于承载线上业务的环境,推荐在低峰期做受控测试,并保留回滚命令和白名单记录。

如果你需要为网站选择更适合安全运维的主机环境,Hostease 建议优先考虑具备完整系统权限、日志可控和防火墙策略可配置的方案。无论使用 虚拟主机 还是自管服务器,可靠的安全实践都来自持续验证:规则是否命中、封禁是否生效、误封是否可回滚、日志是否能支撑复盘。

发表评论