Linux Nginx(云服务器自带或yum安装,无编译文件(configure)添加模块,为Nginx添加ngx_lua_waf防护

时间:2024-05-19 20:03:45

  当我们使用的是购买的云服务器时,上面有时会自带Nginx服务,或者项目中我们为图方便,使用yum安装Nginx服务,使用起来快捷方便。当我们需要为Nginx新增模块时,就遇到了麻烦,以笔者遇到的问题为例- 本人使用的是云服务器,上面有yum安装好的Nginx-1.12.2,当前的项目需要防止CC攻击,遂决定为Nginx添加ngx_lua_waf防护,添加此防护需要为Nginx添加lua模块,为Nginx添加模块需要重新编译Nginx,找不到configure无法编译。

  解决办法: 

  1.查看Nginx版本及已有模块,nginx -V

    Linux Nginx(云服务器自带或yum安装,无编译文件(configure)添加模块,为Nginx添加ngx_lua_waf防护

  2.下载解压和yum安装的Nginx同版本Nginx文件,wget http://nginx.org/download/nginx-1.12.2.tar.gz,tar xzvf nginx-1.12.2.tar.gz

  3.下载需要加载的模块:

    1)下载解压ngx_devel_kit,wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz,tar xzvf v0.3.0.tar.gz

    2)下载解压lua-nginx-module,wget https://github.com/openresty/lua-nginx-module/archive/v0.10.11.tar.gz,tar xzvf v0.10.11.tar.gz

    3)下载加压编译安装luajit,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

      3-1)设置环境变量,vim /etc/profile,source /etc/profile

      Linux Nginx(云服务器自带或yum安装,无编译文件(configure)添加模块,为Nginx添加ngx_lua_waf防护

  4.重新编译Nginx,此处需要注意,编译的时候之前Nginx所有的模块也需要写在编译命令中,不然会丢失之前的模块,编译的时候,根据第1步查到已有的模块,加上本次需新增的模块即可--add-module,注意模块所在位置根据你下载解压的位置填写,到下载解压的Nginx文件下:

      Linux Nginx(云服务器自带或yum安装,无编译文件(configure)添加模块,为Nginx添加ngx_lua_waf防护

    1),编译过程中可能会报错缺少依赖,根据报错依次添加相应依赖即可:

      1-1),错误:./configure: error: the invalid value in --with-ld-opt="-Wl,-rpath,/usr/local/lib",解决:yum -y install redhat-rpm-config.noarch

      1-2),错误:./configure: error: the HTTP rewrite module requires the PCRE library,解决: yum -y install pcre pcre-devel

      1-3),错误:./configure: error: SSL modules require the OpenSSL library,解决:yum -y install openssl openssl-devel

      1-4),错误:./configure: error: the HTTP XSLT module requires the libxml2/libxslt,解决:yum -y install libxml2 libxml2-dev libxslt-devel

      1-5),错误:./configure: error: the HTTP image filter module requires the GD library,解决:yum -y install gd-devel

      1-6),错误:./configure: error: perl module ExtUtils::Embed is required,解决:yum -y install perl-devel perl-ExtUtils-Embed

      1-7),错误:./configure: error: the GeoIP module requires the GeoIP library,解决:yum -y install GeoIP GeoIP-devel GeoIP-data

      1-8),错误:./configure: error: the Google perftools module requires the Google perftools,解决:yum install gperftools-devel

    2)编译完成接着执行make,注意不要make完不要make install。编译完成后回再当前Nginx目录下objs文件下出现nginx可执行文件。

  5.替换Nginx可执行文件,可以先保存一份之前,防止错误无法恢复。mv /usr/sbin/nginx /usr/sbin/nginx.bak,cp objs/nginx /usr/sbin/,此时新模块就加载完了。

  6.下载ngx_lua_waf,配置Nginxwaf防护相关,wget https://github.com/loveshell/ngx_lua_waf/archive/v0.7.2.tar.gz,tar xzvf v0.7.2.tar.gz,mv ngx_lua_waf-0.7.2/ waf, vim waf/config.lua编辑防护配置。

  --规则存放目录
  RulePath = "/etc/nginx/waf/wafconf/"
  --是否开启攻击信息记录,需要配置logdir
  attacklog = "on"
  --log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限
  logdir = "/var/log/nginx/waflog/"
  --是否拦截url访问(如果你用了phpmyadmin,开启此项会有问题)
  UrlDeny="on"
  --是否拦截后重定向
  Redirect="on"
  --是否拦截cookie攻击
  CookieMatch="on"
  --是否拦截post攻击(可能会导致上传功能异常)
  postMatch="on" 
  --是否开启URL白名单
  whiteModule="on" 
  --填写不允许上传文件后缀类型
  black_fileExt={"php"}
  --ip白名单,多个ip用逗号分隔
  ipWhitelist={"127.0.0.1"}
  --ip黑名单,多个ip用逗号分隔
  ipBlocklist={}
  --是否开启拦截cc攻击
  CCDeny="on"
  --设置cc攻击频率,单位为秒.默认1分钟同一个IP只能请求同一个地址100次
  CCrate="100/60"
  --警告内容,可在中括号内自定义 备注:不要乱动双引号,区分大小写
  html=[[

  7.在nginx.conf的http字段内添加以下内容,启动Nginx,即开启防护.

    lua_package_path "/etc/nginx/waf/?.lua";
    lua_shared_dict limit 10m;
    init_by_lua_file /etc/nginx/waf/init.lua;
    access_by_lua_file /etc/nginx/waf/waf.lua;

8.service nginx start

 

本文参考文章:https://yq.aliyun.com/articles/561967?spm=a2c41.11181499.0.0