使用的軟體是Http attack version 3.6 設定如圖

http-attack-setting

nginx.config的設定

nginx 防ddos設定2

修改網站預設的設定檔default如下

nginx 防ddos測試

限制每個ip超過20個連線數,然後顯示503的錯誤畫面 測試壓測的情況查詢大約19xx連線

連線數

測試情況大量連線的ip會出現503的頁面,但另一個ip連線仍然是正常的

test-http

 

主要用到的是Nginx中提供的兩個limit模組:

ngx_http_limit_conn_module  
ngx_http_limit_req_module 

一、白名單

首先這兩個模組是支援白名單的,就是可能有某些IP位址,我們是不需要進行限制的,比如可能會是搜尋引擎啦什麼的或者自己的IP,因此需要設置一個白名單,不需要的可跳過本步。具體方法:

在HTTP段中插入如下格式內容,聲明白名單IP

http{    
.......    
geo $limited{    
   default 1;    
   #公司    
   119.123.5.0/24 0;   
    }    
.........    
}   

geo指令定義了一個白名單$limited變數,預設值為1,如果用戶端IP在上面的範圍內,$limited的值為0。

然後緊跟在上面內容後使用map指令映射搜尋引擎用戶端的ip為空串,如果不是白名單IP就顯示本身真實的IP,這樣搜尋引擎iIP就不能存到limit模組的記憶體session中,所以不會限制白名單的IP訪問。

map $limited $limit {    
         1 $binary_remote_addr;   
         0 "";    
}  

二、訪問頻率限制

訪問頻率限制使用到的是ngx_http_limit_req_module,需要在兩個地方配置,首先在HTTP段中,聲明好這個模組一些參數,如果有設置白名單,設置如下

http{    
...    
limit_req_zone $limit zone=one:10m rate=20r/m; ##平均20r/m 每分鐘20個請求    
...    
}   

如果沒有配置白名單,所有來訪IP都會限制,配置如下

http{    
...    
limit_req_zone $binary_remote_addr zone=one:10m rate=20r/m; ##平均20r/m 每分鐘20個請求  
...   
}   

解釋一下上面的參數,第一個代表的是需要限制的ip群,這個很好理解,第二個zone=one表示這個limit_zone的名字叫做one,後面的使用中可以用這個one來進行指代,後面的15m,代表為這個zone分配10m的記憶體,1m可以保存16000的$binary_remote_addr。最後一個是頻率,如果要按秒來算可以設置20r/s這樣。

最後是配置到Nginx的php的解析段

location ~ \.php$ {    
...    
limit_req zone=one burst=5 nodelay;   
...    
}   

指定了使用名字為one的zone,然後緩衝佇列為5,無延遲,如果不設置無延遲,訪問會卡住。

三、訪問連接限制

訪問連接限制使用到的是ngx_http_limit_conn_module,也是需要在兩個地方配置,首先在HTTP段中,聲明好這個模組一些參數,如果有設置白名單,設置如下

http{   
...    
limit_conn_zone $limit zone=addr:10m;    
...    
}   

如果沒有配置白名單,所有來訪IP都會限制,配置如下

view sourceprint?http{    
...    
limit_conn_zone $binary_remote_addr zone=addr:10m;   
...    
}   

參數的意思跟上面的差不多也就不多解釋了。後面的就是在server段中進行設置了,可以具體到某個目錄什麼的了

server {    
location /download/ {   
limit_conn addr 5;    
} 

大功告成,打完收工,記得要nginx -s reload一下

原文:http://netsecurity.51cto.com/art/201306/400210.htm

By tony

自由軟體愛好者~喜歡不斷的思考各種問題,有新的事物都會想去學習嘗試 做實驗並熱衷研究 沒有所謂頂天的技術 只有謙虛及不斷的學習 精進專業,本站主要以分享系統及網路相關知識、資源而建立。 Github http://stnet253.github.io

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料