溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

nginx黑名單和django限速,最簡(jiǎn)單的防惡意請(qǐng)求方法分享

發(fā)布時(shí)間:2020-10-22 10:36:35 來(lái)源:腳本之家 閱讀:251 作者:一只小coder 欄目:開(kāi)發(fā)技術(shù)

django項(xiàng)目遭遇cc攻擊,不要驚慌,這里推薦兩招簡(jiǎn)單實(shí)用的技巧。

項(xiàng)目Nginx作為http接入層,分發(fā)到django應(yīng)用,啟動(dòng)10個(gè)uwsgi worker。

今日突然發(fā)現(xiàn),網(wǎng)頁(yè)打開(kāi)卡頓,打開(kāi)server一看,cpu100%。

nginx黑名單和django限速,最簡(jiǎn)單的防惡意請(qǐng)求方法分享

打開(kāi)uwsgi的log,發(fā)現(xiàn)某一個(gè)IP進(jìn)行了大量的請(qǐng)求,占用了worker。

這里總結(jié)下兩種解決方法:

1.設(shè)置nginx黑名單

vi blockip.conf創(chuàng)建文件,輸入:

deny x.x.x.x; 

編輯nginx.conf, 在http{}內(nèi)添加:

include blockip.conf;

驗(yàn)證配置:

[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內(nèi)添加middleware

RequestBlockingMiddleware.py

import time
from django.core.exceptions import PermissionDenied
 
from django.utils.deprecation import MiddlewareMixin
MAX_REQUEST_PER_SECOND=2 #每秒訪問(wèn)次數(shù)
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中注冊(cè):

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里再也沒(méi)有對(duì)方的IP出現(xiàn),相信對(duì)方正在某個(gè)小黑屋的電腦前氣得跺腳吧

以上這篇nginx黑名單和django限速,最簡(jiǎn)單的防惡意請(qǐng)求方法分享就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI