nginx + lua 构建网站防护waf(一)

2023-11-08

最近在帮朋友维护一个站点。这个站点是一个Php网站。坑爹的是用IIS做代理。出了无数问题之后忍无可忍终于要我帮他切换到nginx上面,前期被不断的扫描和CC。最后找到了waf这样一个解决方案缓解一下。话不多说直接开始。


waf的作用:

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

nginx 的话我选择春哥开源的:OpenResty一个伟大的项目。


好了步骤开始:


1、安装Luagit:

# wget http://luajit.org/download/LuaJIT-2.1.0-beta1.tar.gz

# tar -xvf LuaJIT-2.1.0-beta1.tar.gz

# cd LuaJIT-2.1.0-beta1

# make

# make install

#ln -sf luajit-2.1.0-beta1 /usr/local/bin/luajit


2、安装openresty:

 ./configure --prefix=/opt/openresty   --with-luajit     --without-http_redis2_module       --with-http_iconv_module

gmake

gmake install


3、测试openresty:

[root@www ngx_lua_waf]# cd /opt/openresty/nginx/conf/

[root@www conf]# cat nginx.conf

http {

    server { 

        listen 80;

        location / {

                 default_type text/html;

              content_by_lua_block {

                  ngx.say("HelloWorld")

                            }

                 }

     }

}

###

测试一下访问是否输出hello world,后面应该会有一些列的简介。

[root@www conf]# curl localhost

HelloWorld


4、下载开源项目:

[root@www nginx]# cd /opt/openresty/nginx/

[root@www nginx]# git clone https://github.com/loveshell/ngx_lua_waf.git


5、然后修改nginx添加配置,支持lua脚本地址,在http段位置:

lua_package_path "/opt/openresty/nginx/ngx_lua_waf/?.lua";  ###相关项目存放地址

lua_shared_dict limit 10m;                       ###存放limit表的大小

init_by_lua_file  /opt/openresty/nginx/ngx_lua_waf/init.lua; ###相应地址

access_by_lua_file /opt/openresty/nginx/ngx_lua_waf/waf.lua; ##相应地址


6、修改ngx_lua_waf相关配置:

[root@www ngx_lua_waf]# vim config.lua 

RulePath = "/opt/openresty/nginx/ngx_lua_waf/wafconf/"   ##指定相应位置

attacklog = "on"                            ##开启日志

logdir = "/opt/openresty/nginx/logs/hack/"           ##日志存放位置

UrlDeny="on"                              ##是否开启URL防护

Redirect="on"                             ##地址重定向

CookieMatch="on"                           ##cookie拦截

postMatch="on"                            ##post拦截

whiteModule="on"                           ##白名单

black_fileExt={"php","jsp"}                        

ipWhitelist={"127.0.0.1"}                    ##白名单IP

ipBlocklist={"1.0.0.1"}                     ##黑名单IP

CCDeny="on"                             ##开启CC防护        

CCrate="100/60"                          ##60秒内允许同一个IP访问100次


7、创建日志存放目录:

[root@www ngx_lua_waf]#mkdir /opt/openresty/nginx/logs/hack/

[root@www ngx_lua_waf]#chown -R nobody:nobody /opt/openresty/nginx/logs/hack/


8、启动nginx测试:

[root@www logs]# /opt/openresty/nginx/sbin/nginx 


9、网页访问一条测试:

face/6HHjsZ4KasDNjpi7sj5TtEEWwesApXbD.png


10、压力测试CC***:

把congfig.lua的频率改成如下:

CCDeny="on"

CCrate="50/60"

测试结果:

[root@www ngx_lua_waf]# ab -c 100 -n 100 http://192.168.63.242/index.heml

This is ApacheBench, Version 2.3

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/


Benchmarking 192.168.63.242 (be patient).....done



Server Software:        openresty/1.11.2.2

Server Hostname:        192.168.63.242

Server Port:            80


Document Path:          /index.heml

Document Length:        2078 bytes


Concurrency Level:      100

Time taken for tests:   0.052 seconds

Complete requests:      100

Failed requests:        49      ###因为做了现在,所以这么多是失败的。



到处已经构建成功了一套waf防御系统,非常感谢loveshell提供这么棒的waf开源项目,还有春哥的openresty.


后期起到更多的lua + nginx学习成果,第一篇完成,希望我们后期都能写出自己的waf防火墙。


http://www.roncoo.com/article/detail/126294


转载于:https://blog.51cto.com/11959850/1878797

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

nginx + lua 构建网站防护waf(一) 的相关文章

  • 从支付网关重定向回时用户会话丢失

    我已将 Cyber source 配置为我的支付网关 我能够导航到 cybersource 并进行付款 并能够成功重定向回该网站 我也可以取消付款并重定向回我的网站 我收到来自支付网关的响应 但是 用户在从支付网关重定向回来时会被注销 我正
  • 如何使用 PHP 对字符串进行 rot13 处理?

    我有一个很大的 php 代码 我想手动对其进行编码和解码 我的问题是 php 代码里面有很多单引号和双引号 因此我在使用时出现错误str rot13 功能如下 那么正确的语法是什么以及如何使用下面的函数进行编码 str rot13 That
  • 为什么我的会话仍然存在?

    我一定很愚蠢 因为似乎一件相当明显的事情现在让我完全困惑 我有一个会议 ie SESSION handbag id 在某个时刻 我需要彻底终止这个会话 ie at the start of the page session start el
  • 免费 PHP 登录库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在服务器上找不到本地主机或 phpMyAdmin:如何修复?

    我按照安装说明进行操作PHP MySQL and PHPMyAdmin 但是当我尝试访问时http localhost phpmyadmin 我收到此错误 未找到 在此找不到请求的 URL phpmyadmin 服务器 然后我尝试访问loc
  • 获取 YouTube 最高缩略图分辨率

    我想获得 youtube 最高缩略图 maxresdefault jpg 像这个 http i ytimg com vi Cj6ho1 G6tw maxresdefault jpg http i ytimg com vi Cj6ho1 G6
  • 如何在 JavaScript 中创建服务器端进度指示器?

    我想在我的网站中创建一个部分 用户可以在其中进行一些简单的操作update纽扣 这些中的每一个update按钮将发送到服务器 并在幕后进行长时间的处理 当服务器处理数据时 我希望用户有某种进度指示器 例如进度条或文本百分比 我使用 jQue
  • 将 cookie 设置为在当天结束时过期

    我想设置一个 cookie 并让它在一天结束时过期 这有效 但 24 小时后过期 setcookie route upgrade voted true time 86400 这不起作用 setcookie route upgrade vot
  • 在 foreach 中使用 QueryPath 的多个查找

    我正在使用 QueryPath 和 PHP 这发现 eventdate 没问题 但不会为 dtstart 返回任何内容 qp htmlqp url foreach qp gt find table schedule gt find tr a
  • 是否可以用 PHP 编写电子邮件解析器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Nginx 502 网关错误。通过增加buffer来解决。为什么?

    我正在设置 LEMP 堆栈来运行 Drupal 我安装了 Nginx 和 PHP FastCGI Nginx 工作正常 但任何运行 PHP 的尝试都会出现错误 502 Bad Gateway 谷歌很快发现 nginx 502 错误网关 ht
  • 如何在codeigniter中将上传图片比例限制为16:9?

    这是我用来上传图像的代码 this gt load gt library upload ext pathinfo file name PATHINFO EXTENSION img name now ext imgConfig upload
  • 使用PHP从doc、xls文件中读取数据

    我想知道是否可以从 doc 和 xls 文件中读取数据并将 将内容读取到图像文件中 创建文档的页面样本 例如 我有一些文件希望我的客户购买 所以我需要自动创建小图像 例如我的文档样本 我们将不胜感激您的帮助 对于读取 xls 文件 我真的推
  • php - 解析html页面

    div divbox div p para1 p p para2 p p para3 p table class table tr td td tr table p para4 p p para5 p 有人可以告诉我如何解析这个 html
  • session_start():无法解码会话对象

    我有时在使用 CodeIgniter 时遇到以下问题 错误 2019 03 05 19 57 26 gt 严重性 警告 gt session start 无法解码会话对象 会话已被销毁 system libraries Session Se
  • 在本地 SDK 服务器上工作时,实时 Google App Engine 上出现 404

    我已经在GAE标准环境上部署了几个PHP应用程序 一切正常 现在我正在部署一个新应用程序 该应用程序位于由gcloudSDK按预期工作 终端命令 dev appserver py log level warning app yaml 问题是
  • Laravel 搜索关系

    我有两个相关的模型 我正在尝试在产品中进行搜索 并且仅显示实际搜索结果 而不是找到该产品的类别的所有产品 我不想搜索任何类别 因为无论搜索什么或找到什么 类别都会始终显示 Example I have the following categ
  • PayPal 网关已拒绝请求。安全标头无效(#10002:安全错误 Magento

    在 magento 中增加 PayPal 预付款 我已填写 magento admin 中的所有凭据 但是当我进入前端并单击 pay pal 按钮时 它给出了 PayPal 网关已拒绝请求 安全标头无效 10002 安全错误 我用谷歌搜索了
  • 通过 htaccess 将 PNG 解析为 PHP 仅适用于本地服务器,但不适用于网络服务器

    我用 PHP 创建了一个动态 PNG 图片 为了使用 PNG 扩展名 我创建了一个包含以下内容的 htaccess 文件 AddType application x httpd php png 在我的本地 XAMPP 服务器上 一切工作正常
  • 如何从日期中查找该月的最后一天?

    如何在 PHP 中获取该月的最后一天 Given a date 2009 11 23 我要2009 11 30 并给出 a date 2009 12 23 我要2009年12月31日 t返回给定日期所在月份的天数 请参阅的文档date ht

随机推荐

  • 差分信号简述

    差分信号是一种信号传输技术 传统的传输方法使用一根信号线传输信号 一根地线接地 差分信号需要在两根线上都传输信号 且两个信号振幅相同 相位相反 这样的信号就是差分信号 使用差分信号传输的好处是 只要传输正负信号的两根线在物理上是紧密耦合在一
  • echart柱状图Y轴最小间隔问题,Y轴不显示小数

    今天来说说echart 柱状图 Y轴的最小值 间隔问题 最近项目中用到柱状图 数据量少的时候 Y轴会出现小数 但是我们产品小哥哥说不能出现小数 好了 那就开干 option xAxis type category data Mon Tue
  • Linux安装opencv(附带出错,解决方法参考)

    前言 lib库 运行库 dev库 开发 gdb库 调试 安装 1 1 OpenCV是一个开源的软件 在一个source文件下 包含了所有的源代码文件 使用哪种操作系统 windows还是linux 使用哪种编译器 注意 执行安装包很可能不仅
  • springmvc有哪几种请求参数的方式呢?

    转自 springmvc有哪几种请求参数的方式呢 传送参数至后台 是每个系统都必须面对的事实 因为系统就是一个实现人机交互的工具 那么Spring MVC中如何在后台获取参数呢 下文将一一道来 如下所示 方式一 在Controller的形参
  • LRC歌词解析,实现Linux设备播放音乐显示歌词 LRC解析

    开始正文 1 关于LRC lrc是英文lyric 歌词 的缩写 被用做歌词文件的扩展名 以lrc为扩展名的歌词文件可以在各类数码播放器中同步显示 LRC 歌词是一种包含着 形式的 标签 tag 的 基于纯文本的歌词专用格式 最早由郭祥祥先生
  • vue实现农历日期选择器

    在项目中会员进行注册的时候需要进行生日的选择 由于通用的UI库都是公历的并且万年历的形式不符合 也在网上查了好多资料 最后找到一套算法感觉还是不错的 经过加工分析封装成了一个vue组件 实现公农历转换的算法 数组LunarDaysOfMon
  • shell脚本中数组的运用以及排序算法

    shell脚本中数组的运用 一 数组的介绍 1 概念 2 定义方法 3 数组包括的数据类型 二 关于数组的操作 1 获取数组长度 2 获取数组各个元素的下标 3 获取数组列表或单个元素 4 对数组切片输出 5 对数组里的元素替换 6 删除单
  • 【Webpack】webpack5基本配置

    5大核心概念 1 entry 入口 指示webpack从哪个文件开始打包 2 output 输出 指示webpack打包完的文件输出到哪里去 如何命名 3 loader 加载器 webpack本身只能处理js json等资源 其他资源需要借
  • 蓝桥杯 算法训练 单词接龙 超详细

    嘿嘿 低产博主又来更新了 这次是dfs搜索的题 我是看另一个博主写的 自己来归纳一下啦 冲冲冲 参考博客 https www cnblogs com zbx2000 p 12715400 html 问题概述 1 已知一组单词 2 给定一个开
  • 控制winform控件textbox(自写的那个),限制输入两位小数

    有个FloatLength属性 直接修改为2 即可 如果是3位小数的话 直接修改为3即可
  • Redis主从复制+哨兵模式

    必读 redis的主从复制是单向的 只能有主节点到从节点 主节点以写为主从节点以读为主不能写入数据 因为系统的80 的需求都是读的需求 redis服务默认自己是主节点 一个主节点由一个或多个从节点 一个从节点只有一个主节点 全量复制 red
  • MySQL数据库性能分析与调优实践

    一 MySQL索引 1 索引简介 索引是对数据库表中一列或多列的值进行排序的一种数据结构 好比是一本书前面的目录 可以增加对特定信息的查询速度 一般来说索引本身也很大 不可能全部存储在内存中 因此索引往往是存储在磁盘上的文件中的 可能存储在
  • 谈谈对Canal(增量数据订阅与消费)的理解

    概述 canal是阿里巴巴旗下的一款开源项目 纯Java开发 基于数据库增量日志解析 提供增量数据订阅 消费 目前主要支持了mysql 也支持mariaDB 起源 早期 阿里巴巴B2B公司因为存在杭州和美国双机房部署 存在跨机房同步的业务需
  • EnvironmentLocationNotFound: Not a conda environment: C:\Program Files\Anaconda3

    问题一 conda无法找到keras信息 于是使用以下办法 恢复keras使用 EnvironmentLocationNotFound Not a conda environment C Program Files Anaconda3 长时
  • 【PTA】数组合并

    合并两个升序数组 使得合并后的数组仍然是升序 输入格式 输入两个整数n和m 表示两个数组的长度 接着输入n个整数表示第一个数组的元素 然后输入m个整数表示第二个数组的元素 要求输入时按升序输入 import java util public
  • idea导入eclipse项目(保姆式教学)

    直接上操作吧 这里的红色箭头点击OK的不用 标错了 配置全部完成之后再点击OK 然后配置自己的tomcat 正常配置就好 如果是maven项目 则右键pom xml文件 点击maven 红色的pom xml文件变为蓝色则完成 这样就将ecl
  • 模拟退火算法matlab求函数最大值实例

    模拟退火算法matlab求函数最大值实例 模拟退火算法的思路基本上是 1 粒子按照不同的概率在不同的方向漂移 随机运动 2 向目标点漂移的概率更大 趋向于能量低的点 3 随着时间的推移粒子每次漂移的步长变短 温度降低 这里粒子的速度采用正态
  • 解决GD32F20X支持包安装后打开官方例程无法识别芯片问题

    今天分享一个自己遇到的一个问题 就是在安装了GD32F20x的支持包后 发现打开keil5的工程后 提示缺少芯片的device 于是以为keil5的版本不够 又去官网下了其补丁包 没想到还是不行 后来发现迁移到keil5格式就可以找到相应的
  • 最小二乘法的矩阵推导

    顾名思义 从数学意义推导最小二乘法公式 一 解释 最小二乘法本质是寻找一组x 使Ax与b距离最近 写成二范数的形式为 最合适的x一般出现在函数的极值点 也就是导数为0的点 所以为求导计算方便 我们用二范数的平方作为计算公式 补充知识 设下列
  • nginx + lua 构建网站防护waf(一)

    最近在帮朋友维护一个站点 这个站点是一个Php网站 坑爹的是用IIS做代理 出了无数问题之后忍无可忍终于要我帮他切换到nginx上面 前期被不断的扫描和CC 最后找到了waf这样一个解决方案缓解一下 话不多说直接开始 waf的作用 防止sq