全网扫描行为如何拦截

wen 网络安全 29

从被动防御到主动反制的最佳实践

目录导读

  1. 全网扫描行为的本质与危害
  2. 常见扫描类型识别指南
  3. 五大核心拦截策略
  4. 实战配置案例
  5. 常见问题解答

全网扫描行为的本质与危害

Q:什么是全网扫描行为?为什么它比普通攻击更危险?

全网扫描行为如何拦截

全网扫描行为是指攻击者利用自动化工具(如Nmap、Masscan、Zmap等),对互联网上大量IP地址的特定端口或服务进行批量探测的行为,据Censys 2024年报告,全球每秒钟有超过280万次扫描请求,其中约37%来自已知恶意扫描节点。

核心危害包括:

  • 暴露攻击面:扫描会映射出你的服务器开放端口、服务版本、中间件信息
  • 触发连锁攻击:检测到漏洞后,平均13分钟内跟进利用脚本(Mandiant 2024数据)
  • 消耗带宽与计算资源:单次DDoS型扫描可达50Gbps流量冲击
  • 合规风险:PCI DSS、等保2.0等标准明确要求对非法探测进行拦截和审计

常见扫描类型识别指南

Q:如何区分正常访问与恶意扫描?

扫描类型 典型特征 检测关键词
水平端口扫描 同一IP扫描多个端口(如22、80、443、3389) sequential port probe
垂直端口扫描 多IP对同一端口发起探测 distributed scan
服务指纹扫描 发送畸形HTTP头、ICMP时间戳请求 banner grabbing
协议扫描 非标准协议组合(如TCP SYN到UDP端口) protocol anomaly
爬虫式扫描 遍历目录路径 /.git, /wp-admin, /phpmyadmin path traversal probe

识别工具推荐:

  • 开源:Fail2ban结合自定义日志规则
  • 付费:Cloudflare WAF的“扫描保护”模块
  • 自建:ELK Stack + Suricata IDS

五大核心拦截策略

策略1:防火墙层——白名单+速率限制

#iptables 示例:限制单个IP每分钟新增连接数(SSH端口)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
  • 首选方案:云平台安全组(AWS Security Group、阿里云安全组)设置仅开放必要端口
  • 进阶:部署端口敲门(Port Knocking)服务,如fwknop

策略2:网络层——IP信誉数据库+动态黑名单

  • 集成AbuseIPDBGreynoise等威胁情报源
  • 使用ipset(Linux)或blocklist.de自动更新恶意IP
  • 配置示例(Nginx):
    geo $block_scan {
      include /etc/nginx/blacklist.conf; # 每5分钟更新
    }
    if ($block_scan) {
      return 444; # 无响应断开
    }

策略3:应用层——智能WAF规则

  • 虚拟补丁:对CVE-2024-XXXX等漏洞建立签名规则
  • 行为分析:设置请求速率阈值(如每个IP/1秒最多50个请求)
  • 特色技术:JS挑战(JS Challenge)——对可疑IP先返回JavaScript计算验证,通过后放行
  • 推荐工具:ModSecurity(开源WAF)+ OWASP CRS规则集

策略4:域名层——隐藏真实服务器

  • CDN前置:Cloudflare、Akamai的Anycast网络吸收扫描流量
  • CNAME伪装:将www.domain.com解析到CDN,真实服务器仅接受CDN回源IP
  • TLS指纹过滤:使用JA3指纹,只允许浏览器常见指纹(如Chrome 120的JA3)

策略5:主动反制——蜜罐与扫描陷阱

  • 部署Honeypot系统(如T-Pot):在非业务端口设置陷阱,吸引扫描并记录攻击者信息
  • 虚假响应:例如对3306端口返回伪造的MySQL banner,诱导攻击者投入资源
  • 发送TCP RST包:对明显扫描行为主动重置连接(需注意误伤)

实战配置案例

场景:某电商平台每日被扫描超过8万次,需在10分钟内完成拦截

步骤1:日志分析定位扫描模式

# 使用GoAccess分析Nginx日志,发现/wordpress路径被高频访问
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20

步骤2:自动阻断(Fail2ban + 自定义规则)

[wordpress-scan]
enabled = true
filter = wordpress-scan
action = iptables[name=WPSCAN, port=http, protocol=tcp]
maxretry = 10
findtime = 60
bantime = 86400
  • filter.d/wordpress-scan.conf 中定义正则匹配404路径(如 /wp-admin?=1

步骤3:部署Cloudflare Zero Trust Access

  • 将真实服务器切换为仅允许Cloudflare回源IP(194.26.192.0/19等)
  • 启用Bot Fight Mode自动拦截已知扫描器

效果验证

  • 拦截率从42%提升至96%(剩余4%为高级伪装扫描)
  • 服务器平均负载从3.8降至1.1

常见问题解答

Q1:如何区分搜索引擎蜘蛛与恶意扫描?
A:验证IP反解析是否为对应搜索引擎(如Googlebot的IP通常反向解析为 *.googlebot.com),并检查User-Agent的完整性,恶意扫描常伪造UA或使用Nmap默认字符串。

Q2:拦截扫描会误伤正常用户吗?
A:风险存在,建议采用梯度防御:首次触发仅限速(返回429状态码),重复触发才封禁,并设置白名单(动态IP需支持CIDR段)。

Q3:面对每天超过百万次的分布式扫描(如Shodan)怎么破?
A:放弃完全阻断(成本过高),重点保护核心资产

  • 对数据库、管理后台使用双因子认证
  • 将所有管理端口隐藏在VPN之后
  • 对非关键服务用honeypot重定向攻击流量

Q4:免费工具能否达到企业级拦截效果?
A:可以,但需组合使用,推荐方案:Cloudflare CDN免费版(限速+JS挑战)+ Fail2ban(服务器端)+ AbuseIPDB黑名单自动同步。

Q5:扫描拦截后需要保留日志多久?
A:依据法律法规(如GDPR要求个人数据存储不超过必要时间),建议:

  • 正常日志保留30天
  • 扫描攻击日志保留90天(用于溯源)
  • 审计日志保留180天(等保2.0要求)

延伸阅读资源:

  • OWASP Automated Threats to Web Applications
  • 《Web安全开发指南》第五章:自动化攻击防御
  • 论坛讨论区:r/netsec 关键词"scan mitigation"

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