ngx_lua_waf

本文介绍如何使用ngx_lua_waf为Nginx部署Web应用防火墙,包括配置步骤及关键参数说明,并提供了验证规则是否生效的方法。

  Web应用防护系统Web Application Firewall,简称WAF。针对HTTP/HTTPS的安全策略专门为Web应用提供保护的产品。

       OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

  ngx_lua_waf是一个基于lua-nginx-module(openresty)的web应用防火墙。

     

        关于ngx_lua_waf的简介见github: https://github.com/loveshell/ngx_lua_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://xxxx/test.php?id=../etc/passwd
    返回"Please go away~~"字样,说明规则生效。

转载于:https://www.cnblogs.com/lnlvinso/p/8877995.html

### 使用 Docker 部署 ngx_lua_waf 的方法 #### 一、Docker 容器化部署 OpenResty 和 ngx_lua_waf 为了在容器环境中成功部署 `ngx_lua_waf`,需要完成以下几个核心步骤: 1. **安装基础依赖** 在基于 OpenResty 的镜像中,首先需确保已安装必要的开发工具链以及 Nginx 扩展模块支持。这可以通过下载并编译 `ngx_devel_kit` 和 `lua-nginx-module` 来实现[^2]。 2. **构建自定义 OpenResty 镜像** 创建一个 Dockerfile 文件来定制 OpenResty 环境,并集成 WAF 功能所需的 Lua 脚本插件。以下是示例 Dockerfile 内容: ```dockerfile FROM openresty/openresty:alpine RUN apk add --no-cache build-base pcre-dev zlib-dev git \ && mkdir -p /usr/local/src \ && cd /usr/local/src \ && wget -O ngx_devel_kit.tar.gz https://github.com/simplresty/ngx_devel_kit/archive/v0.3.1.tar.gz \ && tar zxvf ngx_devel_kit.tar.gz \ && wget -O lua_nginx_module.tar.gz https://github.com/openresty/lua-nginx-module/archive/v0.10.14.tar.gz \ && tar zxvf lua_nginx_module.tar.gz # 编译 OpenResty 并启用扩展模块 RUN OPENRESTY_PREFIX=/usr/local/openresty/nginx \ && ./configure --with-http_ssl_module \ --add-dynamic-module=/usr/local/src/ngx_devel_kit-0.3.1 \ --add-dynamic-module=/usr/local/src/lua-nginx-module-0.10.14 \ && make && make install # 安装 waf 插件及其依赖项 RUN luarocks install lua-resty-t1k \ && git clone https://github.com/unixhot/ngx_lua_waf.git /etc/nginx/waf/ CMD ["openresty", "-g", "daemon off;"] ``` 上述文件描述了一个完整的构建过程,包括从源码获取必要组件到最终启动服务的命令序列。 3. **配置 Nginx 及 WAF 参数** 将 `ngx_lua_waf` 加载至 Nginx 中涉及修改其主配置文件 `/etc/nginx/nginx.conf` 或者特定站点配置文件中的 location 块部分。例如,在 http{} 段加入如下指令即可激活防护机制: ```nginx init_by_lua_file /etc/nginx/waf/init.lua; access_by_lua_file /etc/nginx/waf/access.lua; log_by_lua_file /etc/nginx/waf/log.lua; server { listen 80 default_server; location / { proxy_pass http://backend_service; } } ``` 此外还需调整内部逻辑以适配实际业务需求,比如 IP 黑白名单管理、请求频率限制等策略均可以在对应的 Lua 脚本里设定[^4]。 --- #### 二、常见注意事项与调试技巧 当遇到错误提示 “if (tonumber(count)>3) then”,通常是因为 Redis 数据读取失败返回 nil 导致无法正常转换成数值型变量参与运算。因此建议增加额外校验措施防止异常中断程序执行流: ```lua local count = tonumber(redis:get('key')) if not count or type(count) ~= 'number' then count = 0 end if count > 3 then -- 处理超出阈值的情况 end ``` 另外关于日志记录功能也非常重要,它可以帮助快速定位问题所在位置。可以利用标准库函数 ngx.log() 输出诊断信息以便后续排查原因。 --- ### 总结 综上所述,借助 Docker 技术能够极大地简化复杂 Web 应用的安全加固工作量。通过预先准备好的模板工程配合自动化脚本来加速整个交付周期的同时还能保持高度灵活性满足不同场景下的个性化定制诉求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值