当我们使用的是购买的云服务器时,上面有时会自带Nginx服务,或者项目中我们为图方便,使用yum安装Nginx服务,使用起来快捷方便。当我们需要为Nginx新增模块时,就遇到了麻烦,以笔者遇到的问题为例- 本人使用的是云服务器,上面有yum安装好的Nginx-1.12.2,当前的项目需要防止CC攻击,遂决定为Nginx添加ngx_lua_waf防护,添加此防护需要为Nginx添加lua模块,为Nginx添加模块需要重新编译Nginx,找不到configure无法编译。
解决办法:
1.查看Nginx版本及已有模块,nginx -V
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
4.重新编译Nginx,此处需要注意,编译的时候之前Nginx所有的模块也需要写在编译命令中,不然会丢失之前的模块,编译的时候,根据第1步查到已有的模块,加上本次需新增的模块即可--add-module,注意模块所在位置根据你下载解压的位置填写,到下载解压的Nginx文件下:
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