Nginx解決Http慢攻擊(Slow HTTP Attack)的方法
什么是慢速連接攻擊
緩慢的HTTP拒絕服務(wù)攻擊是一種專門針對(duì)于Web的應(yīng)用層拒絕服務(wù)攻擊,攻擊者操縱網(wǎng)絡(luò)上的肉雞,對(duì)目標(biāo)Web服務(wù)器進(jìn)行海量HTTP請(qǐng)求攻擊,直到服務(wù)器帶寬被打滿,造成了拒絕服務(wù)。(癱瘓目標(biāo)服務(wù)器)
慢速連接攻擊類型
慢速連接攻擊主要有如下幾種:
1.Slow headers攻擊
攻擊者向服務(wù)器發(fā)起HTTP請(qǐng)求,而且不停地發(fā)送HTTP頭部。服務(wù)器為需要接收完所有HTTP頭部,才能處理請(qǐng)求。由于HTTP頭部不停地被攻擊者發(fā)送,服務(wù)器永遠(yuǎn)也無法接收完,服務(wù)器的web容器很快就會(huì)被攻擊者占滿了TCP連接,而不再接收新的請(qǐng)求,最終拒絕服務(wù)。
2.Slow body攻擊
攻擊者向目標(biāo)服務(wù)器發(fā)送POST請(qǐng)求,服務(wù)器以為要接收大量數(shù)據(jù),一直保持連接狀態(tài),但攻擊者卻以10S-100s一個(gè)字節(jié)的速度去發(fā)送數(shù)據(jù),類似的連接被不斷增加后,服務(wù)器資源被大量消耗,最終達(dá)到極限拒絕服務(wù)。
3.Slow read攻擊
攻擊者與服務(wù)器建立連接后,會(huì)發(fā)送完整的請(qǐng)求給服務(wù)器,一直保持連接狀態(tài),然后以極低的速度讀取Response,或者讓服務(wù)器覺得客戶端很忙,消耗服務(wù)器的連接和內(nèi)存資源。
防護(hù)手段
真對(duì)http慢速攻擊的特點(diǎn),防護(hù)時(shí)可對(duì)每秒鐘http并發(fā)連接數(shù)進(jìn)行檢查。
當(dāng)每秒種http并發(fā)連接數(shù)超過設(shè)定值時(shí),會(huì)觸發(fā)http報(bào)文檢查,檢查出一下任意一種情況,都認(rèn)定受到http慢速連接攻擊。
1.連續(xù)多個(gè)httppost報(bào)文的總長(zhǎng)度都很大,但是其http載荷長(zhǎng)度都很小。
2.連續(xù)多個(gè)httpget/post報(bào)文的報(bào)文頭都沒有結(jié)束標(biāo)識(shí)。
將該源ip判定為攻擊源加入黑名單,同時(shí)斷開此ip地址與http服務(wù)器的連接。
對(duì)web服務(wù)器的http頭部傳輸?shù)淖畲笤S可時(shí)間進(jìn)行限制,修改成最大許可時(shí)間為20秒。
統(tǒng)計(jì)每個(gè)TCP連接的時(shí)長(zhǎng)并計(jì)算單位時(shí)間內(nèi)通過的報(bào)文數(shù)量即可做精確識(shí)別。一個(gè)TCP連接中,HTTP報(bào)文太少和報(bào)文太多都是不正常的,過少可能是慢速連接攻擊。
過多可能是使用HTTP 1.1協(xié)議進(jìn)行deHTTP Flood攻擊,在一個(gè)TCP連接中發(fā)送多個(gè)HTTP請(qǐng)求。
周期內(nèi)統(tǒng)計(jì)報(bào)文數(shù)量。一個(gè)TCP連接,HTTP請(qǐng)求的報(bào)文中,報(bào)文過多或者報(bào)文過少都是有問題的,如果一個(gè)周期內(nèi)報(bào)文數(shù)量非常少,那么它就可能是慢速攻擊;如果一個(gè)周期內(nèi)報(bào)文數(shù)量非常多,那么它就可能是一個(gè)CC攻擊。
限制HTTP請(qǐng)求頭的最大許可時(shí)間。超過最大許可時(shí)間,如果數(shù)據(jù)還沒有傳輸完成,那么它就有可能是一個(gè)慢速攻擊。
Nginx
1、通過調(diào)整$request_method,配置服務(wù)器接受http包的操作限制;
2、在保證業(yè)務(wù)不受影響的前提下,調(diào)整client_max_body_size, client_body_buffer_size, client_header_buffer_size,large_client_header_buffersclient_body_timeout, client_header_timeout的值,必要時(shí)可以適當(dāng)?shù)脑黾樱?/p>
3、對(duì)于會(huì)話或者相同的ip地址,可以使用HttpLimitReqModule and HttpLimitZoneModule參數(shù)去限制請(qǐng)求量或者并發(fā)連接數(shù);
4、根據(jù)CPU和負(fù)載的大小,來配置worker_processes 和 worker_connections的值,公式是:max_clients = worker_processes * worker_connections。
具體配置
user deployer; user root; worker_processes 16; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { limit_req_zone $binary_remote_addr zone=req_one:10m rate=10r/s; limit_conn_zone $binary_remote_addr zone=limit_conn:10m; include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; client_max_body_size 2m; client_body_buffer_size 2m; client_header_buffer_size 2k; large_client_header_buffers 2 1k; client_body_timeout 10s; client_header_timeout 5s; #gzip on; server { listen 10056; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { limit_conn limit_conn 10; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://172.17.0.1:10050; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
以上就是Nginx解決Http慢攻擊(Slow HTTP Attack)的方法的詳細(xì)內(nèi)容,更多關(guān)于Nginx解決Http慢攻擊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
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.conf 中 root 目錄設(shè)置問題
這篇文章主要介紹了詳解nginx.conf 中 root 目錄設(shè)置問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Apache select和Nginx epoll模型的用法對(duì)比
這篇文章主要介紹了Apache select和Nginx epoll模型的用法對(duì)比,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-07-07Nginx之upstream被動(dòng)式重試機(jī)制的實(shí)現(xiàn)
本文主要介紹了Nginx之upstream被動(dòng)式重試機(jī)制的實(shí)現(xiàn),可以通過proxy_next_upstream來自定義配置,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03詳解Keepalived+Nginx實(shí)現(xiàn)高可用(HA)
這篇文章主要介紹了詳解Keepalived+Nginx實(shí)現(xiàn)高可用(HA),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06