部署nginx_lua_waf记录

2018-08-08 11:05:42 浏览数 (1)

通过部署nginx_lua_waf,具有使用简单、高性能、轻量级的优势,能够有效的防范sql注入、文件包含、XSS、fuzzing等web攻击,屏蔽异常的网络请求,防止webshell上传,相比于安全狗等商业版WAF,能够根据实际需求调整过滤规则,编辑符合企业自身业务需求的过滤规则。

实验安装环境:Redhat 6.2和7.3

手动安装nginx_lua_waf

安装依赖包
代码语言:javascript复制
yum install -y zlib zlib-devel readline-devel pcre pcre-devel openssl-devel gcc
openresty安装方式nginx和lua环境

添加openresty的yum源:

代码语言:javascript复制
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

vim编辑openresty.repo,将$releaserver和$basearch替换为6和x86_64:

代码语言:javascript复制
sed -i ‘s/$releaserver/6/g’ /etc/yum.repos.d/openresty.repo
sed -i ‘s/$basearch/x86_64/g’ /etc/yum.repos.d/openresty.repo

yum安装openresty:

代码语言:javascript复制
yum install openresty -y
yum install openresty-resty -y

列出所有openresty仓库的所有软件安装包:

代码语言:javascript复制
yum --disablerepo="*" --enablerepo="openresty" list available

可安装的软件包:

代码语言:javascript复制
openresty-asan.x86_64                                                                                        
openresty-asan-debuginfo.x86_64                                                                              
openresty-debug.x86_64                                                                                       
openresty-debug-debuginfo.x86_64                                                                             
openresty-debuginfo.x86_64                                                                                   
openresty-doc.noarch                                                                                         
openresty-openssl-asan.x86_64                                                                                
openresty-openssl-asan-debuginfo.x86_64                                                                      
openresty-openssl-asan-devel.x86_64                                                                          
openresty-openssl-debug.x86_64                                                                               
openresty-openssl-debug-debuginfo.x86_64                                                                     
openresty-openssl-debug-devel.x86_64                                                                         
openresty-openssl-debuginfo.x86_64                                                                           
openresty-openssl-devel.x86_64                                                                               
openresty-opm.noarch                                                                                         
openresty-pcre-asan.x86_64                                                                                   
openresty-pcre-asan-debuginfo.x86_64                                                                         
openresty-pcre-asan-devel.x86_64                                                                             
openresty-pcre-debuginfo.x86_64                                                                              
openresty-pcre-devel.x86_64                                                                                  
openresty-valgrind.x86_64                                                                                    
openresty-valgrind-debuginfo.x86_64                                                                          
openresty-zlib-asan.x86_64                                                                                   
openresty-zlib-asan-debuginfo.x86_64                                                                         
openresty-zlib-asan-devel.x86_64                                                                             
openresty-zlib-debuginfo.x86_64                                                                              
openresty-zlib-devel.x86_64                                                                                  
perl-Lemplate.noarch                                                                                         
perl-Spiffy.noarch                                                                                           
perl-Test-Base.noarch                                                                                        
perl-Test-LongString.noarch                                                                         
perl-Test-Nginx.noarch

需要安装仓库内的软件包,直接用yum即可。

yum 安装openresty默认安装在/usr/local/openresty,若需要自定义安装目录可以采用源码安装方式指定安装目录。如:

代码语言:javascript复制
./configure --prefix=/opt/openresty --with-luajit --without-http_redis2_module --with-http_iconv_module --with-http_postgres_module

配置nginx文件,修改网页开放端口为8090或其他端口:

代码语言:javascript复制
vim /usr/local/openresty/nginx/conf/nginx.conf

编辑防火墙配置,添加允许对8090端口的访问的规则:

代码语言:javascript复制
vim /etc/sysconfig/iptables

启动nginx:

代码语言:javascript复制
/usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf

代码语言:javascript复制
nginx -p /usr/local/openresty/nginx/ -c /usr/local/openresty/nginx/conf/nginx.conf

或进入nginx安装目录,执行:

代码语言:javascript复制
nginx -p `pwd`/ -c conf/nginx.conf

如果启动有如下提示,则说明端口被占用或nginx已经启动:

ps查看nginx开启的进程:

浏览器访问8090端口,页面正常则说明openresty部署成功:

下载配置waf

下载ngx_lua_waf到nginx的conf目录下,https://github.com/loveshell/ngx_lua_waf 用wget下载zip格式解压或者用git clone下载

git clone下载提示如下:

查看/usr/libexec/git-core下是否存在git-remote-https,若无,则需重新安装git,若有,下一步将/usr/libexec/git-core添加到PATH里面:

下载完成:

下载完的文件内容

在nginx.conf中的http段配置:

代码语言:javascript复制
lua_package_path "/usr/local/openresty/nginx/conf/ngx_lua_waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /usr/local/openresty/nginx/conf/ngx_lua_waf/init.lua;
access_by_lua_file /usr/local/openresty/nginx/conf/ngx_lua_waf/waf.lua;

修改ngx_lua_waf下的config.lua:

代码语言:javascript复制
RulePath = "/usr/local/openresty/nginx/conf/ngx_lua_waf/wafconf"
attacklog = "on"
logdir = "/usr/local/nginx/logs/waf"

注意:logdir目录下的日志记录文件需要手动创建,并修改所属权限保证日志能够正常写入,然而修改权限,Linux的还是不能写入,但Windows的可以,是因为openresty默认安装时,nginx未指定所属用户,启动应用以后进程的user是nobody。

解决办法:将nginx.conf首行的”# user nobody;”的”#”注释去掉,重新启动nginx服务,然后将防护日志目录所属user和group修改为nobody,目录权限可设为700也可以写入。关键点在于,防护日志的所属user和group需要设置为nginx的运行user,比如nginx.conf首行为user nginx,防护日志目录所属user和group须为nginx:

配置完成以后重启nginx,测试生效:

利用脚本安装nginx_lua_waf

下载https://github.com/loveshell/ngx_lua_waf,可以看到下载到的文件中有一个install.sh,可以直接通过脚本安装环境进行部署,但因安装的组件版本比较旧,可以通过修改下载的安装包完成安装。

下载最新的lua-nginx-module,此部分必须更新版本,作者下载的版本不支持最新版本的nginx,不更新安装过程中会出错

因准备环境时已经安装pcre,所以注释掉该安装部分

安装最新版本的nginx,设置user和group为nginx

下载waf,配置过滤日志文件,根据脚本,将日志目录修改为775权限,或者700都可以.

确保selinux处于关闭状态

修改防护日志目录所属user和group

代码语言:javascript复制
chown -R nginx.nginx /data/logs/waf

启动nginx以后,可以看到进程的user为nginx:

测试成功写入日志:

参考

代码语言:javascript复制
https://openresty.org/cn/linux-packages.html

https://github.com/loveshell/ngx_lua_waf

感谢悬镜安全给予的帮助,解答了防护日志写入的问题。

0 人点赞