linux-openresty.lua.waf

记录一个nginx lua环境搭建过程,开始的时候是准备直接将lua编译进nginx的,但是一直搞不定,近来接触到了openresty , 终于搞定了

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

1. 安装

1.1. openresty 安装

[root@00 software]# yum install pcre-devel openssl-devel gcc make postgresql-devel -y [root@00 software]# wget https://openresty.org/download/openresty-1.13.6.2.tar.gz [root@00 software]# tar -xzf openresty-1.13.6.2.tar.gz [root@00 software]# cd openresty-1.13.6.2 # 如果需要编译固定的nginx版本,可以直接将对应版本的nginx源码解压放入到bundle目录下,删除原有的nginx源码即可 # 此处的configure包含了nginx的编译功能,可以像nginx的configure一样进行模块添加,详细查看帮助 [root@00 openresty-1.13.6.2]# ./configure --prefix=/opt/openresty \ --user=www --group=www \ --with-luajit \ --without-http_redis2_module \ --with-http_iconv_module \ --with-http_postgres_module \ --with-http_stub_status_module \ --with-http_ssl_module [root@00 openresty-1.13.6.2]# make && make install

1.2. waf 配置

https://github.com/loveshell/ngx_lua_waf.git

[root@00 ~]# mkdir /opt/openresty/{waf,logs} -p [root@00 ~]# cd /opt/openresty/waf [root@00 waf]# git clone https://github.com/loveshell/ngx_lua_waf.git . [root@00 waf]# sed -i 's#/usr/local/nginx/conf/waf/#/opt/openresty/waf/#g' config.lua # 修改配置文件位置 [root@00 waf]# sed -i 's#/usr/local/nginx/logs/hack/#/opt/openresty/logs/#g' config.lua # 修改攻击日志存储位置 [root@00 waf]# vim /opt/openresty/nginx/conf/nginx.conf # http 标签中添加 lua_package_path "/opt/openresty/waf/?.lua"; lua_shared_dict limit 10m; init_by_lua_file /opt/openresty/waf/init.lua; access_by_lua_file /opt/openresty/waf/waf.lua; # server 标签中添加 location /hellolua { content_by_lua ' ngx.header.content_type = "text/html"; ngx.say("Hello Lua."); '; }
waf config.lua 配置文件说明
RulePath = "/opt/openresty/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. 启动

[root@00 ~]# /opt/openresty/nginx/sbin/nginx -t # 检查配置是否正常 nginx: the configuration file /opt/openresty/nginx/conf/nginx.conf syntax is ok nginx: configuration file /opt/openresty/nginx/conf/nginx.conf test is successful [root@00 ~]# /opt/openresty/nginx/sbin/nginx

3. 测试

[root@00 ~]# curl http://127.0.0.1/hellolua Hello Lua. [root@00 ~]# curl http://xxxx/test.php?id=../etc/passwd # 此处若成功配置的话,会得到403反馈,浏览器得到异常访问页面,不能在本机直接访问ip+端口,本机ip已经加入了白名单