使用Nginx+Lua实现自定义WAF(Web application firewall)

这篇具有很好参考价值的文章主要介绍了使用Nginx+Lua实现自定义WAF(Web application firewall)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

转载https://github.com/unixhot/waf

WAF
使用Nginx+Lua实现自定义WAF(Web application firewall)

功能列表:
支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝。
支持URL白名单,将不需要过滤的URL进行定义。
支持User-Agent的过滤,匹配自定义规则中的条目,然后进行处理(返回403)。
支持CC攻击防护,单个URL指定时间的访问次数,超过设定值,直接返回403。
支持Cookie过滤,匹配自定义规则中的条目,然后进行处理(返回403)。
支持URL过滤,匹配自定义规则中的条目,如果用户请求的URL包含这些,返回403。
支持URL参数过滤,原理同上。
支持日志记录,将所有拒绝的操作,记录到日志中去。
日志记录为JSON格式,便于日志分析,例如使用ELK进行攻击日志收集、存储、搜索和展示。
WAF实现
WAF一句话描述,就是解析HTTP请求(协议解析模块),规则检测(规则模块),做不同的防御动作(动作模块),并将防御过程(日志模块)记录下来。所以本文中的WAF的实现由五个模块(配置模块、协议解析模块、规则模块、动作模块、错误处理模块)组成。

安装部署
以下方案选择其中之一即可:

选择1: 可以选择使用原生的Nginx,增加Lua模块实现部署。
选择2: 直接使用OpenResty
OpenResty安装
1 Yum安装OpenResty(推荐)

源码安装和Yum安装选择其一即可,默认均安装在/usr/local/openresty目录下。

[root@opsany ~]# wget https://openresty.org/package/centos/openresty.repo
[root@opsany ~]# sudo mv openresty.repo /etc/yum.repos.d/
[root@opsany ~]# sudo yum install -y openresty
测试OpenResty和运行Lua
[root@opsany ~]# vim /usr/local/openresty/nginx/conf/nginx.conf
#在默认的server配置中增加
        location /hello {
            default_type text/html;
            content_by_lua_block {
                ngx.say("<p>hello, world</p>")
            }
        }
[root@opsany ~]# /usr/local/openresty/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/openresty-1.17.8.2/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/openresty-1.17.8.2/nginx/conf/nginx.conf test is successful
[root@opsany ~]# /usr/local/openresty/nginx/sbin/nginx

测试访问

[root@opsany ~]# curl http://127.0.0.1/hello
<p>hello, world</p>

WAF部署

[root@opsany ~]# git clone https://github.com/unixhot/waf.git
[root@opsany ~]# cp -r ./waf/waf /usr/local/openresty/nginx/conf/
[root@opsany ~]# vim /usr/local/openresty/nginx/conf/nginx.conf
#在http{}中增加,注意路径,同时WAF日志默认存放在/tmp/日期_waf.log
#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";
[root@opsany ~]# ln -s /usr/local/openresty/lualib/resty/ /usr/local/openresty/nginx/conf/waf/resty
[root@opsany ~]# /usr/local/openresty/nginx/sbin/nginx -t
[root@opsany ~]# /usr/local/openresty/nginx/sbin/nginx -s reload

Nginx反向代理

Nginx+Lua WAF很重要的一个基础功能,即反向代理功能,通过代理的方式保护网站:
在nginx.conf配置文件倒数第二行处添加一行,增加www.douwaf.com的反向代理配置,保护的网站多了以后会导致nginx.conf太大难以维护,所以通常会把不同服务的配置文件独立组成文件。

 include "/usr/local/openresty/nginx/conf/www.douwaf.com.conf";

include指令也支持通配符,所以更常见的做法是:

include "/home/maidou/opt/openresty/nginx/conf/*.conf";

编辑www.douwaf.com.conf,定义upstream组,对应是后端真实提供服务的服务器地址和端口,192.168.1.222:80

upstream xi{
    server 192.168.1.222:80;
}
server {
        listen       80;
    server_name  www.test.com;
    location / {
        proxy_pass    http://xi;
        index  index.html index.htm;
    }
}

使用页面访问,可以正常使用,说明反向代理配置生效。测试阶段也可以不进行DNS切换,修改/etc/hosts文件也可以达到同样效果

基于Nginx+Lua的WAF

1)WAF配置。WAF的配置在config.lua文件中完成,其中比较重要的几个配置内容如下所示。
● config_waf_enable:表明WAF是否拦截,on表明检测并拦截,off表明检测不拦截
● config_log_dir:表明WAF日志对应的路径
● config_rule_dir:表明WAF规则对应的路径
● config_url_check:表明是否对URL进行检测
● config_user_agent_check:表明是否对user_agent进行检测
● config_cookie_check:表明是否对cookie进行检测
● config_post_check:表明是否对post内容进行检测
● config_output_html:表明检测到攻击后返回给用户的页面内容

Lua环境初始化:Lua的初始化是在init.lua文件中完成的,根据配置分别加载不同的规则文件。比如在函数url_attack_check中,首先判断配置文件中是否配置需要检测URL:

function url_attack_check()
    if config_url_check == "on" then

如果配置了该选项,则加载对应的检测规则:

local URL_RULES = get_rule('url.rule')

其他检测URL参数、cookie以及post内容都类似。

Lua处理HTTP协议:
这个是整个WAF最核心的部分,流程如图2-8所示,Nginx处理HTTP协议的请求内容,将HTTP协议解析成URL、URL参数、post内容、cookie、user-agent等字段,Lua针对这些字段进行检测,判断攻击类型。处理应答内容类似,不再赘述。整个处理过程体现在access.lua文件,可以看出一个HTTP请求会如图2-9所示,串行经过各种检测:
使用Nginx+Lua实现自定义WAF(Web application firewall)

    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 url_attack_check() then
        elseif url_args_attack_check()

Lua的检测规则在rule-config目录,不同检测内容保存在不同文件中文章来源地址https://www.toymoban.com/news/detail-513511.html

到了这里,关于使用Nginx+Lua实现自定义WAF(Web application firewall)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用nginx实现自定义大小预览缩略图,http_image_filter模块的安装使用

    本预览图功能使用的是nginx的http_image_filter模块,可以自定义缓存大小解决占用服务器容量问题,建议配合fastDFS使用 http_image_filter不会改变图片原始比例 例如原始图片尺寸为16:9,那么输入宽高值之后会以较小的一个参数展现预览图,比如原始图为1600*900,传递参数320*90会拿到

    2023年04月24日
    浏览(38)
  • 虚拟机中使用Nginx + Keepalived 实现高可用 Web 负载均衡笔记

    物理操作系统:Windows10 虚拟机软件:VMWare Workstation 16 Pro 虚拟操作系统统:CentOS7 Nginx:1.24.0 Keepalived:2.2.8 在VMWare Worksattion中安装了2台CentOS7的虚拟机,桥接方式下IP地址分别为:192.168.0.35、192.168.0.36 VIP IP 主机名 Nginx端口 默认主从 192.168.0.100 192.168.0.35 wongoing01 88 MASTER 192.168

    2024年02月11日
    浏览(61)
  • 将树莓派转身为强大的Web服务器:使用Nginx和cpolar实现远程访问

    安装 Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的 Web 服务器,可以用于托管网站或 Web 应用程序。相比其他 Web 服务器,Nginx 的内存占用率非常低,可以在树莓派等资源受限的设备上运行。同时结合cpolar 内网穿透工具即可实现远程访问。 在树莓派安装Nginx也是

    2024年02月12日
    浏览(32)
  • 使用nginx-lua配置统一url自动跳转到hadoop-ha集群的active节点

    下载安装nginx所用的依赖 下载nginx 稍后安装nginx 安装lua语言 安装LuaJIT,安装路径/opt/luaJIT-2.1.0自行设置 设置环境变量 打开: vi /etc/profile 保存: . /etc/profile 下载ngx_devel_kit(NDK)模块 :https://github.com/simpl/ngx_devel_kit/tags,不需要安装,记住存放位置/opt/luaJIT-2.0.5/package/ngx_deve

    2024年02月10日
    浏览(54)
  • lua使用resty.http做nginx反向代理(https请求,docker容器化部署集群),一个域名多项目转发

    下载使用 链接:https://pan.baidu.com/s/1uQ7yCzQsPWsF6xavFTpbZg 提取码:htay –来自百度网盘超级会员V5的分享 ad_load.lua文件

    2024年01月18日
    浏览(66)
  • 基于nginx的waf方案naxsi源码理解(4)_框架架构

    naxsi-1.3/naxsi_src源码文件:

    2024年02月16日
    浏览(39)
  • 基于nginx的waf方案naxsi源码理解(6)_策略处理

    这里的策略处理以读取MainRule策略为例。 以naxsi_core.rules的首条策略做示例: 如何读入配置策略信息 value 的内容通过gdb调试输入如下: ngx_http_naxsi_cfg_parse_one_rule // 策略分析函数 ngx_http_naxsi_cfg_parse_one_rule函数主要部分: 看这部分前,请先看先看下下面rule_parser的定义: 先看下

    2024年02月16日
    浏览(33)
  • 什么是 Web 应用防火墙(WAF)?

    当下时候,网络攻击和针对网站的攻击与日俱增。同时,在我们的日常生活中,安全的重要性也迅速提升。因此,保证在线上世界的安全变得越来越重要。更重要的是,保护你的网站和所存储的数据的安全。所以,我们将介绍什么是 Web 应用防火墙(WAF)? 为什么保护你的网站

    2024年02月04日
    浏览(57)
  • WAF/Web应用安全(拦截恶意非法请求)

    Web 应用防火墙(Web Application Firewall, WAF)通过对 HTTP(S) 请求进行检测,识别并阻断 SQL 注入、跨站脚本攻击、跨站请求伪造等攻击,保护 Web 服务安全稳定。 Web 安全是所有互联网应用必须具备的功能,没有安全防护的应用犹如怀揣珠宝的儿童独自行走在盗贼环伺的黑夜里。

    2024年02月11日
    浏览(37)
  • 阿里云Web应用防火墙-WAF

    WAF可以对网站进行扫描,识别API漏洞。 如何设置API安全_Web应用防火墙-阿里云帮助中心 登录认证 手机验证码认证 数据保存 数据查询 数据导出 数据分享 数据更新 数据删除 数据增加 下线注销 信息发送 信息认证 邮件信息发送 邮箱验证码认证 账号密码认证 账号注册 敏感数

    2023年04月23日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包