实验环境
Ubuntu20.04
openresty-1.21.4.2
OpenResty简介
OpenResty 是一个基于 Nginx 的 Web 应用服务器,它将 Nginx 与一组强大的 Lua 模块集成在一起,提供了高性能、可扩展和灵活的 Web 开发环境。OpenResty 的目标是通过编写简洁的 Lua 代码来构建高性能的 Web 应用,而无需额外的服务器端脚本语言。
OpenResty 提供了丰富的 Lua 库和模块,可以与各种第三方服务和数据库进行交互,如 MySQL、Redis、Memcached 等,从而实现复杂的业务逻辑和数据处理。通过 Lua 脚本的编写,您可以在请求的不同阶段对请求进行处理、路由、验证、转发等操作,以及对响应进行过滤、修改等操作。
OpenResty 的优势主要有以下几点:
高性能:OpenResty 基于 Nginx,继承了其高性能、高并发处理能力和低资源消耗特点。同时,通过使用 Lua 进行自定义的请求处理和响应生成,可以进一步提高应用的性能。
可扩展:OpenResty 提供了丰富的 Lua 库和模块,可以轻松地扩展功能,从而满足不同业务场景的需求。借助这些扩展,您可以快速构建出符合自己业务需求的定制化 Web 服务器。
灵活性:OpenResty 提供了灵活的配置和编程方式,可以在全局层面和请求处理阶段进行高度定制。您可以根据需要对请求和响应进行精细控制,实现个性化的处理逻辑。
社区支持:OpenResty 拥有庞大的用户社区和开发者社区,提供了大量的资源、插件和示例代码,方便开发者学习和交流。
总之,OpenResty 是一个功能强大且易于使用的 Web 应用服务器,它通过集成 Nginx 和 Lua,提供了一种高性能、可扩展和灵活的方式来构建 Web 应用。无论是构建 API 服务、处理静态文件、实现反向代理还是构建微服务架构,OpenResty 都是一个值得考虑的选择。
OpenResty下载与编译
安装依赖:
1 | apt update && apt install libpcre3-dev libssl-dev perl make build-essential curl zlib1g-dev |
下载
1 | wget https://openresty.org/download/openresty-1.21.4.2.tar.gz |
解压安装编译
1 | tar -xvf openresty-VERSION.tar.gz |
或者假如是Ubuntu可以直接根据官方文档,添加仓库,直接apt安装
安装unixhot waf
下载
1 | git clone https://github.com/unixhot/waf.git |
将里面waf文件夹复制到Nginx配置文件目录
1 | cp -rf waf /usr/local/openresty/nginx/conf/ |
修改nginx配置文件nginx.conf
1 | # WAF |
这段 nginx 配置主要是实现使用 OpenResty 的 WAF (Web Application Firewall) 应用。具体含义如下:
lua_shared_dict limit 50m;:定义了名为 limit 的共享字典,大小为 50MB,这个共享字典是用来存储限流、计数等信息的。
lua_package_path “/usr/local/openresty/nginx/conf/waf/?.lua”;:定义了 Lua 脚本的搜索路径,这里是在 /usr/local/openresty/nginx/conf/waf/ 目录下寻找 Lua 文件。
init_by_lua_file “/usr/local/openresty/nginx/conf/waf/init.lua”;:在 Nginx 启动时执行一次 init.lua 脚本,主要完成 WAF 初始化操作。
access_by_lua_file “/usr/local/openresty/nginx/conf/waf/access.lua”;:在处理请求时,先执行 access.lua 脚本,主要完成 WAF 的访问控制功能。
Nginx反向代理
Nginx+Lua WAF很重要的一个基础功能,即反向代理功能
一般通过Location里面添加 proxy_pass来实现
这里我本地实验,就不用反向代理了
1 | proxy_pass https://www.XXX.com/; |
基于Nginx+Lua得WAF
WAF得配置在config.lua中
从access.lua可以看出检测的顺序
1 | require 'init' |
规则在rule-config目录
1 | root@vm:/usr/local/openresty/nginx/conf/waf# ls rule-config/ |
查看url.rule得内容
1 | root@vm:/usr/local/openresty/nginx/conf/waf/rule-config# cat url.rule |
可以看到一条规则一行
都是一些敏感文件,敏感后缀,敏感目录等
测试
输入openresty启动nginx(其实是nginx得软连接)
1 | root@vm:~# ll /usr/local/openresty/bin/openresty |
在浏览器输入zip后缀