V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
c137rick
V2EX  ›  分享创造

一个 nginx 防火墙模块: ngx_waf

  •  
  •   c137rick · 2020-12-12 23:03:54 +08:00 · 3464 次点击
    这是一个创建于 1238 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用过一段 ngx_lua_waf,但是由于这个项目很久不更新了,而且由于缺少拉黑整个网段,不支持 IPV6 等缺点就没有再用下去。但我确实有用防火墙的需求,所以自己用 C 写了一个 nginx 防火墙模块。

    欢迎指教!

    功能

    • IPV4 和 IPV6 黑白名单。IPV4 支持点分十进制写法,同时支持 192.168.0.0/16 这种方式指定一个网段。IPV6 支持冒号十六进制写法,同时支持 fe80::/80 这种方式指定一个网段。
    • CC 攻击防御。自定义每分钟的访问次数上限,超出上限自动自动拉黑一段时间,时长自定义。
    • POST 内容黑名单(支持正则)。
    • URL 黑白名单(支持正则)。
    • GET 参数黑名单(支持正则)。
    • Referer 黑白名单(支持正则).
    • Cookie 黑名单(支持正则)。
    • UserAgent 黑名单(支持正则)。

    v2.2.0-beta-2 开始本模块开始支持 IPV6,如果有需要请下载对应的版本。

    项目地址

    Github: https://github.com/ADD-SP/ngx_waf

    第 1 条附言  ·  2020-12-13 01:43:50 +08:00
    如果觉得项目不错就点个 star 吧,让作者更有动力维护下去。
    第 2 条附言  ·  2020-12-14 18:56:33 +08:00
    如果有什么问题最好在 Github 开一个 issue,v2ex 不知为何有时收不到回复提醒。
    18 条回复    2020-12-17 23:51:00 +08:00
    Nangle
        1
    Nangle  
       2020-12-12 23:11:52 +08:00
    好,不错!怎样才能防采集呢?
    37Y37
        2
    37Y37  
       2020-12-12 23:16:02 +08:00
    有点厉害呀,支持
    Nangle
        3
    Nangle  
       2020-12-12 23:16:33 +08:00
    我有上百个包含 IP 段的黑名单文本文件,如不合并成一个文件的情况下,该如批量何引用进去呢?
    c137rick
        4
    c137rick  
    OP
       2020-12-12 23:20:20 +08:00
    @Nangle 从防火墙角度来说防采集一般通过限制 IP 的访问频率和拉黑 IP 实现,前者可以用本模块的 CC 防御功能。

    目前暂未支持多个 IP 黑名单,目前只能合并到同一个文件内。如果觉得有必要可以在 Github 上开一个 issuse 讨论一下。
    IvanLi127
        5
    IvanLi127  
       2020-12-12 23:23:54 +08:00 via Android
    给大佬点赞😘
    s609926202
        6
    s609926202  
       2020-12-12 23:47:59 +08:00 via iPhone
    同问,如何防止一些恶意请求
    raaaaaar
        7
    raaaaaar  
       2020-12-12 23:49:49 +08:00 via Android
    你们都是写得差不多了才开始宣传的吗,这都几个月了。。
    PerFectTime
        8
    PerFectTime  
       2020-12-13 00:19:51 +08:00   ❤️ 1
    @raaaaaar #7 要不然开个坑自己写不下去了,不就被人说放鸽子
    c137rick
        9
    c137rick  
    OP
       2020-12-13 01:22:23 +08:00
    @s609926202 模块带有一些默认的规则,可以在 `rules` 文件夹下查看。对于一些常规的脚本扫描请求,定期看看 access.log 写点正则就差不多了,CC 防御也能限制一下扫站的脚本。
    c137rick
        10
    c137rick  
    OP
       2020-12-13 01:25:25 +08:00
    @raaaaaar #7 主要是觉得完成了 IPV6 支持后宣传比较好。
    learningman
        11
    learningman  
       2020-12-13 11:26:11 +08:00 via Android
    提个小建议,progress 可以改叫 roadmap
    c137rick
        12
    c137rick  
    OP
       2020-12-13 15:21:48 +08:00
    @learningman #11 progress 指向一个纯文字的项目开发进度说明,感觉 roadmap 最好有图,文字类的通常不像图那么直观。
    privil
        13
    privil  
       2020-12-14 10:32:26 +08:00
    @c137rick #10 你好,想请问一下 CC 防护 是否可以考虑增加一个 访问频繁转跳验证码的功能,验证码通过则可以访问,否则锁定一段时间持续要求填写验证码,大部分 toC 的业务层可能更需要这种功能,尤其是业务规模不大的情况下,又遇到刷单的问题。
    privil
        14
    privil  
       2020-12-14 12:15:39 +08:00
    error: ‘for’ loop initial declarations are only allowed in C99 mode 编译安装报错了……
    c137rick
        15
    c137rick  
    OP
       2020-12-14 12:18:16 +08:00
    @privil #10 #11 两个问题去 Github 上各开一个 issue 吧,不知为什么 V2EX 这里有时收不到回复通知。
    c137rick
        16
    c137rick  
    OP
       2020-12-14 12:19:11 +08:00
    @privil #13 #14 两个问题去 Github 上各开一个 issue 吧,不知为什么 V2EX 这里有时收不到回复通知。
    myqoo
        17
    myqoo  
       2020-12-17 14:49:48 +08:00
    还是用 OpenResty LUA 实现比较稳妥。用 C 一个不小心出现个内存 bug 问题就大了。
    c137rick
        18
    c137rick  
    OP
       2020-12-17 23:51:00 +08:00
    @myqoo #17 这倒是真的,有一个 VM 不用关注内存管理。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1262 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:19 · PVG 01:19 · LAX 10:19 · JFK 13:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.