欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Nginx、Nginx Plus抵御DDOS攻擊的方法

 更新時(shí)間:2018年06月11日 14:24:57   作者:趙寧寧  
DDOS 是一種通過大流量的請(qǐng)求對(duì)目標(biāo)進(jìn)行轟炸式訪問,導(dǎo)致提供服務(wù)的服務(wù)器資源耗盡進(jìn)而無法繼續(xù)提供服務(wù)的攻擊手段。這篇文章主要介紹了使用Nginx、Nginx Plus抵御DDOS攻擊的方法,感興趣的小伙伴們可以參考一下

DDOS 是一種通過大流量的請(qǐng)求對(duì)目標(biāo)進(jìn)行轟炸式訪問,導(dǎo)致提供服務(wù)的服務(wù)器資源耗盡進(jìn)而無法繼續(xù)提供服務(wù)的攻擊手段。

一般情況下,攻擊者通過大量請(qǐng)求與連接使服務(wù)器處于飽和狀態(tài),以至于無法接受新的請(qǐng)求或變得很慢。

一、應(yīng)用層DDOS攻擊的特征

應(yīng)用層(七層/HTTP層)DDOS 攻擊通常由木馬程序發(fā)起,其可以通過設(shè)計(jì)更好的利用目標(biāo)系統(tǒng)的脆弱點(diǎn)。例如,對(duì)于無法處理大量并發(fā)請(qǐng)求的系統(tǒng),僅僅通過建立大量的連接,并周期性的發(fā)出少量數(shù)據(jù)包來保持會(huì)話就可以耗盡系統(tǒng)的資源,使其無法接受新的連接請(qǐng)求達(dá)到 DDOS 的目的。其他還有采用發(fā)送大量連接請(qǐng)求發(fā)送大數(shù)據(jù)包的請(qǐng)求進(jìn)行攻擊的形式。因?yàn)楣羰怯赡抉R程序發(fā)起,攻擊者可以在很短時(shí)間內(nèi)快速建立大量的連接,并發(fā)出大量的請(qǐng)求。

以下是一些DDOS的特證,我們可以據(jù)此特征來抵抗 DDOS(包括但不限于):

  1. 攻擊經(jīng)常來源于一些相對(duì)固定的 IP 或 IP 段,每個(gè) IP 都有遠(yuǎn)大于真實(shí)用戶的連接數(shù)和請(qǐng)求數(shù)。(備注:這并不表明這種請(qǐng)求都是代表著 DDOS 攻擊。在很多使用NAT的網(wǎng)絡(luò)架構(gòu)中,很多的客戶端使用網(wǎng)關(guān)的 IP 地址訪問公網(wǎng)資源。但是,即便如此,這樣的請(qǐng)求數(shù)和連接數(shù)也會(huì)遠(yuǎn)少于 DDOS 攻擊。)
  2. 因?yàn)楣羰怯赡抉R發(fā)出且目的是使服務(wù)器超負(fù)荷,請(qǐng)求的頻率會(huì)遠(yuǎn)遠(yuǎn)超過正常人的請(qǐng)求。
  3. User-Agent 通常是一個(gè)非標(biāo)準(zhǔn)的值
  4. Referer 有時(shí)是一個(gè)容易聯(lián)想到攻擊的值

二、使用Nginx、Nginx Plus抵抗DDOS攻擊

結(jié)合上面提到的 DDOS 攻擊的特征,Nginx、Nginx Plus有很多的特性可以用來有效的防御 DDOS 攻擊,可以從調(diào)整入口訪問流量和控制反向代理到后端服務(wù)器的流量?jī)蓚€(gè)方面來達(dá)到抵御 DDOS 攻擊的目的。

1. 限制請(qǐng)求速度

設(shè)置 Nginx、Nginx Plus 的連接請(qǐng)求在一個(gè)真實(shí)用戶請(qǐng)求的合理范圍內(nèi)。比如,如果你覺得一個(gè)正常用戶每?jī)擅肟梢哉?qǐng)求一次登錄頁面,你就可以設(shè)置 Nginx 每?jī)擅腌娊邮找粋€(gè)客戶端 IP 的請(qǐng)求(大約等同于每分鐘30個(gè)請(qǐng)求)。

limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; 
server { 
... 
location /login.html { 
limit_req zone=one; 
... 
} 
} 

`limit_req_zone` 命令設(shè)置了一個(gè)叫 one 的共享內(nèi)存區(qū)來存儲(chǔ)請(qǐng)求狀態(tài)的特定鍵值,在上面的例子中是客戶端 IP($binary_remote_addr)。location 塊中的 `limit_req` 通過引用 one 共享內(nèi)存區(qū)來實(shí)現(xiàn)限制訪問 /login.html 的目的。

2. 限制連接數(shù)量

設(shè)置 Nginx、Nginx Plus 的連接數(shù)在一個(gè)真實(shí)用戶請(qǐng)求的合理范圍內(nèi)。比如,你可以設(shè)置每個(gè)客戶端 IP 連接 /store 不可以超過10個(gè)。

limit_conn_zone $binary_remote_addr zone=addr:10m; 
server { 
... 
location /store/ { 
limit_conn addr 10; 
... 
} 
} 

`limit_conn_zone` 命令設(shè)置了一個(gè)叫 addr 的共享內(nèi)存區(qū)來存儲(chǔ)特定鍵值的狀態(tài),在上面的例子中是客戶端 IP( $binary_remote_addr)。location 塊中 `limit_conn` 通過引用 addr 共享內(nèi)存區(qū)來限制到 /store/ 的最大連接數(shù)為10。

3. 關(guān)閉慢連接

有一些 DDOS 攻擊,比如 Slowlris,是通過建立大量的連接并周期性的發(fā)送一些數(shù)據(jù)包保持會(huì)話來達(dá)到攻擊目的,這種周期通常會(huì)低于正常的請(qǐng)求。這種情況我們可以通過關(guān)閉慢連接來抵御攻擊。

`client_body_timeout` 命令用來定義讀取客戶端請(qǐng)求的超時(shí)時(shí)間,`client_header_timeout` 命令用來定于讀取客戶端請(qǐng)求頭的超時(shí)時(shí)間。這兩個(gè)參數(shù)的默認(rèn)值都是 60s,我們可以通過下面的命令將他們?cè)O(shè)置為 5s:

server { 
client_body_timeout 5s; 
client_header_timeout 5s; 
... 
} 

4. 設(shè)置IP黑名單

如果確定攻擊來源于某些 IP 地址,我們可以將其加入黑名單,Nginx 就不會(huì)再接受他們的請(qǐng)求。比如,你已經(jīng)確定攻擊來自于從123.123.123.1到123.123.123.16的一段 IP 地址,你可以這樣設(shè)置:

location / { 
deny 123.123.123.0/28; 
... 
} 

或者你確定攻擊來源于123.123.123.3、123.123.123.5、123.123.123.7幾個(gè)IP,可以這樣設(shè)置:

location / { 
deny 123.123.123.3; 
deny 123.123.123.5; 
deny 123.123.123.7; 
... 
} 

5. 設(shè)置IP白名單

如果你的網(wǎng)站僅允許特定的 IP 或 IP 段訪問,你可以結(jié)合使用 allow 和 deny 命令來限制僅允許你指定的 IP 地址訪問你的網(wǎng)站。如下,你可以設(shè)置僅允許 192.168.1.0 段的內(nèi)網(wǎng)用戶訪問:

location / { 
allow 192.168.1.0/24; 
deny all; 
... 
} 

deny 命令會(huì)拒絕除了 allow 指定的 IP 段之外的所有其他 IP 的訪問請(qǐng)求。

6. 使用緩存進(jìn)行流量削峰

通過打開 Nginx 的緩存功能并設(shè)置特定的緩存參數(shù),可以削減來自攻擊的流量,同時(shí)也可以減輕對(duì)后端服務(wù)器的請(qǐng)求壓力。以下是一些有用的設(shè)置:

  1. proxy_cache_use_stale ` 的 updating 參數(shù)告訴 Nginx 什么時(shí)候該更新所緩存的對(duì)象。只需要到后端的一個(gè)更新請(qǐng)求,在緩存有效期間客戶端對(duì)該對(duì)象的請(qǐng)求都無需訪問后端服務(wù)器。當(dāng)通過對(duì)一個(gè)文件的頻繁請(qǐng)求來實(shí)施攻擊時(shí),緩存功能可極大的降低到后端服務(wù)器的請(qǐng)求。
  2. proxy_cache_key ` 命令定義的鍵值通常包含一些內(nèi)嵌的變量(默認(rèn)的鍵值 $scheme$proxy_host$request_uri 包含了三個(gè)變量)。如果鍵值包含 `$query_string` 變量,當(dāng)攻擊的請(qǐng)求字符串是隨機(jī)的時(shí)候就會(huì)給 Nginx 代理過重的緩存負(fù)擔(dān),因此我們建議一般情況下不要包含 `$query_string` 變量。

7. 屏蔽特定的請(qǐng)求

可以設(shè)置 Nginx、Nginx Plus 屏蔽一些類型的請(qǐng)求:

  1. 針對(duì)特定 URL 的請(qǐng)求
  2. 針對(duì)不是常見的 User-Agent 的請(qǐng)求
  3. 針對(duì) Referer 頭中包含可以聯(lián)想到攻擊的值的請(qǐng)求
  4. 針對(duì)其他請(qǐng)求頭中包含可以聯(lián)想到攻擊的值的請(qǐng)求

比如,如果你判定攻擊是針對(duì)一個(gè)特定的 URL:/foo.php,我們就可以屏蔽到這個(gè)頁面的請(qǐng)求:

location /foo.php { 
deny all; 
} 

或者你判定攻擊請(qǐng)求的 User-Agent 中包含 foo 或 bar,我們也可以屏蔽這些請(qǐng)求:

location / { 
if ($http_user_agent ~* foo|bar) { 
return 403; 
} 
... 
} 

http_name 變量引用一個(gè)請(qǐng)求頭,上述例子中是 User-Agent 頭??梢葬槍?duì)其他的 http 頭使用類似的方法來識(shí)別攻擊。

8. 限制到后端服務(wù)器的連接數(shù)

一個(gè) Nginx、Nginx Plus 實(shí)例可以處理比后端服務(wù)器多的多的并發(fā)請(qǐng)求。在 Nginx Plus 中,你可以限制到每一個(gè)后端服務(wù)器的連接數(shù),比如可以設(shè)置 Nginx Plus 與 website upstream 中的每個(gè)后端服務(wù)器建立的連接數(shù)不得超過200個(gè):

upstream website { 
server 192.168.100.1:80 max_conns=200; 
server 192.168.100.2:80 max_conns=200; 
queue 10 timeout=30s; 
} 

`max_conns` 參數(shù)可以針對(duì)每一個(gè)后端服務(wù)器設(shè)置 Nginx Plus 可以與之建立的最大連接數(shù)。`queue` 命令設(shè)置了當(dāng)每個(gè)后端服務(wù)器都達(dá)到最大連接數(shù)后的隊(duì)列大小,`timeout` 參數(shù)指定了請(qǐng)求在隊(duì)列中的保留時(shí)間。

9. 處理特定類型的攻擊

有一種攻擊是發(fā)送包含特別大的值的請(qǐng)求頭,引起服務(wù)器端緩沖區(qū)溢出。Nginx、Nginx Plus 針對(duì)這種攻擊類型的防御,可以參考

[Using NGINX and NGINX Plus to Protect Against CVE-2015-1635]
http://nginx.com/blog/nginx-protect-cve-2015-1635/?_ga=1.14368116.2137319792.1439284699)

10. 優(yōu)化Nginx性能

DDOS 攻擊通常會(huì)帶來高的負(fù)載壓力,可以通過一些調(diào)優(yōu)參數(shù),提高 Nginx、Nginx Plus 處理性能,硬抗 DDOS 攻擊,詳細(xì)參考:

[Tuning NGINX for Performance]
http://nginx.com/blog/tuning-nginx/?_ga=1.48422373.2137319792.1439284699

三、識(shí)別DDOS攻擊

到目前為止,我們都是集中在如何是用 Nginx、Nginx Plus 來減輕 DDOS 攻擊帶來的影響。如何才能讓 Nginx、Nginx Plus 幫助我們識(shí)別 DDOS 攻擊呢?`Nginx Plus Status module` 提供了到后端服務(wù)器流量的詳細(xì)統(tǒng)計(jì),可以用來識(shí)別異常的流量。Nginx Plus 提供一個(gè)當(dāng)前服務(wù)狀態(tài)的儀表盤頁面,同時(shí)也可以在自定義系統(tǒng)或其他第三方系統(tǒng)中通過 API 的方式獲取這些統(tǒng)計(jì)信息,并根據(jù)歷史趨勢(shì)分析識(shí)別非正常的流量進(jìn)而發(fā)出告警。

四、總結(jié)

Nginx 和 Nginx Plus 可以作為抵御 DDOS 攻擊的一個(gè)有力手段,而且 Nginx Plus 中提供了一些附加的特性來更好的抵御 DDOS 攻擊并且當(dāng)攻擊發(fā)生時(shí)及時(shí)的識(shí)別到。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Nginx基本命令&不停機(jī)版本升級(jí)

    Nginx基本命令&不停機(jī)版本升級(jí)

    這篇文章主要為大家介紹了Nginx基本命令&不停機(jī)版本升級(jí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 服務(wù)器的負(fù)載均衡nginx+tomcat實(shí)現(xiàn)動(dòng)靜分離

    服務(wù)器的負(fù)載均衡nginx+tomcat實(shí)現(xiàn)動(dòng)靜分離

    這篇文章主要為大家介紹了服務(wù)器的負(fù)載均衡nginx+tomcat實(shí)現(xiàn)動(dòng)靜分離的案例實(shí)施步驟以及環(huán)境詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • Nginx根據(jù)不同瀏覽器語言配置頁面跳轉(zhuǎn)的方法

    Nginx根據(jù)不同瀏覽器語言配置頁面跳轉(zhuǎn)的方法

    這篇文章主要介紹了Nginx根據(jù)不同瀏覽器語言配置頁面跳轉(zhuǎn)的方法,包括一個(gè)簡(jiǎn)體繁體的基本判斷方法及實(shí)際根據(jù)中英文跳轉(zhuǎn)的例子,需要的朋友可以參考下
    2016-04-04
  • nginx使用nginx-rtmp-module模塊實(shí)現(xiàn)直播間功能

    nginx使用nginx-rtmp-module模塊實(shí)現(xiàn)直播間功能

    做的過程出現(xiàn)很多問題,環(huán)境其實(shí)就需要nginx就可以,然后就是在播放的問題,m3u8的格式,mac直接訪問就支持,蘋果系統(tǒng)原生H5支持m3u8,還有就是手機(jī)直接訪問也支持!但是其他其他系統(tǒng)PC端不支持,嘗試了好多都不行,最后終于找到了一個(gè)支持m3u8格式H5播放
    2017-10-10
  • Nginx實(shí)現(xiàn)負(fù)載均衡的方法總結(jié)

    Nginx實(shí)現(xiàn)負(fù)載均衡的方法總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于Nginx實(shí)現(xiàn)負(fù)載均衡的一些方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Nginx訪問php文件直接下載的解決方法

    Nginx訪問php文件直接下載的解決方法

    本文主要給大家介紹了如何解決Nginx訪問php文件直接下載,這種情況通常是因?yàn)閚ginx沒有將PHP文件交給PHP解釋器處理,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Nginx解決vue項(xiàng)目服務(wù)器部署及跨域訪問后端詳解

    Nginx解決vue項(xiàng)目服務(wù)器部署及跨域訪問后端詳解

    跨域問題在前后端分離項(xiàng)目很常見,至于為什么會(huì)跨域,同源策略,百度各種博客都很詳細(xì),這里不再介紹,這篇文章主要給大家介紹了關(guān)于Nginx解決vue項(xiàng)目服務(wù)器部署及跨域訪問后端的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • nginx實(shí)現(xiàn)一個(gè)域名配置多個(gè)laravel項(xiàng)目的方法示例

    nginx實(shí)現(xiàn)一個(gè)域名配置多個(gè)laravel項(xiàng)目的方法示例

    這篇文章主要介紹了nginx實(shí)現(xiàn)一個(gè)域名配置多個(gè)laravel項(xiàng)目的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • nginx日志配置指令詳解

    nginx日志配置指令詳解

    這篇文章主要介紹了nginx日志配置指令詳解,nginx有一個(gè)非常靈活的日志記錄模式,每個(gè)級(jí)別的配置可以有各自獨(dú)立的訪問日志,需要的朋友可以參考下
    2014-07-07
  • nginx出現(xiàn)500 Internal Server Error錯(cuò)誤的解決方法

    nginx出現(xiàn)500 Internal Server Error錯(cuò)誤的解決方法

    這篇文章主要介紹了nginx出現(xiàn)500 Internal Server Error錯(cuò)誤的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09

最新評(píng)論