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的身份证号码自动生成程序
Aug 15 Python
Python脚本实现网卡流量监控
Feb 14 Python
python通过shutil实现快速文件复制的方法
Mar 14 Python
Python实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
Centos Python2 升级到Python3的简单实现
Jun 21 Python
python实现按任意键继续执行程序
Dec 30 Python
Python使用统计函数绘制简单图形实例代码
May 15 Python
Python3 执行系统命令并获取实时回显功能
Jul 09 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
Python Celery多队列配置代码实例
Nov 22 Python
python 实现简单的计算器(gui界面)
Nov 11 Python
Python实现对word文档添加密码去除密码的示例代码
Dec 29 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
使用eAccelerator加密PHP程序
2008/10/03 PHP
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
Python使用MD5加密字符串示例
2014/08/22 Python
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
Python使用wget实现下载网络文件功能示例
2018/05/31 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
python 实现线程之间的通信示例
2020/02/14 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
巴西最大的体育用品商城:Netshoes巴西
2016/11/29 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
农行心得体会
2014/09/02 职场文书
2014年电工工作总结
2014/11/20 职场文书
领导干部失职检讨书
2015/05/05 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python
浅谈vue2的$refs在vue3组合式API中的替代方法
2021/04/18 Vue.js
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android