> Nginx服務器防CC攻擊設置_建站指南_懷柔網站建設|懷柔網站制作|懷柔網站設計|懷柔網頁設計公司_北京懷柔巨優網絡網站建設
互聯網應用服務提供商!    全國售前咨詢:010-69632027/13241022177懷柔巨優網絡

建站指南

公司新聞

公司公告

行業新聞

客戶動態

建站指南

懷柔做網站

常用資料

網絡營銷

網站優化

售前咨詢
致電 010-69632027

售后服務
郵箱:[email protected]

在線咨詢
懷柔巨優網絡

公司地址
懷柔富樂北里113號

時間:2016-06-16 16:11來源:懷柔網站建設作者:懷柔網頁設計懷柔網站優化

Nginx雖然可以比Apache處理更大的連接數,但是HTTP GET FLOOD針對的不僅僅是WEB服務器,還有數據庫服務器。大量HTTP請求產生了大量的數據庫查詢,可以在幾秒之內使數據庫停止響應,系統負載升高,最終導致服務器當機。

1.主動抑制
為了讓Nginx支持更多的并發連接數,根據實際情況對工作線程數和每個工作線程支持的最大連接數進行調整。例如設置“worker_processes 10”和“worker_connections 1024”,那這臺服務器支持的最大連接數就是10×1024=10240。

worker_processes 10;
events {
    use epoll;
    worker_connections 10240;
}


Nginx 0.7開始提供了2個限制用戶連接的模塊:NginxHttpLimitZoneModule和NginxHttpLimitReqModule。
NginxHttpLimitZoneModule可以根據條件進行并發連接數控制。
例如可以定義以下代碼:

http {
    limit_zone   my_zone  $binary_remote_addr  10m;
    server {
        location /somedir/ {
            limit_conn   my_zone  1;
        }
    }
}


其中“limit_zone my_zone $binary_remote_addr 10m”的意思是定義一個名稱為my_zone的存儲區域、my_zone中的內容為遠程IP地址、my_zone的大小為10M;“location /somedir/”的意思是針對somedir目錄應用規則;“limit_conn my_zone 1”的意思是針對上面定義的my_zone記錄區記錄的IP地址在指定的目錄中只能建立一個連接。
NginxHttpLimitReqModule可以根據條件進行請求頻率的控制。
例如可以定義以下代碼:

http {
    limit_req_zone  $binary_remote_addr  zone=my_req_zone:10m   rate=1r/s;
    ...
    server {
        ...
        location /somedir/ {
            limit_req_zone   zone= my_req_zone  burst=2;
        }
    }
}       


其中“limit_req_zone $binary_remote_addr zone=my_req_zone:10m rate=1r/s”的意思是定義一個名稱為my_req_zone的存儲區域,my_req_zone內容為遠程IP地址,my_req_zone大小為10M,my_req_zone中的平均請求速率只能為1個每秒;“location /somedir/”的意思是針對somedir目錄應用規則;“limit_req_zone zone= my_req_zone burst=2”的意思是針對上面定義的my_req_zone記錄區記錄的IP地址在請求指定的目錄中的內容時最高2個每秒的突發請求速率。
當有連接觸發上訴規則時,Nginx會報“503 Service Temporarily Unavailable”的錯誤,停止用戶請求。返回一個503,對服務器來說影響不大,只占用一個nginx的線程而已,相對來說還是很劃算的。
為了測試效果,我將以上代碼放入Nginx的配置文件,并編寫了一個php文件顯示phpinfo;另外還寫了一個html文件,其中嵌入了多個 iframe調用php文件。當我打開這個html文件了,可以看到只有一個iframe中的php文件正常顯示了,其他的iframe都顯示503錯 誤。
 

2.被動防御
雖然主動防御已經抵擋了大多數HTTP GET FLOOD攻擊,但是道高一尺魔高一丈,攻擊者會總會找到你薄弱的環節進行攻擊。所以我們在這里也要介紹一下被動防御的一些方法。

1)封IP地址
訪問者通過瀏覽器正常訪問網站,與服務器建立的連接一般不會超過20個,我們可以通過腳本禁止連接數過大的IP訪問。
以下腳本通過netstat命令列舉所有連接,將連接數最高的一個IP如果連接數超過150,則通過 iptables阻止訪問:

#!/bin/sh
status=`netstat -na|awk '$5 ~ /[0-9]+:[0-9]+/ {print $5}' |awk -F ":" -- '{print $1}' |sort -n|uniq -c |sort -n|tail -n 1`
NUM=`echo $status|awk '{print $1}'`
IP=`echo $status|awk '{print $2}'`
result=`echo "$NUM > 150" | bc`
if [ $result = 1 ]
then
echo IP:$IP is over $NUM, BAN IT!
/sbin/iptables -I INPUT -s $IP -j DROP
fi


運行crontab -e,將上述腳本添加到crontab每分鐘自動運行:
通過apache自帶的ab工具進行服務器壓力測試:
ab -n 1000 -c 100 http://www.xxx.com/bbs/index.php
測試完成后,我們就可以看到系統中有IP被封的提示:

[[email protected] ~]#tail /var/spool/mail/root
Content-Type: text/plain; charset=ANSI_X3.4-1968
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <;PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
IP:58.246.xx.xx is over 1047, BAN IT!


至此,又一次HTTP GET FLOOD防御成功。

2)根據特征碼屏蔽請求(對CC攻擊效果較好)
一般同一種CC攻擊工具發起的攻擊請求包總是相同的,而且和正常請求有所差異。
當服務器遭遇CC攻擊時,我們可以快速查看日志,分析其請求的特征,比如User-agent。下面的是某一次CC攻擊時的User-agent
Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE 3.01)Cache-Control: no-store, must-revalidate
幾乎沒有正常的瀏覽器會在User-agent中帶上“must-revalidate”這樣的關鍵字。所以我們可以以這個為特征進行過濾,將User-agent中帶有“must-revalidate”的請求全部拒絕訪問:

if ($http_user_agent ~ must-revalidate) {
return 403;
}

巨優網絡微信,巨優網絡微博

北京巨優網絡是一家從事懷柔網站建設、懷柔網站制作、懷柔網站優化公司,推動懷柔網站建設,懷柔SEO優化服務,服務范圍涉及懷柔網站建設,懷柔網站制作,懷柔網站優化,懷柔網站推廣,懷柔網站維護,網站托管,網站空間,網站域名等內容,為客戶提供完善的網站建設解決方案,懷柔做網站,選北京巨優網絡企業建站!咨詢熱線:010-69632027

  懷柔網站建設優秀提供商-APP建站--微信營銷-手機網站

巨優簡介|如何合作|新浪微薄|騰訊微薄|提交網站需求|聯絡方式|有問必答

全國統一咨詢服務

010-69632027  13241022177

祁连山股票今日行情