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中的getattr函数 hasattr函数
Jun 14 Python
用生成器来改写直接返回列表的函数方法
May 25 Python
使用python3+xlrd解析Excel的实例
May 04 Python
python requests post多层字典的方法
Dec 27 Python
python跳出双层for循环的解决方法
Jun 24 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
Mar 01 Python
Python基于pyecharts实现关联图绘制
Mar 27 Python
Python datetime模块使用方法小结
Jun 18 Python
python把一个字符串切开的实例方法
Sep 27 Python
Jupyter Notebook内使用argparse报错的解决方案
Jun 03 Python
Python OpenCV 彩色与灰度图像的转换实现
Jun 05 Python
python中urllib包的网络请求教程
Apr 19 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 中执行系统外部命令
2006/10/09 PHP
在字符串指定位置插入一段字符串的php代码
2010/02/16 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
PHP中通过trigger_error触发PHP错误示例
2015/06/23 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
javascript 浏览器检测代码精简版
2010/03/04 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
Jquery中map函数的用法
2016/06/03 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
Python连接SQLServer2000的方法详解
2017/04/19 Python
浅谈Django自定义模板标签template_tags的用处
2017/12/20 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
Python3中编码与解码之Unicode与bytes的讲解
2019/02/28 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
python如何快速拼接字符串
2020/10/28 Python
Python字典dict常用方法函数实例
2020/11/09 Python
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
总经理岗位职责说明书
2014/07/30 职场文书
三八节祝酒词
2015/08/11 职场文书
Java中使用Filter过滤器的方法
2021/06/28 Java/Android
Python语言中的数据类型-序列
2022/02/24 Python