Nginx 配置支持 WAF
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