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 socket 超时设置 errno 10054
Jul 01 Python
python使用pil生成缩略图的方法
Mar 26 Python
python中正则表达式的使用方法
Feb 25 Python
java中两个byte数组实现合并的示例
May 09 Python
TensorFlow 模型载入方法汇总(小结)
Jun 19 Python
Python 分享10个PyCharm技巧
Jul 13 Python
使用pandas读取文件的实现
Jul 31 Python
pytorch 输出中间层特征的实例
Aug 17 Python
pytorch实现建立自己的数据集(以mnist为例)
Jan 18 Python
keras load model时出现Missing Layer错误的解决方式
Jun 11 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
Dec 17 Python
python 实现图片特效处理
Apr 03 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
一篇入门的php Class 文章
2007/04/04 PHP
php 各种应用乱码问题的解决方法
2010/05/09 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
javascript的键盘控制事件说明
2008/04/15 Javascript
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
2012/04/12 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
python服务器端收发请求的实现代码
2014/09/29 Python
python3实现ftp服务功能(客户端)
2017/03/24 Python
Python如何实现MySQL实例初始化详解
2017/11/06 Python
python中验证码连通域分割的方法详解
2018/06/04 Python
在django view中给form传入参数的例子
2019/07/19 Python
如何将PySpark导入Python的放实现(2种)
2020/04/26 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
JAVA招聘远程笔试题
2015/07/23 面试题
静心口服夜广告词
2014/03/20 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
小学科学教学计划
2015/01/21 职场文书
通知书大全
2015/04/27 职场文书
暑期家教宣传单
2015/07/14 职场文书
婚宴领导致辞
2015/07/28 职场文书
2016年情人节广告语
2016/01/28 职场文书
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫