IIS防御小規(guī)模DDOS攻擊實(shí)例(反向代理)
最近幾天公司官網(wǎng)和業(yè)務(wù)系統(tǒng)的注冊(cè)頁(yè)面頻繁遭遇DDOS攻擊,導(dǎo)致IIS應(yīng)用程序池CPU占用率100%,訪問(wèn)網(wǎng)站出現(xiàn)503錯(cuò)誤。下面總結(jié)一下應(yīng)對(duì)措施。
一、啟用IIS的CPU監(jiān)視功能
對(duì)于低頻率的DDOS可以采取這種方法。w3wp.exe是應(yīng)用程序池的關(guān)聯(lián)進(jìn)程,當(dāng)WEB訪問(wèn)量大時(shí),w3wp.exe會(huì)占用大量的系統(tǒng)資源。在DDOS攻擊下,很明顯的現(xiàn)象就是w3wp.exe占用CPU達(dá)到100%,網(wǎng)站拒絕訪問(wèn),這個(gè)時(shí)候遠(yuǎn)程登錄服務(wù)器都很困難。針對(duì)這種情況,做如下優(yōu)化:
1、為IIS中的每個(gè)網(wǎng)站設(shè)置單獨(dú)的應(yīng)用程序池。
2、為每個(gè)應(yīng)用程序池設(shè)置CPU監(jiān)視功能:當(dāng)w3wp.exe的CPU超過(guò)50%或更高時(shí),自動(dòng)殺死w3wp.exe進(jìn)程,監(jiān)視頻率為1分鐘。只要有訪問(wèn)請(qǐng)求進(jìn)來(lái),w3wp.exe便會(huì)重新啟動(dòng),不影響用戶訪問(wèn)。
二、流量清洗
當(dāng)黑客發(fā)現(xiàn)低層次的DDOS已經(jīng)不起作用時(shí),便會(huì)加大攻擊力度。一開(kāi)始我們官網(wǎng)的平均并發(fā)數(shù)只有幾千,后來(lái)加大到了平均1萬(wàn)6千個(gè)并發(fā),最高7萬(wàn)個(gè)并發(fā),這樣上面的CPU監(jiān)視功能就沒(méi)有效果了,因?yàn)閣3wp.exe重啟后,會(huì)在極短時(shí)間內(nèi)CPU重新達(dá)到100%。
當(dāng)時(shí)監(jiān)控到的并發(fā)連接數(shù):
CPU使用率和流量(帶寬上限10M):
幸運(yùn)的是官網(wǎng)域名剛好在阿里云上做好了備案,我們遷移到阿里云上后,利用云盾的DDOS防護(hù)功能便會(huì)清洗掉大部分異常流量,CPU立馬正常,官網(wǎng)滿血復(fù)活了。
這里貼一下云服務(wù)器的參數(shù):
配置: CPU2核、內(nèi)存4GB 鏡像: Windows Server 2008 R2 標(biāo)準(zhǔn)版 SP1 64位中文版 存儲(chǔ): 1塊普通云盤(100GB) 網(wǎng)絡(luò): 帶寬10Mbps(經(jīng)典網(wǎng)絡(luò))
參數(shù)配置不高,但是能抵御高強(qiáng)度的DDOS攻擊,這得益于阿里強(qiáng)大的技術(shù)實(shí)力,偷偷做個(gè)廣告,嘿嘿。
三、Nginx反向代理
但是黑客還經(jīng)常攻擊我們業(yè)務(wù)系統(tǒng)的注冊(cè)頁(yè)面,這次就沒(méi)有這么幸運(yùn)了,因?yàn)闃I(yè)務(wù)系統(tǒng)是在我們實(shí)體機(jī)房,這就要靠我們自己了。
所以我們采取了前端Nginx反向代理、后端雙IIS做負(fù)載均衡,利用Nginx強(qiáng)大的性能和HttpLimitReqModul模塊限制某時(shí)間段內(nèi)同一ip訪問(wèn)次數(shù)。Nginx的優(yōu)化這里不提,下面只貼出相關(guān)配置:
首先在nginx.conf的http配置段里增加如下內(nèi)容:
map $http_x_forwarded_for $clientRealIp { "" $remote_addr; ~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr; } # 訪問(wèn)受限制后返回599 limit_req_status 599; # 定義一個(gè)名為allips的limit_req_zone用來(lái)存儲(chǔ)session,大小是100M內(nèi)存, # 以$clientRealIp 為key,限制平均每秒的請(qǐng)求為100個(gè), limit_req_zone $clientRealIp zone=allips:100m rate=100r/s;
這里限制了同一IP每秒的請(qǐng)求數(shù)不超過(guò)100個(gè),否則多余的請(qǐng)求會(huì)直接返回599錯(cuò)誤。限制頻率要根據(jù)實(shí)際情況進(jìn)行配置,配置過(guò)低會(huì)影響正常的訪問(wèn),出現(xiàn)頁(yè)面顯示不全等問(wèn)題。
然后編輯/etc/nginx/conf.d/upstream.conf:
server { listen 1334; server_name _; # 添加如下一行 limit_req zone=allips burst=5 nodelay; location / { # 反向代理 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://wskh_IIS; } # 開(kāi)啟stub_status模塊監(jiān)控 location /nginx_status{ stub_status on; access_log off; allow 127.0.0.1; # 允許內(nèi)網(wǎng)某IP查看nginx status allow 192.168.1.100; deny all; } } # 后端web服務(wù)器 upstream wskh_IIS { server 192.168.1.39:1334; server 192.168.1.40:1334; ip_hash; }
好了,簡(jiǎn)單配置完成。
下面貼一個(gè)統(tǒng)計(jì)Nginx訪問(wèn)日志access.log里IP請(qǐng)求頻率的小腳本:
#!/bin/bash # # Filename: count_req.sh # Revision: 1.0 # Author: Qicheng # Website: http://qicheng0211.blog.51cto.com # Description: 統(tǒng)計(jì)Nginx日志里IP訪問(wèn)頻率 NGINXLOG="./access.log" start_time=$(head -n1 "$NGINXLOG" | grep -o " \[.*\] ") stop_time=$(tail -n1 "$NGINXLOG" | grep -o " \[.*\] ") echo -e "start:\t\e[92m$start_time\033[0m" echo -e "stop:\t\e[92m$stop_time\033[0m" echo '所有的請(qǐng)求TOP50-->>' # 所有的請(qǐng)求 cat "$NGINXLOG" | awk '{++S[$1]} END {for(a in S) print S[a],"\t", a}' | sort -rn -k1 | head -n 50 echo '--------------------------------------------------' echo '成功的請(qǐng)求TOP50-->>' # 成功的請(qǐng)求 grep ' 200 ' "$NGINXLOG" | awk '{++S[$1]} END {for(a in S) print S[a],"\t", a}' | sort -rn -k1 | head -n 50
把腳本放到和access.log同一目錄下執(zhí)行即可。部分輸出如下:
過(guò)濾出這些攻擊源IP后,加到iptables里:
iptables -I INPUT -s {ip} -j DROP;
本文出自 “啟程的Linux博客” 博客,謝絕轉(zhuǎn)載!
相關(guān)文章
IIS7.5 檢測(cè)到在集成的托管管道模式下不適用的 ASP.NET設(shè)置
這篇文章主要介紹了IIS7.5 檢測(cè)到在集成的托管管道模式下不適用的 ASP.NET設(shè)置 ,需要的朋友可以參考下2015-01-01IIS常見(jiàn)問(wèn)題與錯(cuò)誤及其解決方案
IIS常見(jiàn)問(wèn)題和錯(cuò)誤及其解決方案,使用iis假設(shè)服務(wù)器的朋友可以參考下。2010-12-12Windows Server 2019 組策略的配置與管理 理論基礎(chǔ)
介紹了組策略的定義,作用和分類。組策略包括計(jì)算機(jī)配置和用戶配置;組策略又分為為基于本地的組策略和基于AD(活動(dòng)目錄)的域組策略。并說(shuō)明了不同組策略發(fā)生沖突時(shí)默認(rèn)的規(guī)則2023-05-05Windows 2003服務(wù)器安全配置終極技巧 圖文教程
網(wǎng)上流傳的很多關(guān)于windows server 2003系統(tǒng)的安全配置,但是仔細(xì)分析下發(fā)現(xiàn)很多都不全面,并且很多仍然配置的不夠合理,并且有很大的安全隱患,今天我決定仔細(xì)做下極端BT的2003服務(wù)器的安全配置,讓更多的網(wǎng)管朋友高枕無(wú)憂。2010-03-03win2003服務(wù)器之用Zend和eAccelerator在IIS6下同時(shí)加速
eAccelerator是一個(gè)自由開(kāi)放源碼php加速器,優(yōu)化和動(dòng)態(tài)內(nèi)容緩存,提高了性能php腳本的緩存性能,使得PHP腳本在編譯的狀態(tài)下,對(duì)服務(wù)器的開(kāi)銷幾乎完全消除。2010-08-08vps報(bào)錯(cuò)Unable to make the session state request
客戶反應(yīng)vps報(bào)錯(cuò)Unable to make the session state request,我司技術(shù)將解決方法總結(jié)如下,希望可以幫助更多的人解決這個(gè)問(wèn)題。2011-12-12Windows Server 2016中安裝PHP Manager、ARR3.0或者URL Rewrite 2.0無(wú)法成
這篇文章主要為大家詳細(xì)介紹了Windows Server 2016中安裝PHP Manager、ARR3.0或者URL Rewrite 2.0無(wú)法成功的解決辦法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05