什么是DDoS攻擊
DDoS攻擊是Distributed Denial of Service的縮寫,翻譯成中文就是分布式拒絕服務。即不法黑客組織通過控制服務器等資源,發動對包括國家骨干網絡、重要網絡設施、政企或個人網站在內的互聯網上任一目標的攻擊,致使目標服務器斷網,最終停止提供服務。
舉個栗子,我開了一家店生意很好,隔壁鄰居看不下去了叫他的七大姑八大姨每天都到我的店里來占着位置卻不買東西,這樣我的生意自然就不行了。也就是攻擊者利用“肉雞”對目標網站在較短的時間內發起大量請求,大規模消耗目標網站的主機資源,讓它無法正常服務。在線游戲、互聯網金融等領域是 DDoS 攻擊的高發行業。
如何應對DDoS攻擊
防止DDoS攻擊有很多種方法,比如使用高防服務器、CDN加速、DDoS清洗等。但是由於經費的限制,我們整不起那些個高大上的玩意,所以只能在我們現有的材料上加工加工來達到應對DDoS攻擊的目的。
nginx防止DDoS攻擊
限制每秒的請求數
ngx_http_limit_req_module模塊通過漏桶原理來限制單位時間內的請求數,一旦單位時間內請求數超過限制就會返回503錯誤。
在nginx.conf中新增如下配置:
http { limit_req_zone $binary_remote_addr zone=one:10m rate=100r/s; //觸發條件,所有訪問ip 限制每秒100個請求 ... server { ... location ~ \.php$ { limit_req zone=one burst=5 nodelay; //執行的動作,通過zone名字對應 } } }
以上配置用到的一些參數:
參數 含義
$binary_remote_addr 二進制遠程地址
zone=one:10m 定義zone名字叫one,並為這個zone分配10M內存,用來存儲會話(二進制遠程地址),1m內存可以保存16000會話
rate=100r/s 限制頻率為每秒100個請求
burst=5 允許超過頻率限制的請求數不多於5個,假設1、2、3、4秒請求為每秒9個,那么第5秒內請求15個是允許的,反之,如果第一秒內請求15個,會將5個請求放到第二秒,第二秒內超過10的請求直接503,類似多秒內平均速率限制。
nodelay 超過的請求不被延遲處理,設置后15個請求在1秒內處理
由於使用的是漏桶原理,所以其實這個配置不止能用來防止DDoS攻擊,還能用作服務器的限流。
限制單個IP的連接數
ngx_http_limit_conn_module模塊可以用來限制單個IP的連接數,配置如下:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m; //觸發條件
...
server {
...
location /download/ {
limit_conn addr 2; // 限制同一時間內2個連接,超出的連接返回503
}
}
}
通過簡單的配置使我們的服務能夠過濾掉一些DDoS攻擊,但是在專業的黑客面前這些確實都只能算是小菜,想要真正提高服務器的抗壓能力,還是得使用專業的工具。