本文目录导读:

- 方案一:使用 Fail2Ban(最经典、成本最低)
- 方案二:使用云服务商的 WAF 和 DDoS 防护(最推荐、SaaS模式)
- 方案三:使用开源或商业的入侵检测与防御系统(IDS/IPS)(最专业、企业级)
- 方案四:使用 iptables/nftables + 动态黑名单(最底层、灵活)
- 方案五:基于 IP 信誉库的自动化封禁(最前沿、被动防御)
- 综合最佳实践(推荐组合)
- 注意事项与避坑指南
针对外网扫描的及时封禁,需要构建一个自动化、多层次的防御体系,单纯依靠人工查看日志再封禁,速度是远远不够的。
核心思路是:识别(Detection)-> 决策(Decision)-> 封禁(Blocking),整个流程必须在秒级甚至毫秒级完成。
以下是几种主流的、可落地的方案,按推荐程度和适用场景排序:
使用 Fail2Ban(最经典、成本最低)
适合个人服务器、小企业,通过分析服务日志,自动添加防火墙规则。
- 原理:监控 SSH、Web 服务器(Nginx/Apache)等日志,在单位时间内出现多次“认证失败”或类似错误模式的 IP,会被临时或永久封禁。
- 操作步骤(以 SSH 为例):
- 安装 Fail2Ban。
- 配置
jail.local文件,设置 SSH 监控:[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log # 或 /var/log/secure maxretry = 5 # 5次失败 bantime = 3600 # 封禁1小时 findtime = 600 # 在10分钟内
- 启动服务。
- 优点:简单、成熟、免费。
- 缺点:只能处理“已知”的失败模式,对 POST 扫描、慢速连接等效果不佳;需要日志写入才会触发,有轻微延迟。
使用云服务商的 WAF 和 DDoS 防护(最推荐、SaaS模式)
如果你的服务在阿里云、腾讯云、AWS、Cloudflare 等平台上,直接利用其边缘安全服务是最佳选择。
- 原理:流量先经过云侧清洗,在到达你服务器之前,异常扫描流量就已经被拦截。
- 操作步骤:
- 开启 WAF(Web应用防火墙):
- 配置IP黑/白名单:手动或自动添加。
- 开启扫描器防护:云商有内置的扫描器特征库。
- 开启频率限制:一个 IP 在 1 秒内请求超过 100 次,自动触发滑块验证或封禁 1 小时。
- 开启 DDoS 防护:默认设置通常就能防御 SYN 洪水等扫描行为。
- 使用 CDN(内容分发网络):CDN 会隐藏源站 IP,使扫描者在公网层面无法直接找到你的服务器。
- 开启 WAF(Web应用防火墙):
- 优点:延迟极低(在云边缘处理)、防护能力强(有庞大的威胁情报库)、无需运维服务器。
- 缺点:需要付费(根据套餐),但通常性价比很高,且包含在云服务基础防护里。
使用开源或商业的入侵检测与防御系统(IDS/IPS)(最专业、企业级)
适合对安全有较高要求的企业。
- 原理:在服务器上或网络入口旁路部署,深度检测网络包内容,对符合攻击特征的流量进行实时拦截。
- 推荐工具:
- Snort / Suricata:开源 IPS,可以自定义规则(看到
curl、wget等扫描器 User-Agent 直接封禁;看到大量/admin、/wp-admin等目录爆破尝试直接封禁)。 - OSSEC / Wazuh:主机入侵检测系统(HIDS),检测到异常进程、文件篡改、异常登录等行为后,可以调用脚本封禁 IP。
- Snort / Suricata:开源 IPS,可以自定义规则(看到
- 优点:检测能力强,能处理应用层攻击、SQL注入尝试等复杂扫描。
- 缺点:配置复杂、维护规则库需要一定安全知识、对性能有一定要求。
使用 iptables/nftables + 动态黑名单(最底层、灵活)
适合对 Linux 防火墙有深入理解的用户。
- 原理:编写脚本,定期或实时分析日志,将恶意 IP 写入 iptables 的
set或ipset中实现快速封禁。 - 操作步骤(结合 ipset):
- 创建一个 ipset 集合:
ipset create blacklist hash:ip timeout 3600 # 设置超时时间
- 添加 iptables 规则,拒绝该集合的所有流量:
iptables -I INPUT -m set --match-set blacklist src -j DROP
- 编写脚本(如 Shell、Python)读取日志,提取 IP,并添加到 ipset:
ipset add blacklist 1.2.3.4 timeout 86400
- 使用
cron或systemd定时执行脚本。
- 创建一个 ipset 集合:
- 优点:极低延迟(内核态处理)、资源占用少、可玩性高。
- 缺点:脚本需要自己维护,如果规则写错可能误封自己。
基于 IP 信誉库的自动化封禁(最前沿、被动防御)
利用第三方在线威胁情报(Threat Intelligence)。
- 原理:定期(如每小时)从 AbuseIPDB、Tor Exit Nodes 列表、Spamhaus 等服务拉取已知的恶意 IP 列表,然后通过脚本(方案四中的方法)将其批量加入黑名单。
- 工具:
abuseipdb-blacklist等开源项目。 - 优点:封禁速度很快(拉取即封禁),能防范尚未攻击你的扫描器。
- 缺点:依赖外部服务,且可能存在少量误报。
综合最佳实践(推荐组合)
对于大多数中小型企业和开发者,一个高性价比的“四层防御”组合如下:
- 第一层(云边缘):云服务商的 WAF + CDN,挡住绝大多数扫描和流量型攻击。这是最推荐你优先做的。
- 第二层(服务器自保):Fail2Ban,保护 SSH 等关键服务。
- 第三层(告警与监控):配置云监控或开源监控(如 Grafana + Prometheus),一旦某个 IP 短时间内请求量激增,触发告警,并调用云 API 或服务器脚本自动封禁。
- 第四层(最终防线):iptables 黑名单脚本,配合第三层或手动维护。
注意事项与避坑指南
- 警惕误封:CDN 的 IP(如 Cloudflare 节点)不能封,否则网站会打不开,务必确认封禁的是源站的攻击IP,而非CDN的节点IP。
- 不要完全封禁/0(全0网段):外网扫描来自全球,不可能封掉所有IP,重点封禁高频、高错误率的 IP。
- 时间窗口:
bantime(封禁时间)建议先短后长,第一次 1 小时,第二次 24 小时,对于确凿的恶意扫描(如来自已知僵尸网络),可以永久封禁。 - 区分扫描与正常访问:搜索引擎爬虫(如 Googlebot、Bingbot)也会频繁访问,切勿误封,可以通过验证 User-Agent、IP 归属(反解析域名)来区分。
- 定期审计:定期检查被封禁的 IP 列表,清理误封。
如果你只有一台 VPS,立即安装 Fail2Ban,如果你有云服务,立即开启 WAF 的频率限制功能,这两个操作能在 10 分钟内让你的服务器安全等级提升一个档次。