`

nginx配置lua模块和基于lua的waf三种方式

阅读更多

nginx和lua都注重性能,使用lua扩展nginx大大增强了nginx的灵活性。nginx支持lua需要用到ngx_lua模块,在nginx wiki中推荐使用openresty,编译时加上--with-luajit参数就行了,我用的模块不多,更喜欢轻量和高性能的tengine,采用手动编译也不复杂。

一、准备

服务器环境:centos 6.6 64位 ,tengine2.1.0 , openssl和pcre使用yum安装
软件下载:

LuaJIT推荐使用2.1版本,2.0的源码中已经包含了2.1的分支:

 

git clone http://luajit.org/git/luajit-2.0.git

安装zlib、openssl和pcre,偷懒使用yum安装:

yum install zlib zlib-devel openssl openssl-devel pcre pcre-devel

下载tengine和ngx_lua_waf:

wget http://tengine.taobao.org/download/tengine-2.1.0.tar.gz
git clone https://github.com/loveshell/ngx_lua_waf

二、编译LuaJIT和tengine

2.1 安装 LuaJIT2.1

lua或luaJIT都能支持ngx_lua模块,lua版本最高支持到5.1,出于效率考虑推荐使用luaJIT,我们克隆下来的luaJIT版本是2.0,官方推荐使用2.1开发版,切换到2.1的分支:

cd luajit-2.0 && git checkout v2.1

编译:

make
make install PREFIX=/usr/local/luajit

安装好后LUAJIT_LIB和LUAJIT_INC的路径是:
库文件 LUAJIT_LIB=/usr/local/luajit/lib
头文件 LUAJIT_INC=/usr/local/luajit/include/luajit-2.1
这两个路径编译tengine时要用到。

2.2编译tengine:

 ./configure --prefix=/opt/nginx --with-http_lua_module --with-luajit-lib=/usr/local/luajit/lib/ --with-luajit-inc=/usr/local/luajit/include/luajit-2.1/ --with-ld-opt=-Wl,-rpath,/usr/local/luajit/lib
 
make && make install

测试:
在nginx.conf中添加一个location:

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

启动nginx,访问:http://serverIP/lua ,如果出现 hello,lua 就安装成功了。

三、配置ngx_lua_waf

nginx下常见的开源waf有mod_security、naxsi、ngx_lua_waf这三个,mod_security是最老牌的,功能最强规则细定制性又强,但是配置最复杂高并发时性能差。naxsi是原生nginx下的waf,性能不错但是基于白名单,配置也很麻烦。ngx_lua_waf功能和规则虽然没有这两个强大,但赢在性能高和易用性强,基本上零配置,而且常见的攻击类型都能防御,是比较省心的选择。安装好ngx_lua后,把下载好的ngx_lua_waf复制到conf目录下,重命名为waf,在nginx.conf的http段添加:

lua_package_path "/opt/nginx/conf/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file  /opt/nginxconf/waf/init.lua; 
access_by_lua_file /opt/nginx/conf/waf/waf.lua;

修改/opt/nginx/conf/waf下的config.lua文件,将RulePath和logdir改为实际的目录:

RulePath = "/opt/nginx/conf/waf/wafconf/"
logdir = "/opt/nginx/logs/waf"   //确保此文件夹nginx有写入权限

其它的安全配置,按照实际需要开启。设置好和启动nginx

测试规则是否生效:

任意文件读取:

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

sql注入:

curl http://xxxx/test.php?id=1 select * from admin

返回禁止页面就说明配置成功了。

四、遇到的问题

启动nginx报错:

./nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

编译时加参数:

--with-ld-opt=-Wl,-rpath,/usr/local/luajit/lib
意思是:为链接器添加额外的参数,将/usr/local/luajit/lib添加到nginx的二进制文件中,防止启动时找不到luaJIT的动态链接库。

参考文章
http://wiki.nginx.org/HttpLuaModule
http://www.cnblogs.com/ghj1976/p/3535818.html
https://github.com/loveshell/ngx_lua_waf

 

分享到:
评论

相关推荐

    docker-nginx-lua-waf:基于 Nginx + Lua 技术栈的 WAF

    nginx-lua-waf 用法 自己构建镜像bilxio/nginx-lua-waf ,在nginx-lua-waf文件夹执行如下命令: docker build -t bilxio/nginx-lua-waf . 或者,直接拉它, docker pull bilxio/nginx-lua-waf 要运行映像并将...

    lua版waf web防火墙 redis+nginx版

    4. **配置Nginx**:在Nginx配置文件中,启用lua模块和WAF相关的配置,包括与Redis的连接设置。 5. **启动和测试**:启动OpenResty服务,并进行测试以确保WAF功能正常工作。 在实际操作中,你可能还需要自定义WAF...

    Centos 7 64 +[nginx+ngx_lua 模块] 支持WAF防护功能

    - 配置Nginx的配置文件,例如`/etc/nginx/nginx.conf`,以启用ngx_lua模块和WAF相关的指令。 - 使用Lua编写WAF规则,这些规则通常包含在单独的Lua脚本文件中,通过`set_by_lua_file`或`access_by_lua_file`指令...

    openresty(nginx-lua-module-zh-wiki)中文文档.pdf

    OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块。 OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 ...

    nginx+waf的配置

    2. **WAF模块集成**:Nginx可以通过第三方模块如ModSecurity或者 ngx_lua_waf 来实现WAF功能。这些模块需要在编译Nginx时添加,并在配置文件中引入相应的配置指令。例如,对于ngx_lua_waf,你可能需要在http块或...

    ngx_lua_waf-master.zip_lua_nearly11h_nginx_ngx_lua_waf

    ngx_lua_waf是一个基于Nginx的Web应用防火墙,其核心是利用了Nginx的ngx_lua模块,通过Lua脚本实现灵活且强大的安全防护功能。ngx_lua_waf项目名称中的“master”通常指的是该项目的主分支或最新版本。"nearly11h...

    waf:使用Nginx+Lua实现的WAF(版本v1.0)

    使用Nginx+Lua实现自定义WAF(Web application firewall) 最近发现使用的人越来越多了,计划开始维护和增加新功能 2020.7.29 赵班长 项目背景介绍 需求产生 由于原生态的Nginx的一些安全防护功能有限,就研究能不能...

    linux-使用NginxLua实现的WAF

    总之,通过Nginx Lua实现的WAF提供了一种灵活、高效的方式来增强Web服务器的安全性。它允许我们根据业务需求定制安全策略,同时也方便了与现有系统的集成和扩展。不过,实施过程中需要注意性能和资源消耗,合理设计...

    Nginx-ngx_lua模块原理和内置函数.docx

    ### Nginx ngx_lua 模块原理与内置函数详解 #### 概述 Nginx 是一款高性能的 HTTP 和反向代理 Web 服务器,而 ngx_lua 模块则是 Nginx 的一个强大扩展,它允许在 Nginx 中直接嵌入 Lua 脚本进行动态内容处理和请求...

    Nginx-Lua-WAF是一款基于Nginx的使用Lua语言开发的灵活高效的Web应用层防火墙.zip

    Nginx-Lua-WAF是一款基于Nginx的使用Lua语言开发的灵活高效的Web应用层防火墙.zip

    nginx-lua-waf:Nginx-Lua-WAF是一种基于Nginx的使用Lua语言开发的灵活高效的Web应用层防火墙

    3. **配置集成**:将Nginx-Lua-WAF的Lua模块添加到Nginx配置文件中。 4. **规则定制**:根据需要修改或添加WAF规则。 5. **编译与启动**:重新编译Nginx并启动服务,Nginx-Lua-WAF开始生效。 Nginx-Lua-WAF的灵活性...

    基于nginx+lua构建waf网页防火墙+项目源码+文档说明

    基于nginx+lua构建waf网页防火墙 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、...

    宝塔面板Nginx的Lua-Waf防火墙终极改进 动态封禁IP

    宝塔面板Nginx的Lua-Waf防火墙终极改进 动态封禁IP

    ngnix_lua_waf 黑白名单

    Nginx Lua WAF(Web Application Firewall)是一种基于Nginx服务器并利用Lua脚本实现的Web应用防火墙。它通过在HTTP请求到达应用程序之前进行过滤,来保护Web应用免受恶意攻击。Lua是一种轻量级、高性能的脚本语言,...

    Nginx利用Lua+Redis实现动态封禁IP的方法

    一、背景 我们在日常维护网站中,经常会遇到这样一个需求,为了...2、在 Web Server 层面,通过 Nginx 自身的 deny 选项 或者 lua 插件 配置 IP 黑名单; 3、在应用层面,在请求服务之前检查一遍客户端 IP 是否在黑名单

    lua-resty-waf:基于OpenResty堆栈的高性能WAF

    lua-resty-waf作为OpenResty生态系统的一部分,为Nginx提供了强大的WAF能力,它的轻量级设计和高效的Lua集成使得它成为保护Web服务安全的理想选择。通过深入理解和定制lua-resty-waf,开发者可以构建出更健壮、更...

    Nginx白名单防御模块belialwaf.zip

    这个程序是基于 nginx lua module . 运行平台是 linux freebsd 的 nginx 。。 WIN 的 你可以用个 linux 的 nginx 做反向代理 保护后面的服务。 Belial 目前包含的模块有 : GET 、 POST 、 COOKIE SQL注入防御、...

    配合openresty使用waf模块

    1. **配置WAF**:编辑OpenResty的主配置文件(通常为`nginx.conf`),将WAF模块的相关配置引入。这可能涉及到引入Lua脚本文件、设置日志记录、定义安全规则等。 2. **测试配置**:在更改配置后,先使用`nginx -t`...

    lua-nginx-module-0.10.9rc7

    lua-nginx-module-0.10.9rc7与之兼容,意味着用户可以利用这个模块在最新的Nginx环境中实现基于Lua的动态处理,充分利用新版本的性能提升。 三、核心功能 1. **请求处理**:通过lua-nginx-module,开发者可以在...

    Nginx知识体系入门实践.zip

    目录网盘文件永久链接 01.Nginx快速入门 02.Nginx常用模块 03.Nginx提供静态资源WEB服务 ...10Nginx+Lua-实战代码灰度发布实战-WAF防火墙 11.Nginx性能优化与压测工具 12.Nginx常见问题 13.Nginx架构总结 资料

Global site tag (gtag.js) - Google Analytics