Python后端如何应对黑客DDoS攻击与恶意大量自动化爬虫_接入WAF与Nginx限制单IP连接速率

阿墨同学_9982

阿墨同学_9982

2026-05-09

806人浏览

原创

nginx的limit_req_zone和limit_req用于单ip请求速率限制,必须在http块定义共享内存区并在location中启用;rate需按业务qps×1.5上浮,burst配合nodelay控制突发,$binary_remote_addr节省内存。

python后端如何应对黑客ddos攻击与恶意大量自动化爬虫_接入waf与nginx限制单ip连接速率

直接用 limit_req_zone 和 limit_req 控制单IP请求速率

Python后端本身不处理网络层限流,真正起效的是前置的Nginx。把限流逻辑放在应用层(比如用Flask写个装饰器)只会让攻击流量穿透到Python进程,提前耗尽CPU和连接数,反而加速崩溃。

必须在Nginx的http块中定义共享内存区,并在location里启用:

http {
    limit_req_zone $binary_remote_addr zone=perip:10m rate=15r/s;
    server {
        location /api/ {
            limit_req zone=perip burst=30 nodelay;
            proxy_pass http://python_backend;
        }
    }
}

关键点:

  • rate=15r/s 是保守起点,实际要按业务QPS×1.5再上浮——比如正常峰值是800 QPS,后端有4台机器,单机均值200,那rate至少设为300r/s,否则误杀合法用户
  • burst=30 允许短时突发,但nodelay会让超出部分立刻返回503,不排队;去掉它会平滑延迟,但可能拖垮后端响应时间
  • 别用$remote_addr,必须用$binary_remote_addr——节省内存,1M能存约16000个IP,而文本形式只存约3000个

为什么 limit_conn_zone 比 limit_req_zone 更适合防SYN Flood类攻击

当攻击表现为大量半开TCP连接(如SYN Flood、Slowloris),limit_req完全无效——它只管HTTP请求,不管TCP握手。此时必须用limit_conn_zone限制并发连接数。

配置示例:

http {
    limit_conn_zone $binary_remote_addr zone=conn_perip:10m;
    server {
        location / {
            limit_conn conn_perip 10;
            proxy_pass http://python_backend;
        }
    }
}

注意陷阱:

python 查询技能
python 查询技能

查询客流数据,输出JSON格式,可直接导入Bitable等可视化工具

下载
  • 这个限制作用于Nginx worker进程级别,不是全局。如果Nginx开了4个worker,单IP最多能建40个连接,得配合worker_connections整体调低
  • 不要对/static/或CDN回源路径启用limit_conn,否则CDN节点会被当成一个IP堵死
  • 移动端App常复用连接,iOS/Android WebView也可能复用,limit_conn值低于20容易导致白名单外的正常用户卡顿

WAF不能只靠User-Agent过滤,必须组合规则

单纯用if ($http_user_agent ~* "curl|wget") { return 403; } 已经失效。现在恶意爬虫和DDoS工具默认伪造Chrome UA,甚至带完整指纹。

真正有效的WAF规则要分层:

  • 第一层:用ngx_waf或Cloudflare WAF开启js_challenge,拦截无JS执行能力的客户端(99%的自动化工具过不去)
  • 第二层:对/login、/search等高危路径加rate_based_statement,比如AWS WAF里设"Limit": 120(每分钟120次/IP)
  • 第三层:从Nginx日志提取高频IP,用geo + map模块动态打标,再结合limit_req降级限速——比硬编码黑名单更可持续

示例动态标记:

geo $bad_ip {
    default 0;
    192.168.1.100 1;
    203.0.113.42 1;
}
map $bad_ip $limit_key {
    1 "$binary_remote_addr";
    0 "";
}
limit_req_zone $limit_key zone=badip:1m rate=5r/s;

Python后端唯一该做的事:快速失败 + 日志可追溯

别试图在Django/Flask里做IP封禁或复杂限流。它的唯一职责是:收到Nginx转发的请求后,100ms内判断并返回,不参与任何防御决策。

实操建议:

  • 所有接口加@app.before_request钩子,记录request.headers.get("X-Real-IP")(确保Nginx透传)和request.user_agent.string,方便事后关联分析
  • 遇到429 Too Many Requests响应时,Python层不做重试,直接抛出异常并记录——避免重试放大攻击效果
  • 禁用DEBUG=True上线,关闭Django的ALLOWED_HOSTS宽松匹配,防止Host头攻击绕过WAF

最易被忽略的一点:Nginx的limit_req_status默认是503,但很多监控系统只告警5xx,结果攻击来了却没通知。务必显式设成limit_req_status 429;,和Python后端返回码对齐,才能进统一告警管道。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2463

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6350

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5746

10

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1731

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4424

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1709

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

25957

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3147

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3167

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习