1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Nginx安装WAF

Nginx安装WAF

时间:2021-01-17 16:24:17

相关推荐

Nginx安装WAF

本文安装的WAF已不推荐,请移步Zhongkui-WAF,功能更多、更高效。

WAF简介

Web应用防火墙(英文:Web Application Firewall,简称: WAF)。

WAF用来防止Sql注入、XSS、SSRF、CC攻击、IP黑白名单、URL拦截访问等,从而保护我们的应用安全。

安装lua模块

因为使用的WAF模块是基于lua的,所以要先安装lua模块,让Nginx支持lua

安装lua的库:

yum install -y lua lua-devel

下载lua即时编译器LuaJIT:

wget -P /usr/local/src /download/LuaJIT-2.0.5.tar.gz

这里有个坑,安装官网版本的LuaJIT,在后面安装lua-nginx-module模块时会报错,所以改成openresty版本的:

wget -O /usr/local/src/LuaJIT-2.1-0411.tar.gz /openresty/luajit2/archive/v2.1-0411.tar.gz

解压:

cd /usr/local/srctar -zxvf LuaJIT-2.1-0411.tar.gz

安装LuaJIT:

cd /usr/local/src/LuaJIT-2.1-0411make && make install PREFIX=/usr/local/luajit2-2.1

编辑/etc/profile文件,添加LuaJIT环境变量:

export LUAJIT_LIB=/usr/local/luajit2-2.1/libexport LUAJIT_INC=/usr/local/luajit2-2.1/include/luajit-2.1

加载lua库到ld.so.conf文件:

echo "/usr/local/LuaJIT/lib" >> /etc/ld.so.conf

执行动态链接库管理命令,让动态链接库为系统所共享:

ldconfig

下载Nginx模块,ngx_devel_kitlua-nginx-module

wget -O /usr/local/src/ngx_devel_kit-0.3.1.tar.gz /simplresty/ngx_devel_kit/archive/v0.3.1.tar.gzwget -O /usr/local/src/lua-nginx-module-0.10.14.tar.gz /openresty/lua-nginx-module/archive/v0.10.14.tar.gz

这里还有个坑,lua-nginx-module模块要下载v0.10.14版本,之后的版本在启动Nginx时会报错。

分别解压两个模块到/usr/local/nginx-modules/目录:

tar -zxvf ngx_devel_kit-0.3.1.tar.gz -C /usr/local/nginx-modules/tar -zxvf lua-nginx-module-0.10.14.tar.gz -C /usr/local/nginx-modules/

安装Nginx时,通过configure命令添加上面这两个模块:

./configure --prefix=/usr/local/nginx \--with-http_ssl_module \--with-http_v2_module \--with-http_realip_module \--with-http_sub_module \--with-http_stub_status_module \--with-http_auth_request_module \--with-http_secure_link_module \--with-stream \--with-stream_ssl_module \--with-stream_realip_module --without-http_fastcgi_module \--without-select_module \--without-poll_module \--add-module=/usr/local/nginx-modules/ngx_devel_kit-0.3.1 \--add-module=/usr/local/nginx-modules/lua-nginx-module-0.10.14 \--with-ld-opt=-Wl,-rpath,/usr/local/luajit2-2.1/lib

在Nginx配置文件中添加配置:

location /lua {default_type 'text/html'; content_by_lua 'ngx.say("hello lua")'; }

浏览器访问项目地址/lua,如果可以看到hello lua,说明lua模块安装成功。

安装WAF

本文安装的是GitHub上一款开源的、基于lua-nginx-module的WAF,GitHub地址。

wget -O /usr/local/src/ngx_lua_waf-master.zip /loveshell/ngx_lua_waf/archive/refs/heads/master.zip

将WAF压缩包解压到Nginx目录下并命名为waf:

unzip -d /usr/local/nginx /usr/local/src/ngx_lua_waf-master.zipmv /usr/local/nginx/ngx_lua_waf-master /usr/local/nginx/waf

修改nginx.conf,在http模块下添加waf相关配置:

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

waf目录下的config.lua是配置文件,修改下waf配置文件所在的目录:

RulePath = "/usr/local/nginx/waf/wafconf/"

根据作者文档:

ngx_lua如果是0.9.2以上版本,建议正则过滤函数改为ngx.re.find,匹配效率会提高三倍左右。

修改init.luawaf.lua两个文件,把ngx.re.match替换为ngx.re.find

这里给一个已经修改好了的:

链接: /s/1qeI9lbnhphThXelIrsLvPA

提取码: 2vgf

重载Nginx配置文件:

nginx -s reload

浏览器访问测试:

http://xxxx/test?id=../etc/passwd

如果出现如下提示,说明waf配置生效:

配置文件说明:

RulePath = "/usr/local/nginx/conf/waf/wafconf/"--规则存放目录attacklog = "off"--是否开启攻击信息记录,需要配置logdirlogdir = "/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~~]]--警告内容,可在中括号内自定义备注:不要乱动双引号,区分大小写

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。