前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >部署nginx_lua_waf记录

部署nginx_lua_waf记录

作者头像
信安之路
发布2018-08-08 11:05:42
9700
发布2018-08-08 11:05:42
举报
文章被收录于专栏:信安之路信安之路

通过部署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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 手动安装nginx_lua_waf
    • 安装依赖包
      • openresty安装方式nginx和lua环境
      • 下载配置waf
      • 利用脚本安装nginx_lua_waf
      • 参考
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档