使用Nginx+Lua實現waf

使用Nginx+Lua實現waf

軟件包需求:php

1 、Nginx兼容性【最後測試到1.13.6】html

wget http://nginx.org/download/nginx-1.13.6.tar.gz

2 、PCRE爲Nginx編譯安裝關係的依賴java

wget https://jaist.dl.sourceforge.net/project/pcre/pcre/8.42/pcre-8.42.tar.gz

3 、下載luajit解釋器和ngx_devel_kit以及lua-nginx-module模塊nginx

wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gz

4 、文件解壓:git

tar xf nginx-1.13.6.tar.gz pcre-8.42.tar.gz LuaJIT-2.0.5.tar.gz v0.3.0.tar.gz v0.10.13.tar.gz

5 、安裝LuaJIT Luajit是Lua即時編譯器程序員

cd LuaJIT-2.0.5/make && make install

6 、添加環境變量github

export LUAJIT_LIB=/usr/local/lib export LUAJIT_INC=/usr/local/include/luajit-2.0

7 、安裝Nginx並加載模塊【注意目錄位置以及版本】web

  • --prefix=/usr/local/nginx-1.13.6 # nginx 安裝目錄
  • --with-pcre=/usr/local/src/pcre-8.42 # pcre 所在目錄
  • --add-module=../ngx_devel_kit-0.3.0/ # ngx_devel_kit 所在目錄
  • --add-module=../lua-nginx-module-0.10.13/ # lua-nginx-module 所在目錄
  • -j2 調用編譯CPU的核數
cd nginx-1.13.6/./configure --user=www --group=www --prefix=/usr/local/nginx-1.13.6 --with-pcre=/usr/local/src/pcre-8.42 --with-http_stub_status_module --with-http_sub_module --with-http_gzip_static_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module  --add-module=../ngx_devel_kit-0.3.0/ --add-module=../lua-nginx-module-0.10.13/make -j2 && make install

8 、添加連接文件sql

ln -s /usr/local/nginx-1.13.6 /usr/local/nginx ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2 #必定建立此軟鏈接,不然報錯

應用配置

1 )調用lua測試,編輯Nginx.conf 添加/helloshell

vim /usr/local/nginx/conf/nginx.conf location /hello { default_type 'text/plain'; content_by_lua 'ngx.say("hello,lua")'; }

2 )語法檢查並啓動

/usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx curl 192.168.55.110/hello hello,lua 正常

WAF部署

1 )下載waf源碼:

cd /usr/local/nginx/conf/ git clone https://github.com/loveshell/ngx_lua_waf.git
mv ngx_lua_waf/ waf

2 )文件註釋

config.lua # 配置文件 init.lua # 規則函數 waf.lua # 邏輯關係 # wafconf # 正則匹配關係目錄 wafconf/args # 裏面的規則get參數進行過濾的 wafconf/url # 是隻在get請求url過濾的規則 wafconf/post # 是隻在post請求過濾的規則 wafconf/whitelist # 是白名單,裏面的url匹配到不作過濾 wafconf/user-agent     # 是對user-agent的過濾規則

3 )config.lua 註釋:

RulePath = "/usr/local/nginx/conf/waf/wafconf/"
--規則存放目錄 attacklog = "off"
--是否開啓攻擊信息記錄,須要配置logdir logdir = "/usr/local/nginx/logs/hack/"
--log存儲目錄,該目錄須要用戶本身新建,切須要nginx用戶的可寫權限 UrlDeny="on"
--是否攔截url訪問 Redirect="on"
--是否攔截後重定向 CookieMatch = "on"
--是否攔截cookie攻擊 postMatch = "on" 
--是否攔截post攻擊 whiteModule = "on" 
--是否開啓URL白名單 black_fileExt={"php","jsp"} --填寫不容許上傳文件後綴類型 ipWhitelist={"127.0.0.1"} --ip白名單,多個ip用逗號分隔 ipBlocklist={"1.0.0.1"} --ip黑名單,多個ip用逗號分隔 CCDeny="on"
--是否開啓攔截cc攻擊(須要nginx.conf的http段增長lua_shared_dict limit 10m;) CCrate = "100/60"
--設置cc攻擊頻率,單位爲秒. --默認1分鐘同一個IP只能請求同一個地址100次 html=[[Please go away~~]] --警告內容,可在中括號內自定義 備註:不要亂動雙引號,區分大小寫

4 )修改Nginx配置文件引用WAF功能【http段加入】

 lua_shared_dict limit 50m; lua_package_path "/usr/local/nginx/conf/waf/?.lua"; init_by_lua_file "/usr/local/nginx/conf/waf/init.lua"; access_by_lua_file "/usr/local/nginx/conf/waf/waf.lua";

5 )詳情:

cat nginx.conf  http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; lua_shared_dict limit 50m; lua_package_path "/usr/local/nginx/conf/waf/?.lua"; init_by_lua_file "/usr/local/nginx/conf/waf/init.lua"; access_by_lua_file "/usr/local/nginx/conf/waf/waf.lua"; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } location /hello { default_type 'text/plain'; content_by_lua 'ngx.say("hello,lua")'; } error_page 500 502 503 504  /50x.html; location = /50x.html { root html; } } }

6 )建立日誌目錄給予www用戶權限:

mkdir /usr/local/nginx/logs/hack/ chown www.www /usr/local/nginx/logs/hack/

7 )啓動Nginx 並測試:

/usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload

8 )測試是否阻止請求:

http://192.168.55.110/hello?id=../etc/passwd

9 )經過ab模仿cc攻擊:

[root@nq waf]# ab -c 100 -n 1200 http://192.168.55.110/hello

其餘

一個頁面版WAF--VeryNginx: https://github.com/alexazhou/VeryNginx

知識點:

#啓動服務 /opt/verynginx/openresty/nginx/sbin/nginx #中止服務 /opt/verynginx/openresty/nginx/sbin/nginx -s stop #重啓服務 /opt/verynginx/openresty/nginx/sbin/nginx -s reload web密碼配置: /opt/verynginx/verynginx/lua_script/VeryNginxConfig.lua Nginx 配置文件nginx.conf /opt/verynginx/openresty/nginx/conf/nginx.conf 規則配置: /opt/verynginx/verynginx/configs/config.json

#################################################################################################

 

1、瞭解WAF

1.1 什麼是WAF

Web應用防禦系統(也稱:網站應用級入侵防護系統 。英文:Web Application Firewall,簡稱: WAF)。利用國際上公認的一種說法:Web應用 防火牆 是經過執行一系列針對HTTP/HTTPS的 安全策略 來專門爲Web應用提供保護的一款產品。

1.2 WAF的功能

  • 支持IP白名單和黑名單功能,直接將黑名單的IP訪問拒絕。
  • 支持URL白名單,將不須要過濾的URL進行定義。
  • 支持User-Agent的過濾,匹配自定義規則中的條目,而後進行處理(返回403)。
  • 支持CC攻擊防禦,單個URL指定時間的訪問次數,超過設定值,直接返回403。
  • 支持Cookie過濾,匹配自定義規則中的條目,而後進行處理(返回403)。
  • 支持URL過濾,匹配自定義規則中的條目,若是用戶請求的URL包含這些,返回403。
  • 支持URL參數過濾,原理同上。
  • 支持日誌記錄,將全部拒絕的操做,記錄到日誌中去

1.3 WAF的特色

    • 異常檢測協議
      Web應用防火牆會對HTTP的請求進行異常檢測,拒毫不符合HTTP標準的請求。而且,它也能夠只容許HTTP協議的部分選項經過,從而減小攻擊的影響範圍。甚至,一些Web應用防火牆還能夠嚴格限定HTTP協議中那些過於鬆散或未被徹底制定的選項。
<img src="http://cdn.oldboyedu.com/wp-content/uploads/2016/02/wpid-c4bb49501a5952282fddb53494b513de_67P_257WGB1_609_7DQ_SN_5BG239_O.png" alt="" title=""></li>
  • 加強的輸入驗證
    加強輸入驗證,能夠有效防止網頁篡改、信息泄露、木馬植入等惡意網絡入侵行爲。從而減少Web服務器被攻擊的可能性。
  • 及時補丁
    修補Web安全漏洞,是Web應用開發者最頭痛的問題,沒人會知道下一秒有什麼樣的漏洞出現,會爲Web應用帶來什麼樣的危害。WAF能夠爲咱們作這項工做了——只要有全面的漏洞信息WAF能在不到一個小時的時間內屏蔽掉這個漏洞。固然,這種屏蔽掉漏洞的方式不是很是完美的,而且沒有安裝對應的補丁自己就是一種安全威脅,但咱們在沒有選擇的狀況下,任何保護措施都比沒有保護措施更好。
  • 基於規則的保護和基於異常的保護
    基於規則的保護能夠提供各類Web應用的安全規則,WAF生產商會維護這個規則庫,並時時爲其更新。用戶能夠按照這些規則對應用進行全方面檢測。還有的產品能夠基於合法應用數據創建模型,並以此爲依據判斷應用數據的異常。但這須要對用戶企業的應用具備十分透徹的瞭解纔可能作到,可現實中這是十分困難的一件事情。
  • 狀態管理
    WAF可以判斷用戶是不是第一次訪問而且將請求重定向到默認登陸頁面而且記錄事件。經過檢測用戶的整個操做行爲咱們能夠更容易識別攻擊。狀態管理模式還能檢測出異常事件(好比登錄失敗),而且在達到極限值時進行處理。這對暴力攻擊的識別和響應是十分有利的。
  • 其餘防禦技術
    WAF還有一些安全加強的功能,能夠用來解決WEB程序員過度信任輸入數據帶來的問題。好比:隱藏表單域保護、抗入侵規避技術、響應監視和信息泄露保護。

1.3WAF與網絡防火牆的區別

  網絡防火牆做爲訪問控制設備,主要工做在OSI模型3、四層,基於IP報文進行檢測。只是對端口作限制,對TCP協議作封堵。其產品設計無需理解HTTP會話,也就決定了沒法理解Web應用程序語言如HTML、SQL語言。所以,它不可能對HTTP通信進行輸入驗證或攻擊規則分析。針對Web網站的惡意攻擊絕大部分都將封裝爲HTTP請求,從80或443端口順利經過防火牆檢測。
  一些定位比較綜合、提供豐富功能的防火牆,也具有必定程度的應用層防護能力,如能根據TCP會話異常性及攻擊特徵阻止網絡層的攻擊,經過IP分拆和組合也能判斷是否有攻擊隱藏在多個數據包中,但從根本上說他仍然沒法理解HTTP會話,難以應對如SQL注入、跨站腳本、cookie竊取、網頁篡改等應用層攻擊。
  web應用防火牆能在應用層理解分析HTTP會話,所以能有效的防止各種應用層攻擊,同時他向下兼容,具有網絡防火牆的功能。

2、使用nginx配置簡單實現403和404

2.1 小試身手之rerurn 403

修改nginx配置文件在server中加入如下內容

set $block_user_agent 0; if( $http_user_agent ~"Wget|AgentBench"){ set $block_user_agent 1; } if($block_user_agent =1){ return403; }

經過其餘機器去wget,結果以下

<img src="http://cdn.oldboyedu.com/wp-content/uploads/2016/02/wpid-c4bb49501a5952282fddb53494b513de_a4708305-a639-41bb-9f74-996c7c88e476.png" alt="" title=""></p>

2.2小試身手之rerurn 404

在nginx配置文件中加入以下內容,讓訪問sql|bak|zip|tgz|tar.gz的請求返回404

location ~*"\.(sql|bak|zip|tgz|tar.gz)$"{ return404 }

在網站根目錄下放一個tar.gz
[root@iZ28t900vpcZ www]# tar zcvf abc.tar.gz wp-content/
經過瀏覽器訪問結果以下,404已生效

<img src="http://cdn.oldboyedu.com/wp-content/uploads/2016/02/wpid-c4bb49501a5952282fddb53494b513de_d266f269-4873-4a07-b6af-57780fa46971.png" alt="" title=""></p>

3、深刻實現WAF

3.1 WAF實現規劃

分析步驟以下:解析HTTP請求==》匹配規則==》防護動做==》記錄日誌
具體實現以下:

    • 解析http請求:協議解析模塊
    • 匹配規則:規則檢測模塊,匹配規則庫
    • 防護動做:return 403 或者跳轉到自定義界面
    • 日誌記錄:記錄到elk中,畫出餅圖,建議使用json格式
<img src="http://cdn.oldboyedu.com/wp-content/uploads/2016/02/wpid-c4bb49501a5952282fddb53494b513de_f1a4a868-b3a7-47fc-8868-dbdbdc2e4be9.jpg" alt="" title=""></li>

3.2安裝nginx+lua

因爲nginx配置文件書寫不方便,而且實現白名單功能很複雜,nginx的白名單也不適用於CC攻擊,因此在這裏使用nginx+lua來實現WAF,若是想使用lua,須在編譯nginx的時候配置上lua,或者結合OpenResty使用,此方法不須要編譯nginx時候指定lua

3.2.1 編譯nginx的時候加載lua

環境準備:Nginx安裝必備的Nginx和PCRE軟件包。

cd /usr/local/src wget http://nginx.org/download/nginx-1.9.4.tar.gz
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz

 

其次,下載當前最新的luajit和ngx_devel_kit (NDK),以及春哥編寫的lua-nginx-module

wget http://luajit.org/download/LuaJIT-2.0..tar.gz
wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz
wget https://github.com/openresty/lua-nginx-module/archive/v0.9.16.tar.gz

最後,建立Nginx運行的普通用戶

useradd -s /sbin/nologin -M www

解壓NDK和lua-nginx-module

tar zxvf v0.2.19.tar.gz tar zxvf v0.9.16.tar.gz

安裝LuaJIT Luajit是Lua即時編譯器

tar zxvf LuaJIT-2.0.3.tar.gz cd LuaJIT-2.0.3make && make install

安裝Nginx並加載模塊

環境變量 export LUAJIT_LIB=/usr/local/lib export LUAJIT_INC=/usr/local/include/luajit-2.0

tar xf nginx-1.9.4.tar.gz
cd nginx-1.9.4
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-http_dav_module --add-module=../ngx_devel_kit-0.2.19/--add-module=../lua-nginx-module-0.9.16/--with-pcre=/usr/local/src/pcre-8.37make && make install ln -s /usr/local/lib/libluajit-5.1.so.2/lib64/libluajit-5.1.so.2 #必定建立此軟鏈接,不然報錯

安裝完畢後,下面能夠測試安裝了,修改nginx.conf 增長第一個配置

location /hello { default_type 'text/plain'; content_by_lua 'ngx.say("hello,lua")'; }
/usr/local/nginx-1.9.4/sbin/nginx –t /usr/local/nginx-1.9.4/sbin/nginx

效果以下 

<img src="http://cdn.oldboyedu.com/wp-content/uploads/2016/02/wpid-c4bb49501a5952282fddb53494b513de_e874c5be-c976-40cf-a339-87f0acbe5647.png" alt="" title=""></p>

3.2.3 Openresty部署

安裝依賴包

yum install -y readline-devel pcre-devel openssl-devel

下載並編譯安裝openresty

cd /usr/local/src wget https://openresty.org/download/ngx_openresty-1.9.3.2.tar.gz
tar zxf ngx_openresty-1.9.3.2.tar.gz cd ngx_openresty-1.9.3.2./configure --prefix=/usr/local/openresty-1.9.3.2--with-luajit --with-http_stub_status_module --with-pcre --with-pcre-jit gmake && gmake install ln -s /usr/local/openresty-1.9.3.2//usr/local/openresty

測試openresty安裝

vim /usr/local/openresty/nginx/conf/nginx.conf 
server { location
/hello { default_type text/html; content_by_lua_block { ngx.say("HelloWorld") } } }

測試並啓動nginx

/usr/local/openresty/nginx/sbin/nginx -t /usr/local/openresty/nginx/sbin/nginx

 

3.2.4WAF部署

在github上克隆下代碼

git clone https://github.com/unixhot/waf.git
cp -a ./waf/waf /usr/local/openresty/nginx/conf/

修改Nginx的配置文件,加入(http字段)如下配置。注意路徑,同時WAF日誌默認存放在/tmp/日期_waf.log

#WAF lua_shared_dict limit 50m; #防cc使用字典,大小50M lua_package_path "/usr/local/openresty/nginx/conf/waf/?.lua"; init_by_lua_file "/usr/local/openresty/nginx/conf/waf/init.lua"; access_by_lua_file "/usr/local/openresty/nginx/conf/waf/access.lua";

/usr/local/openresty/nginx/sbin/nginx –t /usr/local/openresty/nginx/sbin/nginx

根據日誌記錄位置,建立日誌目錄

mkdir /tmp/waf_logs chown nginx.nginx /tmp/waf_logs

3.3學習模塊

3.3.1學習配置模塊

WAF上生產以前,建議不要直接上生產,而是先記錄日誌,不作任何動做。肯定WAF不產生誤殺
config.lua即WAF功能詳解

cd /usr/local/nginx/conf/waf cat config.lua --WAF config file,enable ="on",disable ="off"
--waf status config_waf_enable ="on" #是否開啓配置 --log dir config_log_dir ="/tmp/waf_logs" #日誌記錄地址 --rule setting config_rule_dir ="/usr/local/nginx/conf/waf/rule-config" #匹配規則縮放地址 --enable/disable white url config_white_url_check ="on" #是否開啓url檢測 --enable/disable white ip config_white_ip_check ="on" #是否開啓IP白名單檢測 --enable/disable block ip config_black_ip_check ="on" #是否開啓ip黑名單檢測 --enable/disable url filtering config_url_check ="on" #是否開啓url過濾 --enalbe/disable url args filtering config_url_args_check ="on" #是否開啓參數檢測 --enable/disable user agent filtering config_user_agent_check ="on" #是否開啓ua檢測 --enable/disable cookie deny filtering config_cookie_check ="on" #是否開啓cookie檢測 --enable/disable cc filtering config_cc_check ="on" #是否開啓防cc攻擊 --cc rate the xxx of xxx seconds config_cc_rate ="10/60" #容許一個ip60秒內只能訪問10此 --enable/disable post filtering config_post_check ="on" #是否開啓post檢測 --config waf output redirect/html config_waf_output ="html" #action一個html頁面,也能夠選擇跳轉 --if config_waf_output ,setting url config_waf_redirect_url ="http://www.baidu.com" config_output_html=[[ #下面是html的內容 <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="Content-Language" content="zh-cn"/>
<title>網站防火牆</title>
</head>
<body>
<h1 align="center"># 您的行爲已違反本網站相關規定,注意操做規範。詳情請聯微信公衆號:chuck-blog。 </body>
</html> ]]

 

3.4 學習access.lua的配置

cd /usr/local/openresty/nginx/conf/waf cat access.lua require'init' function waf_main() if white_ip_check()then elseif black_ip_check()then elseif user_agent_attack_check()then elseif cc_attack_check()then elseif cookie_attack_check()then elseif white_url_check()then elseif url_attack_check()then elseif url_args_attack_check()then --elseif post_attack_check()then else
return end end waf_main()

 

書寫書序:先檢查白名單,經過即不檢測;再檢查黑名單,不經過即拒絕,檢查UA,UA不經過即拒絕;檢查cookie;URL檢查;URL參數檢查,post檢查;

3.5 啓用WAF並測試

3.5.1模擬sql注入即url攻擊

顯示效果以下

&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;img src="http://cdn.oldboyedu.com/wp-content/uploads/2016/02/wpid-c4bb49501a5952282fddb53494b513de_b3d1247a-5e20-4b5d-861d-7b60f89fa320.png" alt="" title=""&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;

日誌顯示以下,記錄了UA,匹配規則,URL,客戶端類型,攻擊的類型,請求的數據

&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;img src="http://cdn.oldboyedu.com/wp-content/uploads/2016/02/wpid-c4bb49501a5952282fddb53494b513de_97307194-33b6-4c3a-9f0e-16c32cd9e2dc.png" alt="" title=""&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;

3.5.2 使用ab壓測工具模擬防cc攻擊

ab -c 100-n 100 192.168.4.10/index.php
This is ApacheBench,Version2.3<$Revision:1430300 $> Copyright1996AdamTwiss,ZeusTechnologyLtd, http://www.zeustech.net/ Licensed to TheApacheSoftwareFoundation, http://www.apache.org/ Benchmarking www.chuck-blog.com (be patient).....done ServerSoftware: openresty ServerHostname: 192.168.4.10 ServerPort:80 DocumentPath:/index.php DocumentLength:0 bytes ConcurrencyLevel:100 Time taken for tests:0.754 seconds Complete requests:10 Failed requests:90 #config.lua中設置的,60秒內只容許10個請求 Write errors:0 Non-2xx responses:90 Total transferred:22700 bytes HTML transferred:0 bytes Requests per second:132.65[#/sec](mean) Time per request:753.874[ms](mean) Time per request:7.539[ms](mean, across all concurrent requests) Transfer rate:29.41[Kbytes/sec] received ConnectionTimes(ms) min mean[+/-sd] median max Connect:236920.264105 Processing:32180144.5157629 Waiting:22179144.5156629 Total:56249152.4220702 Percentage of the requests served within a certain time (ms) 50%220 66%270 75%275 80%329 90%334 95%694 98%701 99%702 100%702(longest request) ``` ###3.5.3 模擬ip黑名單 將請求ip放入ip黑名單中

echo 「1.202.193.133」  >>/usr/local/openresty/nginx/conf/waf/rule-config/blackip.rule

顯示結果以下 ![](ca1fa711-48e6-4041-a367-b15db7bf2d2f_128_files/c71edccb-507c-4340-a1fc-ad03e300a2fa.png) ###3.5.4 模擬ip白名單 將請求ip放入ip白名單中,此時將不對此ip進行任何防禦措施,因此sql注入時應該返回404

echo 「1.202.193.133」 >>/usr/local/openresty/nginx/conf/waf/rule-config/whiteip.rule

顯示結果以下 ![](ca1fa711-48e6-4041-a367-b15db7bf2d2f_128_files/3ded0e02-480f-48f4-8aab-41aff0fc5538.png) ###3.5.5 模擬URL參數檢測 瀏覽器輸入www.chuck-blog.com/?a=select*from table 顯示結果以下 ![](ca1fa711-48e6-4041-a367-b15db7bf2d2f_128_files/744e4a20-5558-43fc-9f50-1546cbc765a3.png) 詳細規定在arg.rule中有規定,對請求進行了規範 ```bash [root@iZ28t900vpcZ rule-config]# /usr/local/openresty/nginx/conf/waf/rule-config/cat args.rule \.\./ \:\$ \$\{ select.+(from|limit) (?:(union(.*?)select)) having|rongjitest sleep\((\s*)(\d*)(\s*)\) benchmark\((.*)\,(.*)\) base64_decode\( (?:from\W+information_schema\W) (?:(?:current_)user|database|schema|connection_id)\s*\( (?:etc\/\W*passwd) into(\s+)+(?:dump|out)file\s* group\s+by.+\( xwork.MethodAccessor (?:define|eval|file_get_contents|include|require|require_once|shell_exec|phpinfo|system|passthru|preg_\w+|execute|echo|print|print_r|var_dump|(fp)open|alert|showmodaldialog)\( xwork\.MethodAccessor (gopher|doc|php|glob|file|phar|zlib|ftp|ldap|dict|ogg|data)\:\/ java\.lang \$_(GET|post|cookie|files|session|env|phplib|GLOBALS|SERVER)\[ \<(iframe|script|body|img|layer|div|meta|style|base|object|input) (onmouseover|onerror|onload)\= [root@iZ28t900vpcZ rule-config]# pwd /usr/local/openresty/nginx/conf/waf/rule-config

 

4、防cc攻擊利器之httpgrard

4.1 httpgrard介紹

HttpGuard是基於openresty,以lua腳本語言開發的防cc攻擊軟件。而openresty是集成了高性能web服務器Nginx,以及一系列的Nginx模塊,這其中最重要的,也是咱們主要用到的nginx lua模塊。HttpGuard基於nginx lua開發,繼承了nginx高併發,高性能的特色,能夠以很是小的性能損耗來防範大規模的cc攻擊。

4.2 httpgrard防cc特效

  • 限制訪客在必定時間內的請求次數
  • 向訪客發送302轉向響應頭來識別惡意用戶,並阻止其再次訪問
  • 向訪客發送帶有跳轉功能的js代碼來識別惡意用戶,並阻止其再次訪問
  • 向訪客發送cookie來識別惡意用戶,並阻止其再次訪問
  • 支持向訪客發送帶有驗證碼的頁面,來進一步識別,以避免誤傷
  • 支持直接斷開惡意訪客的鏈接
  • 支持結合iptables來阻止惡意訪客再次鏈接
  • 支持白名單功能
  • 支持根據統計特定端口的鏈接數來自動開啓或關閉防cc模式
    詳見github地址,在後續的博文中會加入此功能

5、WAF上線

  • 初期上線只記錄日誌,不開啓WAF,防止誤殺
  • WAF規則管理使用saltstack工具
  • 要知道並非有了WAF就安全,存在人爲因素
相關文章
相關標籤/搜索