本文目录导读:

- 最基础:通过 Nginx/Apache 直接封 IP
- 实用级:配置 Web 应用防火墙(WAF)
- 智能级:基于频率限制(Rate Limiting)
- 对抗型:验证码/JS挑战(Human Verification)
- 全面方案:云 CDN + WAF + DDoS 防护
- 应急处置:服务器防火墙(iptables/firewalld)
- 总结建议
恶意访问(如爬虫、攻击、刷票等)的拉黑拦截通常需要在服务器端或网络边界进行配置,以下是几种常见且有效的拦截方法,按技术门槛从低到高排序:
最基础:通过 Nginx/Apache 直接封 IP
适合:服务器配置简单,能快速阻止已知的恶意 IP。
Nginx 示例:
在 server 块或 http 块中添加:
# 拒绝特定IP deny 192.168.1.1; deny 10.0.0.0/24; # 允许所有(通常放在最后) allow all;
Apache (.htaccess) 示例:
<RequireAll>
Require all granted
Require not ip 192.168.1.1 10.0.0.0/24
</RequireAll>
优点:零额外资源消耗。
缺点:纯粹靠 IP 封禁,动态 IP 或代理穿透能力差;手动添加效率低。
实用级:配置 Web 应用防火墙(WAF)
适合:需要自动化、规则灵活的拦截。推荐所有对外服务的网站都开启。
- 云服务商 WAF(如阿里云、腾讯云、Cloudflare):
- 开启 CC 防护(限制单一 IP 每秒请求数)。
- 配置 IP 黑名单 或 区域拦截(如封禁境外 IP)。
- 开启 爬虫规则 或 恶意 Bot 检测。
- 开源本地 WAF(如 ModSecurity + OWASP CRS 规则集):
能拦截 SQL 注入、XSS 等攻击行为,但需要一定的配置学习成本。
云 WAF 通常会分析请求头(User-Agent、Referer)、请求频率、历史攻击特征,自动拦截后返回 403 或验证码。
智能级:基于频率限制(Rate Limiting)
适合:对抗短时间高频访问(刷票、暴力破解、CC 攻击)。
实现原理:记录每个 IP 的单位时间请求次数,超出阈值则返回 429 Too Many Requests 或直接拒绝。
Nginx 示例(ngx_http_limit_req_module):
# 定义限制区域(内存中1MB存储约16000个IP状态)
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
location /api/ {
limit_req zone=mylimit burst=20 nodelay; # 每秒10次,可突发20次
}
}
代码层面(如 PHP/Python/Node): 可以使用 Redis 实现滑动窗口计数,检测某 IP 在 60 秒内请求超过 100 次,则添加到一个黑名单集中,后续请求直接返回 403。
对抗型:验证码/JS挑战(Human Verification)
适合:识别真实用户 vs 脚本/机器人。
- CAPTCHA(验证码):当访问频率异常时,要求输入图形验证码,可用 Google reCAPTCHA、华为云 IEC 或极验。
- JS 挑战(JS Challenge):服务器返回一段 JavaScript,浏览器环境能正确执行并产生 token,普通爬虫无法解析,CF(Cloudflare)的 5 秒盾就属此类。
- Cookie 指纹:要求访问者先后访问多个静态资源并计算时间差,不符合人类行为则暂时拉黑。
全面方案:云 CDN + WAF + DDoS 防护
如果遭受大规模攻击(单机资源耗尽),需要云服务商介入:
- Cloudflare:提供免费 DDoS 防护 + 基于 IP/User-Agent/ASN 的 WAF + 自动的 JS 挑战。
- 阿里云 / 腾讯云 / 华为云:购买高防 IP 或 DDoS 原生清洗,启用 黑/白名单、区域封禁、精准访问控制。
应急处置:服务器防火墙(iptables/firewalld)
当需要立即手动封禁某个 IP(SSH 暴力破解源 IP):
CentOS/RHEL (iptables):
iptables -A INPUT -s 192.168.1.100 -j DROP
Ubuntu/Debian (ufw):
ufw deny from 192.168.1.100
总结建议
- 个人小站:先做 Nginx 频率限制 + 使用 Cloudflare 免费 CDN(自带基础防护)。
- 电商/企业站:购买云服务商最低配 WAF(如每年几百元),开启自动封禁恶意 IP 和 CC 防护。
- 高频攻击:升级到高防服务,并考虑切换到 HTTP/2 并开启 JS Challenge。
- 所有情况:日志是反制的依据,定期检查
access.log和error.log,分析攻击特征(如同一个 User-Agent 反复访问不存在的 URL),然后针对性编写 WAF 规则或 Nginx 封禁。
特别注意:单纯依靠 IP 拉黑是“被动防御”,攻击者可能使用大量代理 IP,一定要结合频率控制和行为检测(WAF)才能有效拦截恶意访问。