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 http://luajit.org/download/LuaJIT-2.0.5.tar.gz

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

wget -O /usr/local/src/LuaJIT-2.1-20220411.tar.gz https://github.com/openresty/luajit2/archive/v2.1-20220411.tar.gz

解压:

cd /usr/local/src
tar -zxvf LuaJIT-2.1-20220411.tar.gz

安装LuaJIT:

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

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

export LUAJIT_LIB=/usr/local/luajit2-2.1/lib
export 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 https://github.com/simplresty/ngx_devel_kit/archive/v0.3.1.tar.gz
 wget -O /usr/local/src/lua-nginx-module-0.10.14.tar.gz https://github.com/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 https://github.com/loveshell/ngx_lua_waf/archive/refs/heads/master.zip

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

unzip -d /usr/local/nginx /usr/local/src/ngx_lua_waf-master.zip
mv /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

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

链接: https://pan.baidu.com/s/1qeI9lbnhphThXelIrsLvPA

提取码: 2vgf

重载Nginx配置文件:

nginx -s reload

浏览器访问测试:

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

如果出现如下提示,说明waf配置生效:
在这里插入图片描述
配置文件说明:

	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~~]]
    --警告内容,可在中括号内自定义
    备注:不要乱动双引号,区分大小写
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx lua waf是一种基于lua-nginx-module的Web应用防火墙(WAF)。它可以在nginx服务器上使用lua脚本进行请求过滤和防护,以提供更好的安全性。安装nginx lua waf的步骤如下: 1. 首先,下载适用于lua-nginx-module的版本。你可以使用以下命令从GitHub上下载lua-nginx-module模块的特定版本: ``` wget https://github.com/openresty/lua-nginx-module/releases/tag/v0.10.13 ``` 2. 解压下载的文件: ``` tar -zxvf v0.10.13 ``` 3. 删除之前的lua-nginx-module版本(如果有的话): ``` rm -rf openresty-1.9.15.1/bundle/ngx_lua-0.10.5 ``` 4. 复制新的lua-nginx-module到正确的位置: ``` mv lua-nginx-module-0.10.13 openresty-1.9.15.1/bundle/ngx_lua-0.10.13 ``` 5. 使用适当的编译参数来编译nginx,具体参数可以参考VeryNginx的编译参数。以下是一个示例编译命令: ``` ./configure --prefix=/opt/verynginx/openresty --user=nginx --group=nginx --with-http_v2_module --with-http_sub_module --with-http_stub_status_module --with-luajit make ``` 在编译完成后,你就可以使用nginx lua waf来增强你的nginx服务器的安全性了。 值得注意的是,在lua-nginx-module的源码中,有一些默认参数设置,例如最多请求参数和头的数量默认为100。你可以根据需要进行调整。例如,可以在源代码中找到以下部分进行修改: ``` #ifndef NGX_HTTP_LUA_MAX_ARGS #define NGX_HTTP_LUA_MAX_ARGS 100 #endif #ifndef NGX_HTTP_LUA_MAX_HEADERS #define NGX_HTTP_LUA_MAX_HEADERS 100 #endif ``` 这样,你可以根据实际需求来调整最大请求参数和头的数量。 参考资料: https://github.com/p0pr0ck5/lua-resty-waf/issues/280 https://github.com/openresty/lua-nginx-module#ngxreqget_uri_args https://github.com/openresty/openresty/issues/358 https://github.com/openresty/lua-nginx-module/commit/52af63a5b949d6da2289e2de3fb839e2aba4cbfd<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Nginx Lua WAF通用绕过方法](https://blog.csdn.net/qq_27446553/article/details/80404592)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值