1. 程式人生 > >Nginx 配置支持 WAF

Nginx 配置支持 WAF

redirect black 包含 html mkdir klist root 逗號 yum

WAF(Web Application Firewall),中文名叫做“Web應用防火墻”

WAF的定義是這樣的:Web應用防火墻是通過執行一系列針對HTTP/HTTPS的安全策略來專門為Web應用提供保護的一款產品,通過從上面對WAF的定義中,

我們可以很清晰地了解到:WAF是一種工作在應用層的、通過特定的安全策略來專門為Web應用提供安全防護的產品。

ngx_lua_waf是一個基於ngx_lua的web應用防火墻。

# ngx_lua_waf用途:

  防止sql註入,本地包含,部分溢出,fuzzing測試,xss,SSRF等web攻擊

  防止svn/備份之類文件泄露

  防止ApacheBench之類的壓力測試工具的攻擊

  屏蔽常見的黑客掃描工具,掃描器

  屏蔽異常的網絡請求

  屏蔽圖片附件類目錄PHP執行權限

  防止webshell上傳

# 安裝

  1、部署環境說明:  

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)

[root@localhost ~]# uname -r
3.10.0-862.el7.x86_64

  2、安裝依賴包:

yum -y install gcc gcc-c++ autoconf automake make
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel

  3、安裝LuaJIT2.0(LuaJIT是采用C語言寫的Lua代碼的解釋器 這裏推薦使用lujit2.1做lua支持)

下載luajit 2.0並安裝
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
[root@localhost src]# tar xf LuaJIT-2.0.5.tar.gz
[root@localhost src]# cd LuaJIT-2.0.5
[root@localhost LuaJIT-2.0.5]# make
&& make install

  4、安裝ngx_devel_kit(NDK(nginx development kit)模塊是一個拓展nginx服務器核心功能的模塊,第三方模塊開發可以基於它來快速實現。)

[root@localhost src]# wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz
[root@localhost src]# tar xf v0.3.0.tar.gz

  5、安裝nginx_lua_module

[root@localhost src]# wget https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gz
[root@localhost src]# tar xf v0.10.13.tar.gz

  6、導入環境變量:

echo "export LUAJIT_LIB=/usr/local/lib" >> /etc/profile
echo "export LUAJIT_INC=/usr/local/include/luajit-2.0" >> /etc/profile

  7、編譯安裝Nginx 

[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# wget http://nginx.org/download/nginx-1.14.0.tar.gz
[root@localhost src]# tar xf nginx-1.14.0.tar.gz  
[root@localhost src]# cd nginx-1.14.0
[root@localhost src]# useradd -s /sbin/nologin -M 
[root@localhost nginx-1.14.0]# ./configure --user=www --group=www \ 
--prefix=/usr/local/nginx-1.14.0 \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--pid-path=/usr/local/ngin/nginx.pid \
--with-http_realip_module \
--add-module=/usr/local/src/ngx_devel_kit-0.3.0 \
--add-module=/usr/local/src/lua-nginx-module-0.10.13 \
--with-ld-opt="-Wl,-rpath,$LUAJIT_LIB"
[root@localhost nginx-1.14.0]#make -j2
[root@localhost nginx-1.14.0]# make install
[root@localhost nginx-1.14.0]#ln -s /usr/local/nginx-1.14.0 /usr/local/nginx

  8、新建/usr/local/nginx/logs/hack/攻擊日誌目錄,並賦予nginx用戶對該目錄的寫入權限。

mkdir -p /usr/local/nginx/logs/hack/
chown -R www.www /usr/local/nginx/logs/hack/
chmod -R 755 /usr/local/nginx/logs/hack/
啟動nginx:
 /usr/local/nginx/sbin/nginx

  至此nginx支持WAF防護功能已經搭建完成!

#使用說明:

  nginx配置文件路徑為:/usr/local/nginx/conf/

  把ngx_lua_waf下載到conf目錄下,解壓命名為waf

  在nginx.conf的http段添加下面這段:

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

  配置config.lua裏的waf規則目錄(一般在waf/conf/目錄下):

  RulePath = "/usr/local/nginx/conf/waf/wafconf/"   #絕對路徑如有變動,需對應修改

  然後重啟nginx即可

  ###配置文件詳細說明:

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~~]]
    --警告內容,可在中括號內自定義
    備註:不要亂動雙引號,區分大小寫

###檢查規則是否生效:

  部署完畢可以嘗試如下命令:

curl http://your_ip/test.php?id=../etc/passwd

結果如下則說明規則生效(頁面修改地址:/usr/local/nginx/conf/waf/config.lua):

技術分享圖片

 註意:默認,本機在白名單不過濾,可自行調整config.lua配置

###一些說明:
  
過濾規則在wafconf下,可根據需求自行調整,每條規則需換行,或者用|分割

    args裏面的規則get參數進行過濾的
    url是只在get請求url過濾的規則        
    post是只在post請求過濾的規則        
    whitelist是白名單,裏面的url匹配到不做過濾        
    user-agent是對user-agent的過濾規則


默認開啟了get和post過濾,需要開啟cookie過濾的,編輯waf.lua取消部分--註釋即可

日誌文件名稱格式如下:虛擬主機名_sec.log

參考地址:https://github.com/loveshell/ngx_lua_waf

 

Nginx 配置支持 WAF