自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用Nginx處理DDOS進(jìn)行系統(tǒng)優(yōu)化

運(yùn)維 服務(wù)器運(yùn)維 黑客攻防
什么是分布式拒絕服務(wù)DDoS(Distributed Denial of Service)意為分布式拒絕服務(wù)攻擊,攻擊者利用大量“肉雞”對(duì)攻擊目標(biāo)發(fā)動(dòng)大量的正?;蚍钦U?qǐng)求,耗盡目標(biāo)主機(jī)資源或網(wǎng)絡(luò)資源,從而使被攻擊者不能為合法用戶提供服務(wù)。

 DDoS很常見,甚至被稱為黑客圈子的準(zhǔn)入技能;DDoS又很兇猛,搞起事來幾乎壓垮一方網(wǎng)絡(luò)。

什么是分布式拒絕服務(wù)DDoS(Distributed Denial of Service)意為分布式拒絕服務(wù)攻擊,攻擊者利用大量“肉雞”對(duì)攻擊目標(biāo)發(fā)動(dòng)大量的正常或非正常請(qǐng)求,耗盡目標(biāo)主機(jī)資源或網(wǎng)絡(luò)資源,從而使被攻擊者不能為合法用戶提供服務(wù)。通常情況下,攻擊者會(huì)嘗試使擁有這么多連接的系統(tǒng)飽和,并要求它不再能夠接受新的流量,或者變得非常緩慢以至于無法使用。

[[241546]]

換句話說老張的飯店(被攻擊目標(biāo))可接待100個(gè)顧客同時(shí)就餐,隔壁老王(攻擊者)雇傭了200個(gè)人(肉雞),進(jìn)飯店霸占位置卻不吃不喝(非正常請(qǐng)求),飯店被擠得滿滿當(dāng)當(dāng)(資源耗盡),而真正要吃飯的顧客卻進(jìn)不來,飯店無法正常營業(yè)(DDoS攻擊達(dá)成)。那么問題來了,老張?jiān)撛趺崔k?

[[241547]]

當(dāng)然是,轟出去!

[[241548]]

通常情況下,攻擊者會(huì)嘗試使擁有這么多連接的系統(tǒng)飽和,并要求它不再能夠接受新的流量,或者變得非常緩慢以至于無法使用。

應(yīng)用層DDoS攻擊特性

應(yīng)用層(第7層/ HTTP)DDoS攻擊由軟件程序(機(jī)器人)執(zhí)行,該軟件程序可以定制為最佳利用特定系統(tǒng)的漏洞。例如,對(duì)于不能很好地處理大量并發(fā)連接的系統(tǒng),僅通過周期性地發(fā)送少量流量打開大量連接并保持活動(dòng)狀態(tài),可能會(huì)耗盡系統(tǒng)的新連接容量。其他攻擊可以采取發(fā)送大量請(qǐng)求或非常大的請(qǐng)求的形式。由于這些攻擊是由僵尸程序而不是實(shí)際用戶執(zhí)行的,因此攻擊者可以輕松地打開大量連接并非??焖俚匕l(fā)送大量請(qǐng)求。

DDoS攻擊的特征可以用來幫助減輕這些攻擊,包括以下內(nèi)容(這并不意味著是一個(gè)詳盡的列表):

-流量通常來自一組固定的IP地址,屬于用于執(zhí)行攻擊的機(jī)器。因此,每個(gè)IP地址負(fù)責(zé)的連接和請(qǐng)求數(shù)量遠(yuǎn)遠(yuǎn)超出您對(duì)真實(shí)用戶的期望。

注意:不要認(rèn)為此流量模式總是代表DDoS攻擊。轉(zhuǎn)發(fā)代理的使用也可以創(chuàng)建這種模式,因?yàn)檗D(zhuǎn)發(fā)代理服務(wù)器的IP地址被用作來自它所服務(wù)的所有真實(shí)客戶端的請(qǐng)求的客戶端地址。但是,來自轉(zhuǎn)發(fā)代理的連接數(shù)和請(qǐng)求數(shù)通常遠(yuǎn)低于DDoS攻擊。

-由于流量是由機(jī)器人生成的,并且意味著壓倒服務(wù)器,因此流量速率遠(yuǎn)高于人類用戶可以生成的流量。

- User-Agent報(bào)頭被設(shè)置有時(shí)到非標(biāo)準(zhǔn)值。

-該 Referer頭有時(shí)設(shè)為您可以與攻擊相關(guān)聯(lián)的值。

使用NGINX和NGINX Plus來抵御DDoS攻擊

NGINX和NGINX Plus具有許多功能,與上述的DDoS攻擊特性相結(jié)合,可以使它們成為DDoS攻擊緩解解決方案的重要組成部分。這些功能通過調(diào)節(jié)傳入流量并通過控制流量代理后端服務(wù)器來解決DDoS攻擊。

NGINX事件驅(qū)動(dòng)架構(gòu)的內(nèi)在保護(hù)

NGINX旨在成為您的網(wǎng)站或應(yīng)用程序的“減震器”。它具有非阻塞的事件驅(qū)動(dòng)架構(gòu),可以應(yīng)對(duì)大量請(qǐng)求,而不會(huì)明顯增加資源利用率。

來自網(wǎng)絡(luò)的新請(qǐng)求不會(huì)中斷NGINX處理正在進(jìn)行的請(qǐng)求,這意味著NGINX可以利用下面描述的技術(shù)來保護(hù)您的站點(diǎn)或應(yīng)用免受攻擊。

有關(guān)底層架構(gòu)的更多信息,請(qǐng)參閱Inside NGINX:我們?nèi)绾螢樾阅芎鸵?guī)模設(shè)計(jì)。

限制請(qǐng)求率

您可以將NGINX和NGINX Plus接收傳入請(qǐng)求的速率限制為實(shí)際用戶的典型值。例如,您可能會(huì)決定訪問登錄頁面的真實(shí)用戶每2秒只能發(fā)出一個(gè)請(qǐng)求。您可以配置NGINX和NGINX Plus,以允許單個(gè)客戶端IP地址每2秒嘗試登錄(相當(dāng)于每分鐘30個(gè)請(qǐng)求):

  1. limit_req_zone $binary_remote_addr zone=one: 
  2. 10m 
  3.  rate= 
  4. 30r 
  5. /m; 
  6. server { 
  7.      
  8. # ... 
  9.     location /login.html { 
  10.         limit_req zone=one; 
  11.      
  12. # ... 
  13.     } 

該 limit_req_zone 指令配置一個(gè)名為“ one”的共享內(nèi)存區(qū)域,用于存儲(chǔ)指定密鑰的請(qǐng)求狀態(tài),在本例中為客戶機(jī)IP地址( $binary_remote_addr)。/login.html塊中的 limit_req 指令引用共享內(nèi)存區(qū)域。 location有關(guān)速率限制的詳細(xì)討論,請(qǐng)參閱博客上的NGINX和NGINX Plus的速率限制。

限制連接數(shù)量

您可以限制單個(gè)客戶端IP地址可以打開的連接數(shù),也可以限制為適合真實(shí)用戶的值。例如,您可以允許每個(gè)客戶端IP地址打開不超過10個(gè)到您網(wǎng)站的/ store區(qū)域的連接:

  1. limit_conn_zone $binary_remote_addr zone=addr: 10m 
  2. server { 
  3.      
  4. # ... 
  5.     location /store/ { 
  6.         limit_conn addr  10 
  7.          
  8. # ... 
  9.     } 

該 limit_conn_zone 指令配置了一個(gè)名為addr的共享內(nèi)存區(qū)域,用于存儲(chǔ)指定密鑰的請(qǐng)求,在這種情況下(如前例所示)客戶端IP地址 $binary_remote_addr。在 limit_conn該指令 location為塊/存儲(chǔ)引用共享存儲(chǔ)器區(qū),并設(shè)置一個(gè)最大從每個(gè)客戶端IP地址10個(gè)連接。

關(guān)閉慢速連接

您可以關(guān)閉正在寫入數(shù)據(jù)的連接,這可能意味著嘗試盡可能保持連接打開(從而降低服務(wù)器接受新連接的能力)。Slowloris就是這種攻擊的一個(gè)例子。該 client_body_timeout指令控制NGINX在客戶機(jī)體寫入之間等待的時(shí)間,該 client_header_timeout 指令控制NGINX在寫入客戶機(jī)標(biāo)題之間等待的時(shí)間。這兩個(gè)指令的默認(rèn)值是60秒。本示例將NGINX配置為在來自客戶端的寫入或頭文件之間等待不超過5秒鐘:

  1. server { 
  2.     client_body_timeout 5s; 
  3.     client_header_timeout 5s; 
  4.      
  5. # ... 

列入黑名單IP地址

如果您可以識(shí)別用于攻擊的客戶端IP地址,則可以使用該 deny指令將其列入黑名單,以便NGINX和NGINX Plus不接受其連接或請(qǐng)求。例如,如果您確定攻擊來自地址范圍123.123.123.1到123.123.123.16:

  1. location / { 
  2.     deny  123.123 123.0 28 
  3.      
  4. # ... 

或者,如果您確定攻擊來自客戶端IP地址123.123.123.3,123.123.123.5和123.123.123.7:

  1. location / { 
  2.    deny 123.123.123.3; 
  3.    deny 123.123.123.5; 
  4.    deny 123.123.123.7; 
  5.    # ... 

將白名單IP地址

如果僅允許從一個(gè)或多個(gè)特定組或范圍的客戶端IP地址訪問您的網(wǎng)站或應(yīng)用程序,則可以一起使用 allow和 deny指令以僅允許這些地址訪問該站點(diǎn)或應(yīng)用程序。例如,您可以限制只訪問特定本地網(wǎng)絡(luò)中的地址:

  1. ​location / { 
  2.     allow 192.168.1.0/24; 
  3.     deny all
  4.     # ... 

在這里, deny all指令阻止所有不在 allow指令指定的范圍內(nèi)的客戶端IP地址。

使用緩存來平滑流量尖峰

您可以配置NGINX和NGINX Plus來吸收攻擊導(dǎo)致的大量流量峰值,方法是啟用緩存并設(shè)置某些緩存參數(shù)以卸載后端的請(qǐng)求。一些有用的設(shè)置是:

  • 該指令的 updating參數(shù) proxy_cache_use_stale告訴NGINX,當(dāng)它需要獲取一個(gè)陳舊的緩存對(duì)象的更新時(shí),它應(yīng)該只發(fā)送一個(gè)更新請(qǐng)求,并且繼續(xù)將陳舊對(duì)象提供給在接收時(shí)間期間請(qǐng)求它的客戶端來自后端服務(wù)器的更新。當(dāng)對(duì)某個(gè)文件的重復(fù)請(qǐng)求是攻擊的一部分時(shí),這會(huì)顯著減少對(duì)后端服務(wù)器的請(qǐng)求數(shù)量。
  • 該 proxy_cache_key指令定義的鍵通常由嵌入式變量組成(缺省鍵 $scheme$proxy_host$request_uri,有三個(gè)變量)。如果該值包含 $query_string 變量,則發(fā)送隨機(jī)查詢字符串的攻擊可能導(dǎo)致過度緩存。 $query_string除非您有特殊原因,否則我們建議您不要在變量中包含變量。

阻止請(qǐng)求

您可以配置NGINX或NGINX Plus來阻止幾種請(qǐng)求:

  • 請(qǐng)求一個(gè)似乎有針對(duì)性的特定網(wǎng)址
  • User-Agent報(bào)頭設(shè)置為與正常客戶端流量不對(duì)應(yīng)的值的請(qǐng)求
  • 將 Referer標(biāo)頭設(shè)置為可與攻擊關(guān)聯(lián)的值的請(qǐng)求
  • 其他頭文件具有可與攻擊關(guān)聯(lián)的值的請(qǐng)求

例如,如果您確定DDoS攻擊的目標(biāo)是URL /foo.php,則可以阻止該頁面的所有請(qǐng)求:

  1. ​location /foo.php { 
  2.     deny all

或者,如果您發(fā)現(xiàn)DDoS攻擊請(qǐng)求的 User-Agent頭部值為 foo或 bar,則可以阻止這些請(qǐng)求。

  1. ​location / { 
  2.     if ($http_user_agent ~* foo|bar) { 
  3.         return 403; 
  4.     } 
  5.     # ... 

該變量引用一個(gè)請(qǐng)求頭,在上面的例子中是頭。類似的方法可以用于具有可用于識(shí)別攻擊的值的其他報(bào)頭。 http_*name*``User-Agent

限制到后端服務(wù)器的連接

NGINX或NGINX Plus實(shí)例通??梢蕴幚肀蓉?fù)載平衡的后端服務(wù)器更多的并發(fā)連接。使用NGINX Plus,您可以限制連接到每個(gè)后端服務(wù)器的數(shù)量。例如,如果要限制NGINX Plus與網(wǎng)站 上游組中的兩個(gè)后端服務(wù)器建立的連接數(shù)不超過200個(gè):

  1. ​upstream website { 
  2.     server 192.168.100.1:80 max_conns=200; 
  3.     server 192.168.100.2:80 max_conns=200; 
  4.     queue 10 timeout=30s; 

max_conns 應(yīng)用于每個(gè)服務(wù)器的參數(shù)指定NGINX Plus打開的最大連接數(shù)。該 queue 指令限制上游組中所有服務(wù)器達(dá)到其連接限制時(shí)排隊(duì)的請(qǐng)求數(shù),并且該 timeout參數(shù)指定在隊(duì)列中保留請(qǐng)求的時(shí)間。

處理基于范圍的攻擊

一種攻擊方法是發(fā)送一個(gè) Range具有非常大值的標(biāo)頭,這可能導(dǎo)致緩沖區(qū)溢出。有關(guān)如何使用NGINX和NGINX Plus來緩解此類攻擊的討論,請(qǐng)參閱使用NGINX和NGINX Plus來保護(hù)CVE-2015-1635。

處理高負(fù)荷

DDoS攻擊通常會(huì)導(dǎo)致高流量負(fù)載。有關(guān)調(diào)整NGINX或NGINX Plus以及允許系統(tǒng)處理更高負(fù)載的操作系統(tǒng)的提示,請(qǐng)參閱調(diào)整NGINX的性能。

識(shí)別DDoS攻擊

到目前為止,我們專注于您可以使用NGINX和NGINX Plus來幫助減輕DDoS攻擊的影響。但NGINX或NGINX Plus如何幫助您發(fā)現(xiàn)DDoS攻擊呢?該NGINX加狀態(tài)模塊 提供了有關(guān)被負(fù)載后端服務(wù)器,你可以用它來發(fā)現(xiàn)異常流量模式平衡交通的詳細(xì)指標(biāo)。NGINX Plus附帶了一個(gè)狀態(tài)儀表板網(wǎng)頁,以圖形方式描述了NGINX Plus系統(tǒng)的當(dāng)前狀態(tài)(請(qǐng)參閱demo.nginx.com上的示例)。通過API也可以使用相同的指標(biāo),您可以使用它將指標(biāo)提供給自定義或第三方監(jiān)控系統(tǒng),您可以在其中進(jìn)行歷史趨勢(shì)分析以發(fā)現(xiàn)異常模式并啟用警報(bào)。

 

責(zé)任編輯:武曉燕 來源: 支付浪潮
相關(guān)推薦

2018-06-10 15:30:36

2016-10-20 14:22:46

2020-12-11 18:58:21

Nginx瀏覽器緩存

2021-05-09 22:48:40

SQL數(shù)據(jù)庫變量

2013-02-26 10:08:21

2009-04-28 09:25:15

Oracle系統(tǒng)參數(shù)優(yōu)化

2023-07-13 11:24:14

SQL優(yōu)化賦值

2011-03-24 09:03:13

Android SDKAndroid

2011-05-16 11:29:10

Google EartAndroid

2009-04-16 17:44:46

性能優(yōu)化擴(kuò)展高性能

2009-08-05 10:08:55

MySQL查詢優(yōu)化調(diào)度鎖定

2022-05-21 23:33:54

DDoS網(wǎng)絡(luò)安全負(fù)載均衡器

2011-08-10 09:13:22

2015-08-31 10:14:40

2018-08-19 09:15:25

MongoDBGo 微服務(wù)

2013-05-20 10:02:56

2009-05-20 14:56:58

ibmdwWebSphereSOA

2010-03-05 09:40:08

Python遞歸

2021-07-08 15:48:51

僵尸網(wǎng)絡(luò)IoTDDoS攻擊

2021-04-21 20:42:42

Nadam梯度優(yōu)化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)