
下载luajit并安装,改为OpenResty
官网: http://luajit.org/download.html
//centos8 先安装lua环境:
//$dnf --enablerepo=PowerTools install lua-devel
$ cd /usr/local
//不使用LuaJIT模块,改用更先进的OpenResty模块,LuaJIT已在2017年停止更新!!!
//$ wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
//$ tar -xzvf LuaJIT-2.0.5.tar.gz
//$ cd LuaJIT-2.0.5
//$ make
//$ make install PREFIX=/usr/local/luajit
//$ ln -s /usr/local/luajit/bin/luajit-2.0.5 /usr/local/bin/luajit
//# luajit -v
//下载OpenResty模块
//官网:https://openresty.org/en/download.html
$ wget https://openresty.org/download/openresty-1.19.3.1.tar.gz
$ tar -xzvf openresty-1.19.3.1.tar.gz
$ cd openresty-1.19.3.1
//自行添加需要的模块!!
$ ./configure --with-http_v2_module --with-http_ssl_module --with-http_realip_module
$ gmake
$ gmake install
//安装完成后查看是否已引入模块:
$ cd /usr/local/openresty/nginx/sbin
$ ./nginx -V
---------------------------------------
nginx version: openresty/1.19.3.1
...
configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.1 ...
nginx编译安装支持lua
$ cd "$file_name"
//luajit模块需要先安装
$ export LUAJIT_LIB=/usr/local/luajit/lib
$ export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
//$ export LD_LIBRARY_PATH=/usr/local/luajit/lib:$LD_LIBRARY_PATH
$echo "/usr/local/luajit/lib" >> /etc/ld.so.conf
$ ldconfig
$ ./configure --prefix=/usr/local/tengine --with-http_v2_module --with-http_ssl_module --with-http_realip_module --with-http_lua_module --with-luajit-inc=/usr/local/luajit/include/luajit-2.0 --with-luajit-lib=/usr/local/luajit/lib
$ make && make install
下载ngx_lua_waf
//旧版官网:https://github.com/loveshell/ngx_lua_waf/
//改版官网:https://github.com/whsir/ngx_lua_waf/
假设nginx安装路径为:/usr/local/tengine
把ngx_lua_waf下载到conf目录下,解压命名为waf
即:/usr/local/tengine/conf/waf
//配置 /usr/local/tengine/conf/waf/config.lua
RulePath = "/usr/local/tengine/conf/waf/wafconf/" //<---修改你服务器的对应位置
attacklog = "off"
logdir = "/usr/local/tengine/logs/hack/" //<---修改你服务器的对应位置
----------------------------------------------------------------
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白名单
whiteServername = "off"
--是否开启主机(对应nginx里面的server_name)白名单
black_fileExt={"php","jsp"}
--填写可上传文件后缀类型
ipWhitelist={"127.0.0.1","192.168.1.0-192.168.255.255"}}
--ip白名单,多个ip用逗号分隔
ipBlocklist={"1.0.0.1","2.0.0.0-2.0.0.255"}
--ip黑名单,多个ip用逗号分隔
CCDeny="on"
--是否开启拦截cc攻击(需要nginx.conf的http段增加lua_shared_dict limit 10m;)
CCrate = "100/60"
--设置cc攻击频率,单位为秒.
--默认1分钟同一个IP只能请求同一个地址100次
html=[[......]]
--警告内容,可在中括号内自定义
备注:不要乱动双引号,区分大小写
Tengine配置
//在nginx.conf的http段添加
lua_package_path "/usr/local/tengine/conf/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /usr/local/tengine/conf/waf/init.lua;
access_by_lua_file /usr/local/tengine/conf/waf/waf.lua;
测试:
https://yourhost/abc.php?id=../etc/passwd