Nginx防御DDOS攻擊的配置方法教程

前言

銅官ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書(shū)合作)期待與您的合作!

Nginx是一款輕量級(jí)的Web服務(wù)器,由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開(kāi)發(fā),最初供俄國(guó)大型的入口網(wǎng)站及搜尋引Rambler使用。 其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上Nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)站服務(wù)器中表現(xiàn)較好。

防御DDOS是一個(gè)系統(tǒng)工程,攻擊花樣多,防御的成本高瓶頸多,防御起來(lái)即被動(dòng)又無(wú)奈。DDOS的 特點(diǎn)是分布式,針對(duì)帶寬和服務(wù)攻擊,也就是四層流量攻擊和七層應(yīng)用攻擊,相應(yīng)的防御瓶頸四層在帶寬,七層的多在架構(gòu)的吞吐量。對(duì)于七層的應(yīng)用攻擊,我們還 是可以做一些配置來(lái)防御的,例如前端是Nginx,主要使用nginx的http_limit_conn和http_limit_req模塊來(lái)防御。 ngx_http_limit_conn_module 可以限制單個(gè)IP的連接數(shù),ngx_http_limit_req_module 可以限制單個(gè)IP每秒請(qǐng)求數(shù),通過(guò)限制連接數(shù)和請(qǐng)求數(shù)能相對(duì)有效的防御CC攻擊。

下面這篇文章主要給大家介紹了關(guān)于Nginx防御DDOS攻擊的配置方法,分享出來(lái)供打擊參考學(xué)習(xí),下面來(lái)一起看看詳細(xì)的介紹:

Nginx防御DDOS攻擊的配置方法教程

下面是配置方法:

一. 限制每秒請(qǐng)求數(shù)

ngx_http_limit_req_module模塊通過(guò)漏桶原理來(lái)限制單位時(shí)間內(nèi)的請(qǐng)求數(shù),一旦單位時(shí)間內(nèi)請(qǐng)求數(shù)超過(guò)限制,就會(huì)返回503錯(cuò)誤。配置需要在兩個(gè)地方設(shè)置:

nginx.conf的http段內(nèi)定義觸發(fā)條件,可以有多個(gè)條件

在location內(nèi)定義達(dá)到觸發(fā)條件時(shí)nginx所要執(zhí)行的動(dòng)作

例如:

http {
  limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; 
//觸發(fā)條件,所有訪問(wèn)ip 限制每秒10個(gè)請(qǐng)求  ...  
server { 
  ...   
location ~ \.php$ {
    limit_req zone=one burst=5 nodelay; //執(zhí)行的動(dòng)作,通過(guò)zone名字對(duì)應(yīng)    
 }   
 }  
 } 

參數(shù)說(shuō)明:

  • $binary_remote_addr 二進(jìn)制遠(yuǎn)程地址
  • zone=one:10m 定義zone名字叫one,并為這個(gè)zone分配10M內(nèi)存,用來(lái)存儲(chǔ)會(huì)話(二進(jìn)制遠(yuǎn)程地址),1m內(nèi)存可以保存16000會(huì)話
  • rate=10r/s; 限制頻率為每秒10個(gè)請(qǐng)求
  • burst=5 允許超過(guò)頻率限制的請(qǐng)求數(shù)不多于5個(gè),假設(shè)1、2、3、4秒請(qǐng)求為每秒9個(gè),那么第5秒內(nèi)請(qǐng)求15個(gè)是允許的,反之,如果第一秒內(nèi)請(qǐng)求15個(gè),會(huì)將5個(gè)請(qǐng)求放到第二秒,第二秒內(nèi)超過(guò)10的請(qǐng)求直接503,類似多秒內(nèi)平均速率限制。
  • nodelay 超過(guò)的請(qǐng)求不被延遲處理,設(shè)置后15個(gè)請(qǐng)求在1秒內(nèi)處理。

二.限制IP連接數(shù)

ngx_http_limit_conn_module的配置方法和參數(shù)與http_limit_req模塊很像,參數(shù)少,要簡(jiǎn)單很多

http {
  limit_conn_zone $binary_remote_addr zone=addr:10m; //觸發(fā)條件  ...  
server { 
  ...   
location /download/ { 
   limit_conn addr 1; // 限制同一時(shí)間內(nèi)1個(gè)連接,超出的連接返回503 
    } 
   } 
 } 

三.白名單設(shè)置

http_limit_conn 和http_limit_req模塊限制了單ip單位時(shí)間內(nèi)的并發(fā)和請(qǐng)求數(shù),但是如果Nginx前面有l(wèi)vs或者h(yuǎn)aproxy之類的負(fù)載均衡或者反向代 理,nginx獲取的都是來(lái)自負(fù)載均衡的連接或請(qǐng)求,這時(shí)不應(yīng)該限制負(fù)載均衡的連接和請(qǐng)求,就需要geo和map模塊設(shè)置白名單:

geo $whiteiplist {

 default 1; 10.11.15.161 0; 

} map $whiteiplist $limit {

 1 $binary_remote_addr; 0 ""; 

} 
limit_req_zone $limit zone=one:10m rate=10r/s;

limit_conn_zone $limit zone=addr:10m;

geo模塊定義了一個(gè)默認(rèn)值是1的變量whiteiplist,當(dāng)在ip在白名單中,變量whiteiplist的值為0,反之為1

如果在白名單中--> whiteiplist=0 --> $limit="" --> 不會(huì)存儲(chǔ)到10m的會(huì)話狀態(tài)(one或者addr)中 --> 不受限制

反之,不在白名單中 --> whiteiplist=1 --> $limit=二進(jìn)制遠(yuǎn)程地址 -->存儲(chǔ)進(jìn)10m的會(huì)話狀態(tài)中 --> 受到限制

四.測(cè)試

使用ab命令來(lái)模擬CC攻擊,http_limit_conn 和http_limit_req模塊要分開(kāi)測(cè)試,同時(shí)注意http_limit_conn模塊只統(tǒng)計(jì)正在被處理的請(qǐng)求(這些請(qǐng)求的頭信息已被完全讀入)所 在的連接。如果請(qǐng)求已經(jīng)處理完,連接沒(méi)有被關(guān)閉時(shí),是不會(huì)被統(tǒng)計(jì)的。這時(shí)用netstat看到連接數(shù)可以超過(guò)限定的數(shù)量,不會(huì)被阻止。

ab -n 請(qǐng)求數(shù) -c 并發(fā) http://10.11.15.174/i.php

如果被阻止前臺(tái)會(huì)返回503,同時(shí)在nginx的error_log中會(huì)看到如下錯(cuò)誤日志:

被限制連接數(shù):

2015/01/28 14:20:26 [error] 4107#0: *65525 limiting connections by zone "addr", client: 10.11.15.161, server: , request: "GET /i.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 HTTP/1.1", host: "10.11.15.174", referrer: "http://10.11.15.174/i.php"

被限制請(qǐng)求數(shù):

2015/01/28 14:18:59 [error] 4095#0: *65240 limiting requests, excess: 5.772 by zone "one", client: 10.11.15.161, server: , request: "GET /i.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.1", host: "10.11.15.174", referrer: "http://10.11.15.174/i.php"

五.其它一些防CC的方法

1.Nginx模塊 ModSecurity、http_guard、ngx_lua_waf

  • ModSecurity 應(yīng)用層WAF,功能強(qiáng)大,能防御的攻擊多,配置復(fù)雜
  • ngx_lua_waf 基于ngx_lua的web應(yīng)用防火墻,使用簡(jiǎn)單,高性能和輕量級(jí)
  • http_guard 基于openresty

2.軟件+Iptables

  • fail2ban 通過(guò)分析日志來(lái)判斷是否使用iptables攔截
  • DDoS Deflate 通過(guò)netstat判斷ip連接數(shù),并使用iptables屏蔽

開(kāi)頭說(shuō)過(guò)抗DDOS是一個(gè)系統(tǒng)工程,通過(guò)優(yōu)化系統(tǒng)和軟件配置,只能防御小規(guī)模的CC攻擊,對(duì)于大規(guī)模攻擊、四層流量攻擊、混合攻擊來(lái)說(shuō),基本上系統(tǒng)和應(yīng)用軟件沒(méi)掛,帶寬就打滿了。下面是我在工作中使用過(guò)的防御DDOS的方式:

1、高防服務(wù)器和帶流量清洗的ISP

      通常是美韓的服務(wù)器,部分ISP骨干供應(yīng)商有流量清洗服務(wù),例如香港的PCCW。通常可以防御10G左右的小型攻擊

2、流量清洗服務(wù) 例如:akamai(prolexic),nexusguard 我們最大受到過(guò)80G流量的攻擊,成功被清洗,但是費(fèi)用非常貴

3、cdn 例如:藍(lán)訊 網(wǎng)宿 cloudflare

      等,CDN針對(duì)DDOS的分布式特點(diǎn),將流量引流分散,同時(shí)對(duì)網(wǎng)站又有加速作用,效果好,成本相對(duì)低。

總結(jié)一下:發(fā)動(dòng)攻擊易,防御難。七層好防,四層難防;小型能防,大型燒錢(qián)

好了,以上就是這篇文章的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。

參考文章:

http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

http://www.nginx.cn/446.html

http://www.ttlsa.com/nginx/nginx-limited-connection-number-ngx_http_limit_conn_module-module/

文章題目:Nginx防御DDOS攻擊的配置方法教程
當(dāng)前鏈接:http://muchs.cn/article18/jioegp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、電子商務(wù)、服務(wù)器托管、建站公司虛擬主機(jī)、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名