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

一个 nginx 防火墙模块: ngx_waf

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

    用过一段 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
    Girls
        1
    Girls  
       2020-12-12 23:11:52 +08:00
    好,不错!怎样才能防采集呢?
    37Y37
        2
    37Y37  
       2020-12-12 23:16:02 +08:00
    有点厉害呀,支持
    Girls
        3
    Girls  
       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
    &nbp;   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     Solana     777 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION:3.9.8.5 24ms UTC 21:30 PVG 05:30 LAX 13:30 JFK 16:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86