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
相关推荐
nginx-lua-waf 用法 自己构建镜像bilxio/nginx-lua-waf ,在nginx-lua-waf文件夹执行如下命令: docker build -t bilxio/nginx-lua-waf . 或者,直接拉它, docker pull bilxio/nginx-lua-waf 要运行映像并将...
OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块。 OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 ...
Centos 7 64 +[nginx+ngx_lua 模块] 支持WAF防护功能 可以作为喔
使用Nginx+Lua实现自定义WAF(Web application firewall) 最近发现使用的人越来越多了,计划开始维护和增加新功能 2020.7.29 赵班长 项目背景介绍 需求产生 由于原生态的Nginx的一些安全防护功能有限,就研究能不能...
lua_use_default_type lua_code_cache lua_regex_cache_max_entries header_filter_by_lua ngx.headers_sent
nginx-lua-waf:Nginx-Lua-WAF是一种基于Nginx的使用Lua语言开发的灵活高效的Web应用层防火墙
使用Nginx Lua实现的WAF
WEB应用防火墙,利用nginx的组件nginx_lua的组件,利用Lua语言开发的一个防火墙,简单
这个程序是基于 nginx lua module . 运行平台是 linux freebsd 的 nginx 。。 WIN 的 你可以用个 linux 的 nginx 做反向代理 保护后面的服务。 Belial 目前包含的模块有 : GET 、 POST 、 COOKIE SQL注入防御、...
基于网上大牛的waf版本魔改了一下,宝塔也是用此防火墙..支持redis记录来访ip数据,更好查询记录, 需要安装openresty版本的nginx, 如何安装网上教程一大堆,自己去找吧..
目录网盘文件永久链接 01.Nginx快速入门 02.Nginx常用模块 03.Nginx提供静态资源WEB服务 ...10Nginx+Lua-实战代码灰度发布实战-WAF防火墙 11.Nginx性能优化与压测工具 12.Nginx常见问题 13.Nginx架构总结 资料
人工智能-hadoop
lua-resty-waf:基于OpenResty堆栈的高性能WAF
原文连接:...说明:部署包包含 nginx V1.16.0 luajit V2.2.1(最新版) v0.3.1(最新版) v0.10.14rc5 注意:部署包存在兼容问题,这里是我经过验证后的最新稳定版本。
OpenResty,OpenStar,waf+,云waf,nginx lua true 欢迎使用 {OpenStar}(WAF+),该项目是从实际需求中产生,经过多次的版本迭代,实属不易。感谢春哥,以及的神器() 注意:使用版本一定要大于 1.11.0 因为使用了ngx....
ngx_lua_waf是一个基于ngx_lua的web应用防火墙。代码很简单,开发初衷主要是使用简单,高性能和轻量级。下面我们来看看如何在为nginx安装waf模块
WEB应用防火墙 《Nginx+Lua在网络安全方面的应用》理财范 周为 - elasticsearch 威胁情报 应急响应 安全体系 恶意软件 数据安全
注意v0.2之后,控制面板的输入uri已移至/verynginx/index.html描述VeryNginx基于lua_nginx_module(openrestry) 。 它实现了高级防火墙(waf),访问统计信息和其他一些功能。 它增强了Nginx的功能,并提供了友好的...
OpenWAF是第一个全方位开源的Web应用防护系统(WAF),他基于nginx_lua API分析HTTP请求信息。OpenWAF由行为分析引擎和规则引擎两大功能引擎构成。其中规则引擎主要对单个请求进行分析,行为分析引擎主要负责跨请求...