前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >自建WAF系统

自建WAF系统

作者头像
用户1423082
发布于 2024-12-31 12:20:04
发布于 2024-12-31 12:20:04
18300
代码可运行
举报
文章被收录于专栏:giantbranch's bloggiantbranch's blog
运行总次数:0
代码可运行

实验环境

Ubuntu20.04 openresty-1.21.4.2

OpenResty简介

OpenResty 是一个基于 Nginx 的 Web 应用服务器,它将 Nginx 与一组强大的 Lua 模块集成在一起,提供了高性能、可扩展和灵活的 Web 开发环境。OpenResty 的目标是通过编写简洁的 Lua 代码来构建高性能的 Web 应用,而无需额外的服务器端脚本语言。

OpenResty 提供了丰富的 Lua 库和模块,可以与各种第三方服务和数据库进行交互,如 MySQLRedis、Memcached 等,从而实现复杂的业务逻辑和数据处理。通过 Lua 脚本的编写,您可以在请求的不同阶段对请求进行处理、路由、验证、转发等操作,以及对响应进行过滤、修改等操作。

OpenResty 的优势主要有以下几点:

  1. 高性能:OpenResty 基于 Nginx,继承了其高性能、高并发处理能力和低资源消耗特点。同时,通过使用 Lua 进行自定义的请求处理和响应生成,可以进一步提高应用的性能。
  2. 可扩展:OpenResty 提供了丰富的 Lua 库和模块,可以轻松地扩展功能,从而满足不同业务场景的需求。借助这些扩展,您可以快速构建出符合自己业务需求的定制化 Web 服务器。
  3. 灵活性:OpenResty 提供了灵活的配置和编程方式,可以在全局层面和请求处理阶段进行高度定制。您可以根据需要对请求和响应进行精细控制,实现个性化的处理逻辑。
  4. 社区支持:OpenResty 拥有庞大的用户社区和开发者社区,提供了大量的资源、插件和示例代码,方便开发者学习和交流。

总之,OpenResty 是一个功能强大且易于使用的 Web 应用服务器,它通过集成 Nginx 和 Lua,提供了一种高性能、可扩展和灵活的方式来构建 Web 应用。无论是构建 API 服务、处理静态文件、实现反向代理还是构建微服务架构,OpenResty 都是一个值得考虑的选择。

OpenResty下载与编译

安装依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apt update &&  apt install libpcre3-dev libssl-dev perl make build-essential curl zlib1g-dev

下载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget https://openresty.org/download/openresty-1.21.4.2.tar.gz

解压安装编译

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar -xvf openresty-VERSION.tar.gz
cd openresty-VERSION/
./configure -j2
make -j2
sudo make install

# better also add the following line to your ~/.bashrc or ~/.bash_profile file.
export PATH=/usr/local/openresty/bin:/usr/local/openresty/nginx/sbin:$PATH

或者假如是Ubuntu可以直接根据官方文档,添加仓库,直接apt安装

安装unixhot waf

下载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/unixhot/waf.git

将里面waf文件夹复制到Nginx配置文件目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp -rf waf /usr/local/openresty/nginx/conf/
ln -s /usr/local/openresty/lualib/resty/ /usr/local/openresty/nginx/conf/waf/resty

修改nginx配置文件nginx.conf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# WAF
  lua_shared_dict limit 50m;
  lua_package_path "/usr/local/openresty/nginx/conf/waf/?.lua";
  init_by_lua_file "/usr/local/openresty/nginx/conf/waf/init.lua";
  access_by_lua_file "/usr/local/openresty/nginx/conf/waf/access.lua";

这段 nginx 配置主要是实现使用 OpenResty 的 WAF (Web Application Firewall) 应用。具体含义如下:

  1. lua_shared_dict limit 50m;:定义了名为 limit 的共享字典,大小为 50MB,这个共享字典是用来存储限流、计数等信息的。
  2. lua_package_path “/usr/local/openresty/nginx/conf/waf/?.lua”;:定义了 Lua 脚本的搜索路径,这里是在 /usr/local/openresty/nginx/conf/waf/ 目录下寻找 Lua 文件。
  3. init_by_lua_file “/usr/local/openresty/nginx/conf/waf/init.lua”;:在 Nginx 启动时执行一次 init.lua 脚本,主要完成 WAF 初始化操作。
  4. access_by_lua_file “/usr/local/openresty/nginx/conf/waf/access.lua”;:在处理请求时,先执行 access.lua 脚本,主要完成 WAF 的访问控制功能。

Nginx反向代理

Nginx+Lua WAF很重要的一个基础功能,即反向代理功能

一般通过Location里面添加 proxy_pass来实现

这里我本地实验,就不用反向代理了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
proxy_pass https://www.XXX.com/;

基于Nginx+Lua得WAF

WAF得配置在config.lua中

从access.lua可以看出检测的顺序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
require 'init'

function waf_main()
    if white_ip_check() then
    elseif black_ip_check() then
    elseif user_agent_attack_check() then
    elseif cc_attack_check() then
    elseif cookie_attack_check() then
    elseif white_url_check() then
    elseif url_attack_check() then
    elseif url_args_attack_check() then
    --elseif post_attack_check() then
    else
        return
    end
end

waf_main()

规则在rule-config目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@vm:/usr/local/openresty/nginx/conf/waf# ls rule-config/
args.rule     cookie.rule  url.rule        whiteip.rule
blackip.rule  post.rule    useragent.rule  whiteurl.rule

查看url.rule得内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@vm:/usr/local/openresty/nginx/conf/waf/rule-config# cat url.rule 
\.(htaccess|bash_history)
\.(bak|inc|old|mdb|sql|backup|java|class|tgz|gz|tar|zip)$
(phpmyadmin|jmx-console|admin-console|jmxinvokerservlet)
java\.lang
\.svn\/
/(attachments|upimg|images|css|uploadfiles|html|uploads|templets|static|template|data|inc|forumdata|upload|includes|cache|avatar)/(\\w+).(php|jsp)

可以看到一条规则一行

都是一些敏感文件,敏感后缀,敏感目录等

测试

输入openresty启动nginx(其实是nginx得软连接)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@vm:~# ll /usr/local/openresty/bin/openresty 
lrwxrwxrwx 1 root root 37 Oct  5 01:57 /usr/local/openresty/bin/openresty -> /usr/local/openresty/nginx/sbin/nginx*

在浏览器输入zip后缀

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
nginx+lua实现简单的waf网页防火墙功能
参考地址:http://www.2cto.com/Article/201303/198425.html
保持热爱奔赴山海
2019/09/18
1.8K0
nginx+lua实现简单的waf网页防火墙功能
nginx lua软waf应用防火墙 (Openresty)
现在企业的业务出口基本是http/https其他内部端口都可以在设备acl和iptables访问控制;那主要的web出口如何做安全防护?? 我们使用nginx lua 来实现web软waf。
以谁为师
2019/05/30
3.1K0
openresty搭建网站防火墙
当我提交一个 select * from 疑似 sql注入的参数时,则会直接被拦截
仙士可
2020/11/24
1.5K0
Nginx添加开源防火墙(waf)防护
由于原生态的Nginx的一些安全防护功能有限,就研究能不能自己编写一个WAF,参考Kindle大神的ngx_lua_waf,自己尝试写一个了,使用两天时间,边学Lua,边写。不过不是安全专业,只实现了一些比较简单的功能:
王先森sec
2023/04/24
2.8K0
Nginx添加开源防火墙(waf)防护
甲方自研分布式WAF落地全程实录
Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称:WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。 架构设计 我们的流量第一层先到达高防抗D,做DDOS清洗,然后转发给WAF,由WAF做第二次清洗流控,转发给后端业务LB,整体架构如下,并旁路了分析引擎,弥补了WAF这一块无法做太复杂的计算缺陷,并把分析结果通过接口交给WAF执行。 技术选型 目前,主流
FB客服
2023/04/26
7710
甲方自研分布式WAF落地全程实录
自建WAF防火墙
介绍一种 Tengine 结合 lua 防御 cc 攻击的案例。用户可以进行相关尝试,但本文只用于操作演示,不对操作结果和出现的问题负责。
怀朔
2022/05/25
1.3K0
自建WAF防火墙
Centos7安装openresty实现WAF防火墙功能
OpenResty® 是一个结合了 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。 OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。 OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
星哥玩云
2022/05/30
2.5K0
Centos7安装openresty实现WAF防火墙功能
openresty (nginx)
OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。 ---- OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自
以谁为师
2019/05/30
1.2K0
部署nginx_lua_waf记录
通过部署nginx_lua_waf,具有使用简单、高性能、轻量级的优势,能够有效的防范sql注入、文件包含、XSS、fuzzing等web攻击,屏蔽异常的网络请求,防止webshell上传,相比于安全狗等商业版WAF,能够根据实际需求调整过滤规则,编辑符合企业自身业务需求的过滤规则。
信安之路
2018/08/08
1.1K0
部署nginx_lua_waf记录
基于ngx_lua_waf安装网站防护
ngx_lua_waf是一个基于ngx_lua开源强大的Web应用轻量级防火墙,它可以帮助我们提高网站的安全性和防护能力。通过安装和配置ngx_lua_waf,我们可以轻松地定制安全规则,实现灵活的安全防护。同时,WAF的实时日志记录和报警功能可以帮助我们及时发现和处理安全问题。
叔牙
2024/05/21
3410
基于ngx_lua_waf安装网站防护
分析绕过一款适合练手的云 WAF
X-WAF 是一款适用中、小企业的云 WAF 系统,让中、小企业也可以非常方便地拥有自己的免费云 WAF。
信安之路
2018/08/08
1.4K0
分析绕过一款适合练手的云 WAF
运维安全——安全防护-OpenResty
OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
阿dai学长
2019/09/19
6.3K0
运维安全——安全防护-OpenResty
分布式--OpenResty+lua+Redis实现限流与防爬虫
上篇分布式--OpenResty+lua+Redis中,我们了解了nginx结合lua脚本的强大之处,lua结合反向代理,可以对http请求提前做一些处理,来保证业务服务器的安全性和单一职责原则,以及结合Redis提升读写缓存的效率与持久化能力
aruba
2022/09/01
9440
分布式--OpenResty+lua+Redis实现限流与防爬虫
Nginx基础 - Nginx+Lua实现灰度发布与WAF
1.Nginx加载Lua环境 默认情况下Nginx不支持Lua模块, 需要安装LuaJIT解释器, 并且需要重新编译Nginx, 建议使用openrestry
子润先生
2021/08/03
1.7K0
每个后端都应该了解的OpenResty入门以及网关安全实战
在官网上对 OpenResty 是这样介绍的(http://openresty.org):
wayn
2023/10/25
1.5K0
每个后端都应该了解的OpenResty入门以及网关安全实战
一文从原理到实践教你使用Nginx_lua实现WAF
过去企业通常会采用防火墙,作为安全保障的第一道防线;当时的防火墙只是在第三层(网络层)有效的阻断一些数据包;而随着web应用的功能越来越丰富的时候,Web服务器因为其强大的计算能力,处理性能,蕴含较高的价值,成为主要的被攻击目标(第七层应用层)而传统防火墙在阻止利用应用程序漏洞进行的攻击方面,却没有办法;在此背景下,WAF(Web Application Firewall)应运而生。
公众号: 云原生生态圈
2022/02/16
2.9K0
nginx结合lua实现策略性限流量控制
Lua引用模块与包点击查看菜鸟教程简单配置如下#LUA_PATH # 文件路径以 ";" 号分...
友儿
2022/09/13
1.2K0
分布式WAF落地全程实录
Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称:WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。
糖果
2020/11/05
7330
分布式WAF落地全程实录
nginx编译安装ngx_lua模块
nginx lua模块淘宝开发的nginx第三方模块,它能将lua语言嵌入到nginx配置中,从而使用lua就极大增强了nginx的能力.
老高的技术博客
2022/12/28
6830
WAF代码剖析之初识openresty
自从这几年信息安全的大力发展,信息安全的建设是逐步发展起来,作为甲方安全工程师,一个人的安全部,使用开源的WAF部署防御攻击,仿佛是件很平常的事情,但是开源的坏处就是没有人能够及时提供技术支撑,出现问题就只能自己维护,我相信维护WAF的代码和规则是一件很耗费精力的事情,还不如用商用的香。如果没安全预算的朋友,不妨跟我一起走向WAF开发的世界。
FB客服
2020/10/27
9000
WAF代码剖析之初识openresty
相关推荐
nginx+lua实现简单的waf网页防火墙功能
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验