用Openresty擋住它!基于Nginx和Lua的結(jié)合防CC---UP楠哥

#實戰(zhàn)描述:
CC攻擊的原理就是攻擊者控制某些主機不停地發(fā)大量數(shù)據(jù)包給對方服務(wù)器造成服務(wù)器資源耗盡,一直到宕機崩潰。CC主要是用來攻擊頁面的,每個人都有這樣的體驗:當(dāng)一個網(wǎng)頁訪問的人數(shù)特別多的時候,打開網(wǎng)頁就慢了,CC就是模擬多個用戶(多少線程就是多少用戶)不停地進行訪問那些需要大量數(shù)據(jù)操作(就是需要大量CPU時間)的頁面,造成服務(wù)器資源的浪費,CPU長時間處于100%,永遠都有處理不完的連接直至就網(wǎng)絡(luò)擁塞,正常的訪問被中止。

OpenResty又被稱為ngx_openresty,是基于Nginx的核心Web應(yīng)用程序服務(wù)器。OpenResty是基于Nginx和Lua的高性能Web平臺,OpenResty通過匯聚各種設(shè)計精良的Nginx模塊,從而將Nginx有效地變成一個強大的通用Web應(yīng)用平臺。
OpenResty同樣也支持開源的waf組件,通過Nginx和Lua的結(jié)合,可以簡化攻擊的配置,OpenResty抵御CC攻擊。
接下來,我們看下如何具體實現(xiàn)。
#實戰(zhàn)環(huán)境:
準(zhǔn)備一臺Linux系統(tǒng)(給她起個hostname名稱叫webserver.upwen.com),作為發(fā)布web頁面以及OpenResty和Waf組件部署。
#具體實現(xiàn):
##所需軟件包下載
OpenResty下載地址:https://openresty.org/en/
我們選擇openresty-1.15.8.3.tar.gz版本
?
開源waf組件下載地址:https://github.com/unixhot/waf/releases
得到的waf版本是waf-1.0.0.zip的zip壓縮包
##安裝編譯過程中需要用到的軟件包
我們在webserver.upwen.com主機上采用編譯安裝的方式安裝OpenResty,安裝時要比Nginx多一個readline-devel軟件包。

下載軟件包到本地:

##配置并編譯安裝OpenResty

##環(huán)境變量設(shè)置

環(huán)境變量配置好后,測試啟動和關(guān)閉Nginx;此時查看Nginx版本會發(fā)現(xiàn),Nginx路徑是存在于OpenResty安裝目錄中。


當(dāng)然,我們也可以基于systemd,在/usr/lib/systemd/system/nginx.service配置好,通過systemctl來管理OpenResty的服務(wù)啟動。
?
##測試Openresty
通過配置/usr/local/openresty/nginx/conf/nginx.conf,在server標(biāo)簽段內(nèi)添加如下配置。

保存退出后,檢查Nginx語法是否有錯誤,若沒有錯誤,刷新Nginx主配置文件的配置。

打開瀏覽器訪問http://OpenResty所在IP/upwen可以看到發(fā)布結(jié)果。

##開源waf部署?
將開源waf組件軟件包解壓縮,移動到/usr/local/openresty/nginx/conf/目錄下。

##開源waf策略配置文件說明
在waf目錄下有一個rule-config目錄,該目錄存放waf的一些策略配置文件。每一個策略文件作用如下:

##實現(xiàn)Openresty防止CC攻擊
通過配置/usr/local/openresty/nginx/conf/nginx.conf,在http標(biāo)簽段中加入:

同樣的,保存退出后,檢查Nginx語法是否有錯誤,若沒有錯誤,刷新Nginx主配置文件的配置。

#測試結(jié)果:
首先,打開瀏覽器執(zhí)行如下內(nèi)容:
http://OpenResty所在IP/upwen/test.jsp?id=1 and (select top 1 m from users where d=1 and m not in(select top 0 m from users))>0
此內(nèi)容是構(gòu)造一小段Sql語句,希望通過報錯得到深度d=1的相關(guān)信息。執(zhí)行結(jié)果如下:

此時觸發(fā)了異常URL測試策略,Openresty抵擋了這次請求。
另外,我們找來一臺Linux系統(tǒng)作為客戶端,通過執(zhí)行curl 10.60.100.108 -A ‘hydra’其用意是通過curl方式訪問,模擬user-agent為hydra(九頭蛇,一種密碼猜解工具),因觸發(fā)異常User-Agent策略,也被Openresty攔了下來。

另以上兩種測試,在Openresty的日志中都會有記錄

#知識點:
Yum倉庫安裝軟件;
編譯安裝部署軟件;
Openresty中的Nginx主配置文件的使用;
開源waf組件的部署和使用;
Sql語句注入的構(gòu)造;
Curl命令構(gòu)造user-agent;
通過查看安全日志進行溯源的方法,達到應(yīng)急。