利用 Nginx Lua Redis 实现 CC 防御
本文最后更新于 2583 天前,其中的信息可能已经有所发展或是发生改变。

前言

之前有写过两篇 利用 NGINX 和 LuaJIT 构建简单的 WAFOpenstar – 基于 OpenResty 的高性能 WAF 拓展,不过两者其实都蛮复杂的,很多情况下像一些管理员的正常操作可能也会被误判,所以今天讲一个简单点的 WAF。

介绍

Nginx Lua Redis 防止CC攻击实现原理:同一个外网IP、同一个网址(ngx.var.request_uri)、同一个客户端(http_user_agent)在某一段时间(CCseconds)内访问某个网址(ngx.var.request_uri)超过指定次数(CCcount),则禁止这个外网IP+同一个客户端(md5(IP+ngx.var.http_user_agent)访问这个网址(ngx.var.request_uri)一段时间(blackseconds)。

设置

Nginx Lua Redis 依赖 Lua,推荐使用 OpenResty,因为这货就是 OpenResty 的作者写的,而且 Nginx 安装 Lua 还麻烦。

教程,假设 OpenResty 安装在 /usr/local/openresty ,Nginx 配置文件在 /usr/local/openresty/nginx/conf/nginx.conf

加载 Redis

cd /usr/local/openresty/lualib/redis
wget https://github.com/openresty/lua-resty-redis/raw/master/lib/resty/redis.lua

/usr/local/openresty/nginx/conf/nginx.confhttp{} 块中添加(就是 server{}块的上一层):

lua_package_path "/usr/local/openresty/lualib/redis/redis.lua;;";

配置 WAF

/usr/local/openresty/lualib/redis/
https://gist.github.com/ivmm/231e974afba1edcde6776e1e827e238a/raw/4eef07d2c7d42695c1abcba3876c437c4f4cb0b7/waf.lua

如果 Redis 不是 6379 端口或者不在本机记得改一下

加载WAF

在虚拟主机配置文件中加入:

access_by_lua_file "/usr/local/openresty/lualib/redis/waf.lua";

然后重启 Nginx/OpenResty 即可。

评论

  1. 7年前
    2017-3-24 10:22:50

    感谢博主分享

  2. 7年前
    2017-3-31 14:14:59

    感谢博主分享,不知道这个可否做前端负载均衡的WAF

    • 妙正灰
      博主
      面试技巧
      7年前
      2017-3-31 14:42:03

      可以的,只要是通过本机 nginx 实现的均衡负载就可以

  3. 7年前
    2017-4-04 10:15:43

    从百度进来的,博客不错哦!

    • 妙正灰
      博主
      衣皇后
      7年前
      2017-4-06 12:05:51

      多谢~

  4. 7年前
    2017-4-04 10:21:02

    我现在也不管了,攻击就攻击了,宕机了再重启。

    • 妙正灰
      博主
      免费资源部落
      7年前
      2017-4-06 12:06:04

      我服务器管的比较少

  5. 7年前
    2017-4-05 23:49:04

    厉害了我的哥

  6. 7年前
    2017-4-07 16:47:24

    厉害了,大佬

  7. 7年前
    2017-4-29 2:04:36

    推荐 verynginx lua插件。

本文评论已关闭
上一篇
下一篇