nginx waf 相关的解析:
前段时间看过一个nginx waf相关的项目HttpGuard还不错.
基本原理
总的思想还是蛮简单的,利用openresty的大发:
- 1.在init_by_lua阶段做一些waf的初始化的工作[如限速模块的最大访问频率以及所要保护的url等等]总体来说还是比较灵活.
- 2.在access_by_lua阶段做一些流量的入口检测,看看是否命中配置中所写的安全规则[如是否在访问频率之内等等].
总体设计:
.
├── captcha
├── config.lua
├── guard.lua
├── html
├── init.lua
├── logs
├── README.md
├── runtime.lua
└── url-protect
- 其中config.lua中是一些关于waf相关的一些配置,如:根据访问速度进行保护,根据cookie认证进行保护,js跳转等.当然还有就是
如果触发了相应的保护阀值后会放入黑名单然后下次再来请求时所进行的处理操作[如:直接forbidden,填写验证码,或者在设置防
火墙禁止该ip访问].
- 然后guard.lua中主要就是相应保护的具体实现.
- runtime.lua就是对guard.lua的封装.
- url-protect文件里面存放了各种受保护的url,支持正则.
值得改善
对该项目的总体感觉:
该项目整体来说还不错,但是也有不足之处.比如可以做如下几点改进:
- 1.可以把waf的一些规则变成动态可修改的方式,这样比较灵活.[可以使用redis进行存储,然后sharedict进行缓存定时更新或者主动更新].
- 2.代码可以进行相应的模块化,方便后续的功能扩展,比如各种安全控制按照方法可以独自写.降低工程文件的耦合.
- 3.项目中的一些日志操作是自己调用lua的io.open这点在nginx_lua中是很忌讳的,大大的消减了nginx的高并发.一般情况下在ngx_lua开发的过程中尽量使用ngx_lua提供的一些lua操作,由于lua的好多自身的操作是阻塞的,会阻塞当前worker的导致并发量下降,当然该项目中使用的貌似有好基础lua自身的api做一些事情,如果把这个改善下
性能应该直接上升.
自己的小小想法,欢迎拍砖.
Communite
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流
- 邮件(1031379296#qq.com, 把#换成@)
- QQ: 1031379296
- weibo: @王发康
Thx
Author
- Linux\nginx\golang\c\c++爱好者
- 欢迎一起交流 一起学习#
- Others say good and Others good