外网扫描如何及时封禁

wen 开源项目 42

本文目录导读:

外网扫描如何及时封禁

  1. 方案一:使用 Fail2Ban(最经典、成本最低)
  2. 方案二:使用云服务商的 WAF 和 DDoS 防护(最推荐、SaaS模式)
  3. 方案三:使用开源或商业的入侵检测与防御系统(IDS/IPS)(最专业、企业级)
  4. 方案四:使用 iptables/nftables + 动态黑名单(最底层、灵活)
  5. 方案五:基于 IP 信誉库的自动化封禁(最前沿、被动防御)
  6. 综合最佳实践(推荐组合)
  7. 注意事项与避坑指南

针对外网扫描的及时封禁,需要构建一个自动化、多层次的防御体系,单纯依靠人工查看日志再封禁,速度是远远不够的。

核心思路是:识别(Detection)-> 决策(Decision)-> 封禁(Blocking),整个流程必须在秒级甚至毫秒级完成。

以下是几种主流的、可落地的方案,按推荐程度和适用场景排序:

使用 Fail2Ban(最经典、成本最低)

适合个人服务器、小企业,通过分析服务日志,自动添加防火墙规则。

  • 原理:监控 SSH、Web 服务器(Nginx/Apache)等日志,在单位时间内出现多次“认证失败”或类似错误模式的 IP,会被临时或永久封禁。
  • 操作步骤(以 SSH 为例)
    1. 安装 Fail2Ban。
    2. 配置 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分钟内
    3. 启动服务。
  • 优点:简单、成熟、免费。
  • 缺点:只能处理“已知”的失败模式,对 POST 扫描、慢速连接等效果不佳;需要日志写入才会触发,有轻微延迟。

使用云服务商的 WAF 和 DDoS 防护(最推荐、SaaS模式)

如果你的服务在阿里云、腾讯云、AWS、Cloudflare 等平台上,直接利用其边缘安全服务是最佳选择。

  • 原理:流量先经过云侧清洗,在到达你服务器之前,异常扫描流量就已经被拦截。
  • 操作步骤
    1. 开启 WAF(Web应用防火墙)
      • 配置IP黑/白名单:手动或自动添加。
      • 开启扫描器防护:云商有内置的扫描器特征库。
      • 开启频率限制:一个 IP 在 1 秒内请求超过 100 次,自动触发滑块验证或封禁 1 小时。
    2. 开启 DDoS 防护:默认设置通常就能防御 SYN 洪水等扫描行为。
    3. 使用 CDN(内容分发网络):CDN 会隐藏源站 IP,使扫描者在公网层面无法直接找到你的服务器。
  • 优点:延迟极低(在云边缘处理)、防护能力强(有庞大的威胁情报库)、无需运维服务器。
  • 缺点:需要付费(根据套餐),但通常性价比很高,且包含在云服务基础防护里。

使用开源或商业的入侵检测与防御系统(IDS/IPS)(最专业、企业级)

适合对安全有较高要求的企业。

  • 原理:在服务器上或网络入口旁路部署,深度检测网络包内容,对符合攻击特征的流量进行实时拦截。
  • 推荐工具
    • Snort / Suricata:开源 IPS,可以自定义规则(看到 curlwget 等扫描器 User-Agent 直接封禁;看到大量 /admin/wp-admin 等目录爆破尝试直接封禁)。
    • OSSEC / Wazuh:主机入侵检测系统(HIDS),检测到异常进程、文件篡改、异常登录等行为后,可以调用脚本封禁 IP。
  • 优点:检测能力强,能处理应用层攻击、SQL注入尝试等复杂扫描。
  • 缺点:配置复杂、维护规则库需要一定安全知识、对性能有一定要求。

使用 iptables/nftables + 动态黑名单(最底层、灵活)

适合对 Linux 防火墙有深入理解的用户。

  • 原理:编写脚本,定期或实时分析日志,将恶意 IP 写入 iptables 的 setipset 中实现快速封禁。
  • 操作步骤(结合 ipset)
    1. 创建一个 ipset 集合:
      ipset create blacklist hash:ip timeout 3600  # 设置超时时间
    2. 添加 iptables 规则,拒绝该集合的所有流量:
      iptables -I INPUT -m set --match-set blacklist src -j DROP
    3. 编写脚本(如 Shell、Python)读取日志,提取 IP,并添加到 ipset:
      ipset add blacklist 1.2.3.4 timeout 86400
    4. 使用 cronsystemd 定时执行脚本。
  • 优点:极低延迟(内核态处理)、资源占用少、可玩性高。
  • 缺点:脚本需要自己维护,如果规则写错可能误封自己。

基于 IP 信誉库的自动化封禁(最前沿、被动防御)

利用第三方在线威胁情报(Threat Intelligence)。

  • 原理:定期(如每小时)从 AbuseIPDB、Tor Exit Nodes 列表、Spamhaus 等服务拉取已知的恶意 IP 列表,然后通过脚本(方案四中的方法)将其批量加入黑名单。
  • 工具abuseipdb-blacklist 等开源项目。
  • 优点:封禁速度很快(拉取即封禁),能防范尚未攻击你的扫描器。
  • 缺点:依赖外部服务,且可能存在少量误报。

综合最佳实践(推荐组合)

对于大多数中小型企业和开发者,一个高性价比的“四层防御”组合如下:

  1. 第一层(云边缘)云服务商的 WAF + CDN,挡住绝大多数扫描和流量型攻击。这是最推荐你优先做的。
  2. 第二层(服务器自保)Fail2Ban,保护 SSH 等关键服务。
  3. 第三层(告警与监控):配置云监控开源监控(如 Grafana + Prometheus),一旦某个 IP 短时间内请求量激增,触发告警,并调用云 API 或服务器脚本自动封禁。
  4. 第四层(最终防线)iptables 黑名单脚本,配合第三层或手动维护。

注意事项与避坑指南

  1. 警惕误封:CDN 的 IP(如 Cloudflare 节点)不能封,否则网站会打不开,务必确认封禁的是源站的攻击IP,而非CDN的节点IP
  2. 不要完全封禁/0(全0网段):外网扫描来自全球,不可能封掉所有IP,重点封禁高频、高错误率的 IP。
  3. 时间窗口bantime(封禁时间)建议先短后长,第一次 1 小时,第二次 24 小时,对于确凿的恶意扫描(如来自已知僵尸网络),可以永久封禁。
  4. 区分扫描与正常访问:搜索引擎爬虫(如 Googlebot、Bingbot)也会频繁访问,切勿误封,可以通过验证 User-Agent、IP 归属(反解析域名)来区分。
  5. 定期审计:定期检查被封禁的 IP 列表,清理误封。

如果你只有一台 VPS,立即安装 Fail2Ban,如果你有云服务,立即开启 WAF 的频率限制功能,这两个操作能在 10 分钟内让你的服务器安全等级提升一个档次。

抱歉,评论功能暂时关闭!