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自动重试HTTP连接装饰器
Apr 28 Python
利用Python实现网络测试的脚本分享
May 26 Python
Windows平台Python连接sqlite3数据库的方法分析
Jul 12 Python
Pycharm配置远程调试的方法步骤
Dec 17 Python
python random从集合中随机选择元素的方法
Jan 23 Python
Python实现Linux监控的方法
May 16 Python
Django 数据库同步操作技巧详解
Jul 19 Python
解决python有时候import不了当前的包问题
Aug 28 Python
Python IDLE或shell中切换路径的操作
Mar 09 Python
Python中logger日志模块详解
Aug 04 Python
Python正则re模块使用步骤及原理解析
Aug 18 Python
Python闭包的定义和使用方法
Apr 11 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批量采集下载美女图片的实现代码
2013/06/03 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
原生js实现shift/ctrl/alt按键的获取
2013/04/08 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
JavaScript中的关联数组问题
2015/03/04 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
vue2.0之多页面的开发的示例
2018/01/30 Javascript
浅谈Node框架接入ELK实践总结
2019/02/22 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
在Python的Django框架中编写错误提示页面
2015/07/22 Python
Django中使用Celery的方法示例
2018/11/29 Python
在django view中给form传入参数的例子
2019/07/19 Python
Python实现动态循环输出文字功能
2020/05/07 Python
全球摩托车装备领导者:RevZilla
2017/09/04 全球购物
美国在线打印网站:Overnight Prints
2018/10/11 全球购物
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
员工考核评语大全
2014/04/26 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
贷款委托书
2014/08/01 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
2015年度班主任自我评价
2015/03/11 职场文书
文明礼仪倡议书
2015/04/28 职场文书
微观世界观后感
2015/06/10 职场文书
投诉信回复范文
2015/07/03 职场文书
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle