nginx黑名单和django限速,最简单的防恶意请求方法分享


Posted in Python onAugust 09, 2019

django项目遭遇cc攻击,不要惊慌,这里推荐两招简单实用的技巧。

项目Nginx作为http接入层,分发到django应用,启动10个uwsgi worker。

今日突然发现,网页打开卡顿,打开server一看,cpu100%。

nginx黑名单和django限速,最简单的防恶意请求方法分享

打开uwsgi的log,发现某一个IP进行了大量的请求,占用了worker。

这里总结下两种解决方法:

1.设置nginx黑名单

vi blockip.conf创建文件,输入:

deny x.x.x.x;

编辑nginx.conf, 在http{}内添加:

include blockip.conf;

验证配置:

[root@server nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重启nginx:

nginx -s reload

2.django内添加middleware

RequestBlockingMiddleware.py

import time
from django.core.exceptions import PermissionDenied
 
from django.utils.deprecation import MiddlewareMixin
MAX_REQUEST_PER_SECOND=2 #每秒访问次数
class RequestBlockingMiddleware(MiddlewareMixin):
  def process_request(self,request):
     now=time.time()
     request_queue = request.session.get('request_queue',[])
     if len(request_queue) < MAX_REQUEST_PER_SECOND:
       request_queue.append(now)
       request.session['request_queue']=request_queue
     else:
       time0=request_queue[0]
     if (now-time0)<1:
       raise PermissionDenied('Forbidden user agent')
     request_queue.append(time.time())
     request.session['request_queue']=request_queue[1:]

setting.py中注册:

MIDDLEWARE = [
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'common.middleware.RequestBlockingMiddleware', #在sessions之后,auth之前
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

不足100行代码,log里再也没有对方的IP出现,相信对方正在某个小黑屋的电脑前气得跺脚吧

以上这篇nginx黑名单和django限速,最简单的防恶意请求方法分享就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
连接Python程序与MySQL的教程
Apr 29 Python
为Python的web框架编写MVC配置来使其运行的教程
Apr 30 Python
python2.7 mayavi 安装图文教程(推荐)
Jun 22 Python
Python简单实现自动删除目录下空文件夹的方法
Aug 29 Python
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
Python模块搜索路径代码详解
Jan 29 Python
Python 机器学习库 NumPy入门教程
Apr 19 Python
Python 中Django安装和使用教程详解
Jul 03 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
tensorboard实现同时显示训练曲线和测试曲线
Jan 21 Python
python 使用cx-freeze打包程序的实现
Mar 14 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
May 04 Python
python selenium爬取斗鱼所有直播房间信息过程详解
Aug 09 #Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
Aug 09 #Python
基于python二叉树的构造和打印例子
Aug 09 #Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 #Python
Django ORM 自定义 char 类型字段解析
Aug 09 #Python
解决使用export_graphviz可视化树报错的问题
Aug 09 #Python
Django中自定义admin Xadmin的实现代码
Aug 09 #Python
You might like
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
PHP加密解密实例分析
2015/12/25 PHP
Javascript的IE和Firefox兼容性汇编(zz)
2007/02/02 Javascript
jQuery 性能优化手册 推荐
2010/02/23 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
js实现倒计时及时间对象
2016/11/15 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
对layui中表单元素的使用详解
2018/08/15 Javascript
vue项目前端埋点的实现
2019/03/06 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
Postman内建变量常用方法实例解析
2020/07/28 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
分享Python字符串关键点
2015/12/13 Python
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
Django缓存系统实现过程解析
2019/08/02 Python
python利用dlib获取人脸的68个landmark
2019/11/27 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
2020/05/15 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
详解Flask前后端分离项目案例
2020/07/24 Python
入职担保书怎么写
2014/05/12 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers