刚处理完服务器安全问题。
到新公司来接手一堆烂服务器,第一次看到用宝塔管理业务服务器的,无奈。
首先说说nginx lua waf的部署环境,centos 6,nginx 1.12.1,跑的php。lnmp编译安装。
服务器上还部了个安全狗,这是个什么鬼?
开干吧,nginx -V,查看nginx编译参数,这些参数要记下来,后面有用。
#nginx -V
nginx version: nginx/1.12.2
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
safedog ......
configure arguments: --prefix=/opt/programs/nginx_1.12.2 --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module --with-threads --with-http_v2_module --with-http_addition_module --with-http_dav_module --with-file-aio --with-http_gunzip_module --add-module=nginx_upstream_check_module-master
去nginx.org下载对应版本的源码回来,因为需要增加lua模块。
#wget https://nginx.org/download/nginx-1.12.1.tar.gz
#tar zxf nginx-1.12.1.tar.gz
下载luajit回来编译安装,/opt/nginx改成你自己的目录:
# 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 PREFIX=/opt/nginx_1.12.2/lua/luajit
# make install PREFIX=/opt/nginx_1.12.2/lua/luajit
下载ngx_devel_kit(NDK)和ngx_lua回来:
# wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz
# tar xzvf v0.3.0.tar.gz
# wget https://github.com/openresty/lua-nginx-module/archive/v0.10.11.tar.gz
# tar xvf v0.10.11.tar.gz
下面开始重新编译nginx并增加上lua,这就用到上面要保存的nginx编译选项了,export的luajit_lib和inc改成你上面解压的路径:
# export LUAJIT_LIB=/opt/nginx_1.12.2/lua/luajit/lib
# export LUAJIT_INC=/opt/nginx_1.12.2/lua/luajit/include/luajit-2.0
# ./configure --prefix=/opt/programs/nginx_1.12.2 --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module --with-threads --with-http_v2_module --with-http_addition_module --with-http_dav_module --with-file-aio --with-http_gunzip_module --add-module=nginx_upstream_check_module-master --with-ld-opt="-Wl,-rpath,/opt/programs/nginx_1.12.2/lua/luajit/lib" --add-module=/opt/programs/nginx_1.12.2/lua/ngx_devel_kit-0.3.0/ --add-module=/opt/programs/nginx_1.12.2/lua/lua-nginx-module-0.10.11/
# make
# cp /opt/programs/nginx_1.12.2/sbin/nginx /opt/programs/nginx_1.12.2/sbin/nginx.bak 备份
# service nginx stop
#cp objs/nginx /opt/programs/nginx_1.12.2/sbin/
cp: overwrite ‘/opt/programs/nginx_1.12.2/sbin/nginx’? y
编译的过程中缺少啥就去下啥,黑色自由在编译的过程中缺少了pcre-8.40和openssl,直接去它们官网上去拖回来,同时修改编译参数里的对应包目录。这里就不列出来了,当时编译的时候没有保存错误提示。
然后再nginx -V一下看看lua模块有没有添加上。
20220523新增:
验证lua可不可用,在server里添加:
location /hello {
default_type 'text/plain';
return 200 'hello bro!';
}
然后访问http://www.xxx.com/hello看是不是显示hello bro,是就表示lua安装完成。
至此,nginx lua算是搞定了,下面就是要部署waf了,这里用到的是神奇的魔法师的waf脚本:https://github.com/loveshell/ngx_lua_waf
按照上面给出的说明操作就行了,简单的几步:
先把项目git回来:
#git clone https://github.com/loveshell/ngx_lua_waf.git
nginx.conf的http段添加,路径改成你自己的:
lua_package_path "/opt/nginx/conf/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /opt/nginx/conf/waf/init.lua;
access_by_lua_file /opt/nginx/conf/waf/waf.lua;
修改config.lua,里面的规则地址要修改,然后根据你自己的需要修改配置吧。