前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于ngx_lua_waf安装网站防护

基于ngx_lua_waf安装网站防护

作者头像
叔牙
发布2024-05-21 20:23:30
890
发布2024-05-21 20:23:30
举报

一、概述

ngx_lua_waf是一个基于ngx_lua开源强大的Web应用轻量级防火墙,它可以帮助我们提高网站的安全性和防护能力。通过安装和配置ngx_lua_waf,我们可以轻松地定制安全规则,实现灵活的安全防护。同时,WAF的实时日志记录和报警功能可以帮助我们及时发现和处理安全问题。

二、安装与使用

ngx_lua_waf使用需要基于openresty,传统的nginx对模块扩展能力支持比较弱。

1.安装openresty

建议基于源码安装(如果需要新的模块,直接重新编译即可)。

安装相关依赖:

代码语言:javascript
复制
yum install pcre-devel openssl-devel gcc curl libmaxminddb-devel -y

编译安装openresty:

代码语言:javascript
复制
mkdir -p /opt/tools/openresty
cd /opt/tools/openresty/
wget https://openresty.org/download/openresty-1.21.4.1.tar.gz
tar -xzvf openresty-1.21.4.1.tar.gz
cd openresty-1.21.4.1/
sudo ./configure
sudo make
sudo make install


useradd -m nginx
sudo usermod -a -G root nginx

配置openresty环境变量,这样就不用到sbin目录执行命令了.

代码语言:javascript
复制
vim /etc/profile


export PATH=/usr/local/openresty/nginx/sbin:$PATH
# wq保存
source /etc/profile
nginx -V
nginx -t

启动openresty:

代码语言:javascript
复制
nginx
2.安装配置ngx_lua_waf

安装依赖和编译工具:

代码语言:javascript
复制
yum install epel-release -y
yum group install "Development Tools" -y 

下载ngx_lua_waf:

代码语言:javascript
复制
cd /usr/local/openresty/nginx/conf
git clone https://github.com/loveshell/ngx_lua_waf.git
mv ngx_lua_waf/ waf/ 

在openresty的主配置文件nginx.conf的http模块添加如下配置:

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

这里需要注意的是,如果有多个lua_package_path路径,不能写多个,否则会报错lua_package_path路径重复,需要用;;隔开:

代码语言:javascript
复制
lua_package_path  "/usr/local/openresty/lualib/?.lua;;/usr/local/openresty/nginx/conf/waf/?.lua;;";

修改ngx_lua_waf的配置文件:

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


# 规则文件路径
RulePath = "/usr/local/openresty/nginx/conf/waf/wafconf/" 
# 启用日志
attacklog = "on"     
# 防护记录日志目录
logdir = "/usr/local/openresty/nginx/logs/hack/" 
#开启拦截 cc 攻击
CCDeny="on"
#默认 1 分钟同一个 IP 只能请求同一个地址 100 次
CCrate="100/60"

创建日志目录:

代码语言:javascript
复制
mkdir -p /usr/local/openresty/nginx/logs/hack/

使用nginx -t检查配置后的语法是否正确:

配置文件没有问题,如果openresty没有启动则直接启动,如果已经启动过,则需要重新加载配置:

代码语言:javascript
复制
#未启动
nginx


#已启动,重新加载配置
nginx -s reload

这样openresty与ngx_lua_waf已经配置集成完成了,随便找个路径访问可以看到如下openresty的欢迎页面:

三、验证WAF能力

1.目录遍历攻击

访问http://站点域名/test.php?id=../etc/passwd

该请求被ngx_lua_waf拦截。

2.sql注入攻击

访问http://站点域名/index.html?id=1%20union/!/!select%201,2,3*/

请求也被ngx_lua_waf拦截到。

3.ApacheBench压力测试

使用ab命令模拟压力测试站点:

代码语言:javascript
复制
ab -n 10000 -c 100 http://站点域名/index.html

模拟100个并发请求10000次,看到如下执行结果:

可以看到大部分ab请求被拦截了。在logs/hack路径可以看到如下拦截日志:

ab压力测试的请求也被ngx_lua_waf成功拦截了。

至于其他攻击请求的拦截,这里就不做验证了,感兴趣的话可以自己研究。

四、总结

从官方文档可以看到ngx_lua_waf提供了以下防护能力:

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

ngx_lua_waf是一个比较轻量级的,简单易用的WAF防护工具,提供了相对比较丰富的防护能力,不过相比于商用的防护工具和防护方案,整体表现只能说还算不错,如下从安全内参拿到一份各个开源WAF工具的测试报告,这里只列一下ngx_lua_waf的表现。

总样本数量: 33669 成功: 33669 错误: 0

检出率: 37.04%

误报率: 69.04%

准确率: 97.51%

90%平均耗时: 0.41毫秒

99%平均耗时: 0.49毫秒

整体来看,对于相对比较简单的场景,ngx_lua_waf是一个比较不错的防护方案选择。

五、参考

https://github.com/loveshell/ngx_lua_waf

https://www.cnblogs.com/Hi-blog/p/ngx_lua_waf-with-openresty.html

https://www.secrss.com/articles/56766

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

本文分享自 PersistentCoder 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、安装与使用
    • 1.安装openresty
      • 2.安装配置ngx_lua_waf
      • 三、验证WAF能力
        • 1.目录遍历攻击
          • 2.sql注入攻击
            • 3.ApacheBench压力测试
            • 四、总结
            • 五、参考
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档