一、安裝OpenResty
Linux官方建議直接通過官方提供的預編譯包安裝:http://openresty.org/cn/linux-packages.html
# 確保yum周邊工具已經安裝 yum install yum-utils -y # 添加倉庫 yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo # 安裝openresty yum install openresty -y
openresty默認安裝在/usr/local/openresty,其中已自帶nginx。
二、使用安全規則ngx_lua_waf
2.1 ngx_lua_waf介紹
我不明白為什么很多軟件不提供默認配置,比較很多暴力破解軟件不提供弱口令文件snort有段時間也不提供默認規則,openresty也不提供默認規則。
不過還好有人自己寫了規則分享出來:https://github.com/loveshell/ngx_lua_waf
2.2 ngx_lua_waf加載到nginx
下載規則文件:
git clone https://github.com/loveshell/ngx_lua_waf.git
mv ngx_lua_waf/ /usr/local/openresty/nginx/conf/waf
糾正nginx位置。因為該規則庫默認nginx安裝在/usr/local/nginx
,我們需要編緝config.lua糾正nginx位置,主要是RulePath和logdir兩項:
RulePath = "/usr/local/openresty/nginx/conf/waf/wafconf/" logdir = "/usr/local/openresty/nginx/logs/hack/"
創建攔截日志文件目錄。上面我們設置攔截日志文件目錄為/usr/local/openresty/nginx/logs/hack/但該目錄尚未存在需要事先創建,且需要賦權給nobody不然沒法寫:
mkdir /usr/local/openresty/nginx/logs/hack/ chown -R nobody:nobody hack/
加載規則。編緝/usr/local/openresty/nginx/conf/nginx.conf,在http{}內server{}前加入:
lua_shared_dict limit 10m; 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/waf.lua;
使用-t確認配置沒有錯誤:
三、攔截效果測試
默認只對.php和.jsp文件進行規則檢測,但因為是先進行規則檢測后進行查詢文件是否存在,所以雖然當前nginx沒有反向代理php和jsp也沒有php和jsp文件但這兩個都不用管。
但要注意默認對來自本機的請求是不進行規則過濾的,所以不要在安裝OpenResty的機器上curl http://127.0.0.1/test.php?id=../etc/passwd半天,然后說規則怎么沒生效。
啟動nginx后在另外一台機器上訪問(192.168.220.133是我安裝OpenResty的機器的ip),效果如下:
進入攔截日志目錄檢看攔截記錄如下: