基于lua-nginx-module(openresty)的WEB应用防火墙

2023-11-07

独乐乐,不如众乐乐,分享给大家一篇WEB应用防火墙的文章,基于Lua+ Nginx实现。以下是ngx_lua_waf的作者全文输出。 

Github地址:https://github.com/loveshell/ngx_lua_waf

ngx_lua_waf

ngx_lua_waf是我刚入职趣游时候开发的一个基于ngx_lua的web应用防火墙。

代码很简单,开发初衷主要是使用简单,高性能和轻量级。

现在开源出来,遵从MIT许可协议。其中包含我们的过滤规则。如果大家有什么建议和想fa,欢迎和我一起完善。

用途:

防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等

web攻击 防止svn/备份之类文件泄漏 

防止ApacheBench之类压力测试工具的攻击 

屏蔽常见的扫描黑客工具,扫描器 

屏蔽异常的网络请求 

屏蔽图片附件类目录php执行权限 

防止webshell上传

推荐安装:

推荐使用lujit2.1做lua支持

ngx_lua如果是0.9.2以上版本,建议正则过滤函数改为ngx.re.find,匹配效率会提高三倍左右。

使用说明:

nginx安装路径假设为:/usr/local/nginx/conf/

把ngxluawaf下载到conf目录下,解压命名为waf

在nginx.conf的http段添加

 
 
  1. lua_package_path "/usr/local/nginx/conf/waf/?.lua";

  2. lua_shared_dict limit 10m;

  3. init_by_lua_file  /usr/local/nginx/conf/waf/init.lua;

  4. access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;

配置config.lua里的waf规则目录(一般在waf/conf/目录下)

 
 
  1. RulePath = "/usr/local/nginx/conf/waf/wafconf/"

绝对路径如有变动,需对应修改

然后重启nginx即可

配置文件详细说明:

 
 
  1. RulePath = "/usr/local/nginx/conf/waf/wafconf/"

  2. --规则存放目录

  3. attacklog = "off"

  4. --是否开启攻击信息记录,需要配置logdir

  5. logdir = "/usr/local/nginx/logs/hack/"

  6. --log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限

  7. UrlDeny="on"

  8. --是否拦截url访问

  9. Redirect="on"

  10. --是否拦截后重定向

  11. CookieMatch = "on"

  12. --是否拦截cookie攻击

  13. postMatch = "on"

  14. --是否拦截post攻击

  15. whiteModule = "on"

  16. --是否开启URL白名单

  17. black_fileExt={"php","jsp"}

  18. --填写不允许上传文件后缀类型

  19. ipWhitelist={"127.0.0.1"}

  20. --ip白名单,多个ip用逗号分隔

  21. ipBlocklist={"1.0.0.1"}

  22. --ip黑名单,多个ip用逗号分隔

  23. CCDeny="on"

  24. --是否开启拦截cc攻击(需要nginx.confhttp段增加lua_shared_dict limit 10m;)

  25. CCrate = "100/60"

  26. --设置cc攻击频率,单位为秒.

  27. --默认1分钟同一个IP只能请求同一个地址100

  28. html=[[Please go away~~]]

  29. --警告内容,可在中括号内自定义

  30. 备注:不要乱动双引号,区分大小写

检查规则是否生效

部署完毕可以尝试如下命令:

 
 
  1. curl http://xxxx/test.php?id=../etc/passwd

  2. 返回"Please go away~~"字样,说明规则生效。

注意:默认,本机在白名单不过滤,可自行调整config.lua配置

效果图如下:

规则更新:

考虑到正则的缓存问题,动态规则会影响性能,所以暂没用共享内存字典和redis之类东西做动态管理。

规则更新可以把规则文件放置到其他服务器,通过crontab任务定时下载来更新规则,nginx reload即可生效。以保障ngx_lua_waf的高性能。

只记录过滤日志,不开启过滤,在代码里在check前面加上--注释即可,如果需要过滤,反之

一些说明:

过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割

 
 
  1. args里面的规则get参数进行过滤的

  2. url是只在get请求url过滤的规则    

  3. post是只在post请求过滤的规则      

  4. whitelist是白名单,里面的url匹配到不做过滤    

  5. user-agent是对user-agent的过滤规则

默认开启了get和post过滤,需要开启cookie过滤的,编辑waf.lua取消部分--注释即可,日志文件名称格式如下:虚拟主机名_sec.log


附:笔者已在测试环境测试,你如果有兴趣的话也可以试用一下,这只是WEB应用防火墙的一个开源实现,还有实现方案仅可应用于实战中,如果你还不了解WAF的话,建议去google下,必有不小的收获。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于lua-nginx-module(openresty)的WEB应用防火墙 的相关文章

  • 基于lua-nginx-module(openresty)的WEB应用防火墙

    独乐乐 不如众乐乐 分享给大家一篇WEB应用防火墙的文章 基于Lua Nginx实现 以下是ngx lua waf的作者全文输出 Github地址 https github com loveshell ngx lua waf ngx lua
  • eclipse中注释模板的修改

    window gt preferences gt java gt code style gt code template gt comments code 手机扫一扫 关注程序员技能成长
  • 点评10款Github上最火爆的国产开源项目

    衡量一个开源产品好不好 看看产品在Github的Star数量就知道了 由此可见 Github已经沦落为开源产品的 大众点评 了 一个开源产品希望快速的被开发者知道 快速的获取反馈 放到Github上面就可以了 AD WOT2015 互联网运
  • 为近期招聘.Net开发组长编写的面试题

    1 谈谈ASP Net中GridView控件和Repeater控件有什么异同 它们之间各有什么优势 2 请编程遍历页面上所有TextBox控件并给它赋值为空字符串 3 利用正则表达式编写一个邮箱验证函数 4 谈谈对C 关键字Volatile
  • web基础(二)---------列表、表格、表单

    目录 一 前言 二 正文 1 列表 1 无序列表 2 有序列表 3 自定义标签 2 表格 3 表单 1 input 根据type属性不同 展示不同效果 2 input 占位符 提示信息 3 表单域 划分提交 重置的作用域 form 4 普通
  • 开源项目-CRM客户关系管理系统

    哈喽 大家好 今天给大家带来一个开源系统 CRM客户关系管理系统 主要功能包括客户管理 客户流失 销售机会 客户关怀等模块 系统开发环境以及版本 操作系统 Windows 7 集成开发工具 Eclipse EE 4 7 编译环境 JDK 1
  • d3.js 小结

    D3 数据可视化库 D3 4 0 D3是目前最流行的JavaScript可视化图表库之一 D3的图表类型非常丰富 并且支持SVG格式 因此应用十分广泛 也有很多图表插件基于D3开发 比如MetricsGraphics js 在D3上构建的数
  • 20个最炫HTML5,jQuery和CSS3下拉菜单制作教程(附示例/源码)

    3 Level Navigation Menu 三级导航菜单 独具特色的导航菜单 包含CSS3渐变 多个子菜单和jQuery动画 CSS3 Minimalistic Navigation Menu 一个简单的CSS3动画导航菜单 SLIDE
  • 狂神说 Docker笔记

    Docker概述 Docker为什么出现 Docker的思想来自于集装箱 JRE 多个应用 端口冲突 原来都是交叉的 隔离 Docker核心思想 打包装箱 每个箱子是互相隔离的 Docker通过隔离机制 可以将服务器利用到极致 Docker
  • iframe加载页面,onload函数不执行的问题

    前一阵子 做了个小工具 其中用到了一个隐藏的iframe结果出现了一个奇怪的现象 iframe加载的页面本来有一个onload来进行初始化的 结果这个onload函数指定的初始化代码并没有被执行 同时使用document getElemen
  • 软件工程学习过程中工具、资料汇总与心得

    因为在上了半年课以后 发现学的课程太杂 要的工具太多 回顾当初找工具找到病毒工具的苦不堪言的黑历史 在此整理学习用到的所有工具 保持更新 因为文件已经被别人上传了 还要积分什么鬼的 信息化时代共享不好嘛 因此将文件均上传至百度网盘 下载缓慢
  • Unable to load configuration的解决方法

    最近在学Struts2 5 5 因为喜欢用最新的 并且之前没有学习过的经验 就按照一个网上的博客跟着做一个小实例 里面说直接用 Struts2 5 5中自带例子的struts xml文件 结果我就用了 然后写了一个小程序就一直报 Unabl
  • 对12306新验证码的简单破解

    12306的验证码又换了 变成了类似找你妹的找图游戏了 由于在另一博客发过了 这里贴个地址过来 http www cnblogs com gsls200808 p 4341599 html 后记 在网站更新验证码的第二天 有人在知乎上问了
  • 谷歌开源项目Chromium的源码获取与项目构建(Win7+vs10/vs13)

    从12年那会儿开始获取源码和构建chromium项目都是按照那时候的官方要求用win7 vs2010 相对来说也比较简单 按照步骤来也很快能编译出来 1 官网的编译配置介绍 http www chromium org developers
  • 负载均衡原理分析与源码解读

    上一篇文章一起学习了Resolver的原理和源码分析 本篇继续和大家一起学习下和Resolver关系密切的Balancer的相关内容 这里说的负载均衡主要指数据中心内的负载均衡 即RPC间的负载均衡 传送门 服务发现原理分析与源码解读 基于
  • Python爬虫实现抓取腾讯视频所有电影-源码【实战必学】

    用python实现的抓取腾讯视频所有电影的爬虫 1 coding utf 8 2 import re 3 import urllib2 4 from bs4 import BeautifulSoup 5 import string time
  • 在前端页面下拉框动态显示数据库查询出来的结果,供客户勾选,限制客户自建字段(java版)

    最终效果 案例 前端代码 首先引入标签库jar和html代码 div class form group div
  • Jquery ligerui下拉框复选,使下拉框中相应值对勾选中

    othertypeCombox ligerGetComboBoxManager selectValue 1 2 3 4 othertypeCombox ligerGetComboBoxManager bulidContent 必须加上后一行
  • AWS-WAF-CDN基于速率rate的永久黑名单方案(基于lambda实现)

    参考方案 有坑 所以产生了这篇博客 点击跳转 1 部署waf 有则跳过 必须存在一个rate速率规则 后面的方案堆栈要用 新建rate速率规则 关联cdn资源 2 部署堆栈 美国东部 弗吉尼亚北部 us east 1 1 堆栈文件获取方式
  • 终止管道中的上一个命令

    我正在运行这样的模拟 waf run scratch myfile awk f filter awk 我怎样才能杀死waf命令尽快filter awk检测到发生了某些事情 例如 在读取特定行之后 我无法改变waf or myfile 我只能

随机推荐

  • k8s——kubectl

    目录 一 k8s管理操作方法 二 陈述式资源管理方法 1 基本信息查看 1 1 查看k8s版本信息 1 2 查看资源对象简写 1 3 查看集群信息 1 4 配置kubectl自动补全 1 5 node节点查看日志 2 基本信息查看 2 1
  • 大数据高频面试题【目录】

    大数据高频面试题 目录 小标题既超链接 点击可直接跳转 手写代码 Linux Shell Hadoop Flume Kafka Hive HBase Sqoop Scala Spark 项目中的常见问题 JavaSE Redis MySQL
  • LM393 电压比较器及其典型电路介绍

    这几天都在看一些开源项目 好多代码都没有什么注释 看烦了 看看小芯片吧 LM393 主要用途 限幅器 脉冲发生器 方波发生器 延时发生器 数字逻辑门电路 多频振荡器等等 引脚分布图 等效电路图 同相端电压大于反向端电压时 输出高电平 同相端
  • 【python】使用matplotlib绘制柱状图

    在制作图标时需要绘制柱状图 下面对其进行了绘制 主要就是使用matplotlib的bar函数 bar函数官方API为 matplotlib pyplot bar 下面是从一篇论文中随意截取的一段话 进行后续的绘制图像 import matp
  • 服务器故障排查方法总结

    服务器故障排查方法总结 问题描述 查找步骤 1 查找top检查服务器负载是否有问题 2 在服务器中查看网站的访问记录 3 这个时候先对数据库进行重启 对apache进行重启 4 查找数据库错误日志 问题描述 每当出现网站访问不了的时候 估计
  • Java list修改某个元素值的方法

    修改list中下标为index对象的值 set index element 增添 add index element
  • 在Android上修改读取IMEI码的方法

    我们知道 如果是移动设备 厂家都提供了IMEI码写入及读出的方法 但由于我们的是非移动设备 可是我们也需要写入IMEI码 供第三方的软件读取 如正版地图等 我们找到frameworks base telephony java android
  • selenium 隐式等待如何使用_selenium 中使用等待的三种方法

    现在很多的 web 网站使用 AJAX 技术 当页面加载到浏览器 这个页面的很多元素显示出来的可能不一致 如果一个元素还未加载出来 在定位的时候 就会抛出异常 ElementNotVisibleException 这个时候就要使用等待方法解
  • 【转】latex常见错误对照表

    原文链接 http www cs utexas edu witchel errorclasses html Latex Error Classes Ambiguous Errors This is a list of error class
  • 【低功耗蓝牙】① 蓝牙广播数据格式分析

    摘要 本文章主要讲解了蓝牙的发展史 蓝牙信号 蓝牙广播数据的格式 最后使用ESP32芯片MicroPython固件给出了蓝牙广播的具体代码 是蓝牙初学者很好的参考资料 也可以参考下我在B站的蓝牙视频教程 ESP32教程 第二章 低功耗蓝牙B
  • 创建多个线程、数据共享问题分析与案例代码

    创建多个线程 数据共享问题分析与案例代码 创建和等待多个线程 在实际的工作中 可能要创建的线程不止一个 也许有多个 所以 这里展示一下创建多个线程的一种写法 大家可以举一反三 在lesson4 cpp的上面位置 书写线程入口函数 mypri
  • Python框架区别是什么?比较常用的框架有哪些?

    前言 本文的文字及图片来源于网络 仅供学习 交流使用 不具有任何商业用途 版权归原作者所有 如有问题请及时联系我们以作处理 众所周知 Python开发框架大大减少了开发者不必要的重复劳动 提高了项目开发效率的同时 还使得创建的程序更加稳定
  • webpack原理

    1 webpack核心概念 entry 一个可执行模块或库的入口文件 chunk 多个文件组成的一个代码块 例如把一个可执行模块和它所有依赖的模块组合和一个 chunk 这体现了webpack的打包机制 loader 文件转换器 例如把es
  • 海康网络摄像机与电脑交互,有网络和无网络两种方式读取URL视频流,以及无网络情况下配置IP地址

    目录 1 准备工具 2 通过WiFi的接口连接 3 无网络情况下进行交互 4 海康官方软件 5 RTSP视频流 a RTSP b 视频流 c rtsp流地址 1 准备工具 电脑 台式或笔记本 网线 普通网线即可 POE海康网络摄像机 不需要
  • Nerf如何制作自己的llff数据集

    Nerf三维重建使用Pycharm运行自己的数据集 20230427更新 Nerf代码讲解 从零简单复现论文代码 Nerf环境配置教程 你好 这里是 出门吃三碗饭 本人 本文章接下来将介绍自己制作Nerf数据集 让你自己动手渲染第一个三维模
  • PyCharm 代码调试教程

    目录 一 图文教程 二 调试相关的快捷键 调试的过程分为三步 第一步 在你想要调试的地方 打上断点 第二步 使用调试模式来运行这个 python 程序 第三步 使用各种手段开始代码调试 一 图文教程 1 首先第一步和第二步 我用下面这张图表
  • Spring Cloud Config 实现配置中心,看这一篇就够了

    Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心 虽然后来又发布了 Consul 可以代替配置中心功能 但是 Config 依然适用于 Spring Cloud 项目 通过简单的配置即可实现功能 配
  • ArcGIS:如何添加字段、属性表的连接、字段的计算?

    目录 01 加载原始数据 02 加载的数据分析与处理 2 1 查看tracts要素的属性表 2 2 为tracts要素的属性表添加 人口密度 字段 03 与tract pop属性表进行连接 3 1 为什么要连接 3 2 连接有什么需要注意的
  • vue 导出 导入

    vue 导出 方法一 1 util自带工具包 Export2Excel js 2 引用 import export json to excel from utils Export2Excel 3 导出方法 formatJson filter
  • 基于lua-nginx-module(openresty)的WEB应用防火墙

    独乐乐 不如众乐乐 分享给大家一篇WEB应用防火墙的文章 基于Lua Nginx实现 以下是ngx lua waf的作者全文输出 Github地址 https github com loveshell ngx lua waf ngx lua