nginx openresty waf动态黑名单 白名单 、centos 、windows下部署

本文介绍了如何使用Nginx和OpenResty实现自定义WAF,支持IP黑白名单、URL白名单、User-Agent过滤等功能。详细阐述了OpenResty的安装与WAF部署过程,包括动态黑名单的实现,利用Redis存储和更新黑名单,并提供了Windows版本的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、WAF

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

参考网址https://github.com/unixhot/waf

功能列表:

  1. 支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝。
  2. 支持URL白名单,将不需要过滤的URL进行定义。
  3. 支持User-Agent的过滤,匹配自定义规则中的条目,然后进行处理(返回403)。
  4. 支持CC攻击防护,单个URL指定时间的访问次数,超过设定值,直接返回403。
  5. 支持Cookie过滤,匹配自定义规则中的条目,然后进行处理(返回403)。
  6. 支持URL过滤,匹配自定义规则中的条目,如果用户请求的URL包含这些,返回403。
  7. 支持URL参数过滤,原理同上。
  8. 支持日志记录,将所有拒绝的操作,记录到日志中去。
  9. 日志记录为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
  1. 测试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
  1. 测试访问
[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

2、附录

Nginx + Lua源码编译部署(不推荐)

  1. Nginx安装必备的Nginx和PCRE软件包。
[root@nginx-lua ~]# cd /usr/local/src
[root@nginx-lua src]# w
### 使用 OpenResty WAF 实现 IP 黑名单过滤 在 OpenResty 的 Web 应用防火墙 (WAF) 配置中,`blackip.rule` 文件用于定义 IP 地址黑名单。此文件位于 `/usr/local/openresty/nginx/conf/waf/rule-config/` 目录下[^1]。 #### 配置 `blackip.rule` 为了实现 IP 黑名单功能,在 `blackip.rule` 文件中按照如下格式添加需要屏蔽的 IP 地址: ```plaintext # Example of blocking a single IP address deny 192.168.1.10; # Blocking an entire subnet can also be done using CIDR notation deny 172.16.0.0/16; ``` 每条规则前可以加上注释来描述该规则的目的或背景信息。使用 `deny` 关键字指定要阻止访问的具体 IP 或子网范围。 #### 加载并启用配置 编辑完成后保存更改,并确保 Nginx 能够重新加载最新的配置而不重启服务,通常可以通过命令行执行以下操作完成热更新: ```bash nginx -s reload ``` 这会使得新的黑名单位置立即生效而不会中断现有连接。 #### 测试与验证 确认配置无误之后,可通过尝试从被加入黑名单中的 IP 发起 HTTP 请求测试是否能够成功拦截请求。正常情况下应该返回 403 Forbidden 响应码表示已被拒绝访问。 ```python import requests response = requests.get('http://your-server-ip/', headers={'X-Forwarded-For': '192.168.1.10'}) print(response.status_code) ``` 上述 Python 代码模拟了一个来自已知黑名单内的 IP (`192.168.1.10`) 对服务器发起 GET 请求的过程;如果一切设置正确,则预期输出状态码为 `403`.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值