最新消息:

BT(宝塔面板)6.6nginx自编译 ngx_lua_waf web 应用防火墙模块

tools admin_ad 15浏览 0评论

大鸟前面文章里说过如何升级到宝塔面板6.6的教程,大鸟最近也一直在用宝塔面板的6.6.6的最新版本,额,确实和5.9没什么区别,但是也不要觉得6.6这个版本有多好,其实它没你想的那么好。

nginx的防火墙模块被取消了,连接管理和进程管理也被取消了,说白了,大鸟觉得,6.X是阉割版。因为宝塔现在推出了商业版,商业版和免费版要有分水岭,这势必要取消掉原来5.9版本中的很多非常实用的功能,这里面就有什么防火墙啊,进程管理、连接管理这些很实用的小功能。如果你要用,很简单,官方的收费插件里有防火墙插件,你要用就买。

额,大鸟这里就不多吐槽6.X这个版本了,今天大鸟要说的是,虽然6.6取消了原来5.9种nginx里面集成的应用防火墙模块,但是我们自己可以的动手编译安装这个ngx_lua_waf web模块。

你可以使用SSH工具以ROOT权限登陆之后下载备份nginx,也可以直接使用命令备份nginx。

第一、查看nginx位置

  1. ps elf | grep nginx

第二、进入宝塔面板的nginx目录

  1. cd /www/server/nginx/sbin/

第三、备份宝塔nginx

  1. cp nginx nginx.bak

第四、进入root目录

  1. cd /root

第五、安装项目

项目地址:https://github.com/loveshell/ngx_lua_waf

1、下载安装LuaJIT 2.1(2.0或者2.1都是支持的,官方推荐2.1):http://luajit.org/download.html

  1. wget http://luajit.org/download/LuaJIT-2.1.0-beta2.tar.gz
  2. tar zxf LuaJIT2.1.0beta2.tar.gz
  3. cd LuaJIT2.1.0beta2
  4. make PREFIX=/usr/local/luajit
  5. make install PREFIX=/usr/local/luajit

2、下载ngx_devel_kit(NDK)模块 :https://github.com/simpl/ngx_devel_kit/tags,不需要安装

  1. wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz
  2. tar xzvf v0.2.19.tar.gz

3、下载最新的 lua-nginx-module 模块

  1. wget https://github.com/openresty/lua-nginx-module/archive/v0.10.2.tar.gz
  2. tar xzvf v0.10.2.tar.gz
  3. #设置环境变量
  4. export LUAJIT_LIB=/usr/local/luajit/lib
  5. export LUAJIT_INC=/usr/local/luajit/include/luajit2.1

4、重新编译 nginx 我这里使用的是 nginx 1.14.1

查看宝塔编译好的nginx加载模块,在重新编译加载云锁防护模块的时候仍需加载这些模块

  1. nginx V

注意这个命令是大写的V,如果小写v是不会显示模块的BT(宝塔面板)6.6nginx自编译 ngx_lua_waf web 应用防火墙模块

./configure arguents:之后的内容复制到记事本备用,比如我的是:

  1. user=www group=www prefix=/www/server/nginx withopenssl=/www/server/nginx/src/openssl addmodule=/www/server/nginx/src/ngx_devel_kit addmodule=/www/server/nginx/src/lua_nginx_module addmodule=/www/server/nginx/src/ngx_cache_purge addmodule=/www/server/nginx/src/nginxstickymodule addmodule=/www/server/nginx/src/nginxhttpconcat withhttp_stub_status_module withhttp_ssl_module withhttp_v2_module withhttp_image_filter_module withhttp_gzip_static_module withhttp_gunzip_module withstream withstream_ssl_module withipv6 withhttp_sub_module withhttp_flv_module withhttp_addition_module withhttp_realip_module withhttp_mp4_module withldopt=-Wl,-E withpcre=pcre8.40 withldopt=-ljemalloc

这里只要是宝塔面板6.6的应都是一样的,不过最好都看下把这一段复制下来。(我的仅供参考,实际以自己的为准)

进入nginx源码目录,对nginx进行重新编译,操作之前请确认自己的nginx是编译模式安装的,而不是宝塔面板的极速安装

  1. cd /www/server/nginx/src

第六、编译内容

  1. ./configure 上一步记事本中的备用内容 –with-ld-opt=”-Wl,-rpath,/root/luajit/lib” –add-module=/root/ngx_devel_kit-0.2.19 –add-module=/root/lua-nginx-module-0.10.2

./configure和记事本复制的内容之间有个空格,后面的–add-module前面也有个空格,比如我的编译命令为:

  1. ./configure –user=www –group=www –prefix=/www/server/nginx withopenssl=/www/server/nginx/src/openssl addmodule=/www/server/nginx/src/ngx_devel_kit addmodule=/www/server/nginx/src/lua_nginx_module addmodule=/www/server/nginx/src/ngx_cache_purge addmodule=/www/server/nginx/src/nginxstickymodule addmodule=/www/server/nginx/src/nginxhttpconcat withhttp_stub_status_module withhttp_ssl_module withhttp_v2_module withhttp_image_filter_module withhttp_gzip_static_module withhttp_gunzip_module withstream withstream_ssl_module withipv6 withhttp_sub_module withhttp_flv_module withhttp_addition_module withhttp_realip_module withhttp_mp4_module withldopt=-Wl,-E withpcre=pcre8.40 withldopt=-ljemalloc withldopt=“-Wl,-rpath,/root/luajit/lib” addmodule=/root/ngx_devel_kit0.2.19 addmodule=/root/luanginxmodule0.10.2

等待命令结束,输入编译命令

  1. make

编译安装过程大概要5分钟左右,还是有点长的。完成后将系统中原有的nginx用重新编译生成的nginx文件替换。

第七、停止nginx

  1. service nginx stop

第八、删除原来的nginx,操作之前请确认自己的nginx已经备份

  1. rm rf /www/server/nginx/sbin/nginx

第九、复制新编译的nginx

  1. cp /www/server/nginx/src/objs/nginx /www/server/nginx/sbin/

第十、启动nginx

  1. service nginx start

BT(宝塔面板)6.6nginx自编译 ngx_lua_waf web 应用防火墙模块

第十一、下载ngx_lua_waf.包

安装好后回到 nginx 目录后,我们下载ngx_lua_waf.包,直接从github拉过来。

  1. cd /www/server/nginx/conf
  2. yum install git y
  3. git clone https://github.com/loveshell/ngx_lua_waf.git
  4. mv ngx_lua_waf waf

第十二、安装部署ngx_lua_waf

在Nginx默认的nginx.conf配置文件http模块里添加如下语句引用ngx_lua_waf模块生效:

  1. lua_package_path “/www/server/nginx/conf/waf/?.lua”;
  2. lua_shared_dict limit 10m;
  3. init_by_lua_file /www/server/nginx/conf/waf/init.lua;
  4. access_by_lua_file /www/server/nginx/conf/waf/waf.lua;

为了确保万一,让Nginx检查以下配置文件语法正确与否是个好习惯:

  1. nginx t

返回如下信息即表明配置文件正确无误。

  1. nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  2. nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

然后修改waf目录config.lua里面的路径,路径一定要改好,不然打开网页会提示500错误。

  1. RulePath = “/www/server/nginx/conf/waf/wafconf/”
  2. attacklog = “on”
  3. logdir = “/www/server/nginx/logs/hack/”

这是宝塔面板的路径!BT(宝塔面板)6.6nginx自编译 ngx_lua_waf web 应用防火墙模块

hack这个文件夹请自己到路径里创建。

第十三、修改ngx_lua_waf配置

可以编辑/www/server/nginx/conf/waf/config.lua来调整ngx_lua_waf的相关配置。

附送ngx_lua_waf 配置文件config.lua中文注释

  1. RulePath = “/www/server/nginx/conf/waf/wafconf/”
  2. –规则存放目录
  3. attacklog = “off”
  4. –是否开启攻击信息记录,需要配置logdir
  5. logdir = “/www/server/nginx/logs/hack/”
  6. log存储目录,该目录需要用户自己新建,需要nginx用户的可写权限,这里是宝塔的创建路径
  7. UrlDeny=“on”
  8. –是否拦截url访问
  9. Redirect=“on”
  10. –是否拦截后重定向
  11. CookieMatch = “on”
  12. –是否拦截cookie攻击
  13. postMatch = “on”
  14. –是否拦截post攻击
  15. whiteModule = “on”
  16. –是否开启URL白名单
  17. black_fileExt={“php”,“jsp”}
  18. –填写可上传文件后缀类型
  19. ipWhitelist={“127.0.0.1”}
  20. ip白名单,多个ip用逗号分隔
  21. ipBlocklist={“1.0.0.1”}
  22. ip黑名单,多个ip用逗号分隔
  23. CCDeny=“on”
  24. –是否开启拦截cc攻击(需要nginx.confhttp段增加lua_shared_dict limit 10m😉
  25. CCrate = “100/60”
  26. –设置cc攻击频率,单位为秒.
  27. –默认1分钟同一个IP只能请求同一个地址100
  28. html=[[Please go away~~]]
  29. –警告内容,可在中括号内自定义

备注:不要乱动双引号,区分大小写

可以把config.lua中的Redirect设置为off,只记录不拦截,观察没有误拦后再开启。

完成自己的需求的配置后,保存退出。重启Nginx后就生效了。

第十四、测试

测试创建个test.php文件,内容为test,直接访问。

http://ceshi.daniao.org/test.php

返回的内容:test

如果在网址是这样的。

http://ceshi.daniao.org/test.php?id=../etc/passwd

我们就会看到拦截内容了,如下图:BT(宝塔面板)6.6nginx自编译 ngx_lua_waf web 应用防火墙模块

第十五、ngx_lua_waf说明

  • 防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击。
  • 防止svn/备份之类文件泄漏。
  • 防止ApacheBench之类压力测试工具的攻击。
  • 屏蔽常见的扫描黑客工具,扫描器。
  • 屏蔽异常的网络请求。
  • 屏蔽图片附件类目录php执行权限。
  • 防止webshell上传

第十六、总结

宝塔面板nginx编译ngx_lua_waf web 应用防火墙模块的教程就说完了,门槛稍微有点高啊,大家要看仔细,就目前的互联网安全形势给站点添加一个 WAF 可以说是个标配了,可惜很多新手站长们都给忽略了,所以说给服务器部署ngx_lua_waf web绝对是个应对网站安全的好习惯!

转载请注明:VPS驿站 » BT(宝塔面板)6.6nginx自编译 ngx_lua_waf web 应用防火墙模块

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址