精准识别+分层拦截是阻断恶意扫描和爬虫的关键:从ip/端口/协议、行为特征、地理属性三维度设防;按网段动态封禁、行为限速与路径控制、geoip地域屏蔽协同实施。

直接用流量过滤策略阻断恶意扫描和爬虫,关键不是“全封”,而是“精准识别+分层拦截”。重点在于从请求源头(IP、端口、协议)、行为特征(频率、路径、头信息)和地理属性(国家/地区)三个维度设防,避免误伤搜索引擎和真实用户。
按源IP与网段动态封禁
恶意扫描常来自已知高危IP段或短时爆发的代理池。不能只靠单IP黑名单,要结合CIDR网段和自动封禁机制:
- 定期导入公开威胁情报库(如Emerging Threats、FireHOL Level 1),将整段僵尸网络IP纳入防火墙DROP规则
- 对同一/24网段内30分钟内发起≥50次HTTP 404或目录遍历请求(如
/wp-admin/、/phpmyadmin/)的源IP,自动加入临时黑名单(2小时) - 云平台安全组中关闭非必要端口(如22、3306、25),仅放行80/443/自定义业务端口,并限制SSH登录IP白名单
基于请求行为做速率与路径控制
单纯看IP容易被轮换代理绕过,必须结合行为分析:
- Nginx配置
limit_req:对/api/、/search等动态接口限流至5r/s,突发允许10次但延迟响应;对/robots.txt、/sitemap.xml不限流,方便合规爬虫发现站点结构 - 用
map模块识别可疑User-Agent(含sqlmap、nuclei、gobuster、masscan等工具特征),匹配即返回403且不记录日志 - 拦截高频访问敏感路径的行为,例如1分钟内访问
/login.php≥10次,或连续请求/admin/下5个以上不存在页面,触发IP临时封禁
用GeoIP2按地域屏蔽高风险流量
大量扫描与爬虫集中在特定国家或地区,地理位置是高效初筛手段:
- 下载MaxMind GeoLite2 Country免费数据库,配合Nginx GeoIP2模块解析请求IP归属地
- 对明确无业务覆盖的国家(如朝鲜、伊朗、部分东欧小国)直接
deny all;对高频攻击来源国(如某些东南亚、南美IP段)启用增强验证(如reCAPTCHA v3评分 - 注意保留Google、Bing、百度等主流搜索引擎IP段(可通过其官方公布的IP列表白名单放行),避免影响SEO收录
结合协议与端口做底层过滤
很多扫描器会尝试非标准端口探测或异常协议组合,系统级过滤可提前截断:
- Linux iptables中设置
–dport ! 80,443,22 –m state –state NEW –j DROP,禁止新建连接到非业务端口 - 拦截UDP泛洪类探测(如DNS放大攻击前奏),对非DNS服务端口的UDP包直接丢弃
- 识别TCP标志异常组合(如SYN+FIN+RST同时置位),这类包几乎全是扫描器伪造,iptables加
-m tcp –tcp-flags ALL FIN,URG,PSH -j DROP











