最近搭建了一个网站以后,总觉得裸奔的网站非常不安全,需要加上防护措施。加一套 waf 防火墙,然后就可以安心的睡觉了。因为服务器使用了宝塔1管理,所以我需要既能跟宝塔一起用的 waf。
先说结论
- 宝塔自带 waf 收费;
- 宝塔软件商店里 waf 要么不合适,要么门槛太高,不好用;
- 其它免费 waf 大多要命令行安装,发挥不了宝塔优势。
最好是有一个能在宝塔 docker 上运行的防火墙,既能用宝塔管理服务状态,又能有自己管理界面的 waf,而且要免费,还得有效。所以,我最后选择用 docker compose 模板 + 雷池 waf 社区版。安装方法参考我的另一篇文章 https://www.jianshu.com/p/978e08095628
waf 对比
宝塔内置 waf
既然用宝塔做服务管理,第一反应就是在宝塔上找找没有合适的 waf。在非常显眼的地方,找到了 “防火墙” 入口,然后看到了非常显眼的 “立即购买”。本着来都来了的想法,看了一下官方防火墙的功能介绍2,功能还是非常多的,各位看官有钱的捧个钱场,我只能捧个人场。
另外根据文档介绍,nginx 防火墙是基于 Lua 实现的,也就是说这个防火墙的本质是人工规则,人工规则防火墙在防护能力上可以抵御常见攻击,只能亡羊补牢不能防患未然。宝塔内置 waf 还有一个 Apache 版本3,与 nginx 类似,只是一个基于 Apache 一个基于 Nginx,这两者的差别见仁见智,宝塔官方推荐的是 nginx 版本。
宝塔软件商店中的免费 waf
宝塔自带了一个软件商店,抱着试试看的态度搜了一下,还真找到了 3 款 waf。前两个是官方内置的收费版,第 3 个则是免费版。这一看,不得了啊,这是打算跟官方同台竞技啊。赶紧装上试试。
感谢作者 “民国三年一场雨”,民国三年就是 1914年,一百多年过去了,也不知道雨里发生什么。考虑到这个应用只有 403.95k 大小,总觉得这个功能可能没有想的那么多。
根据配置界面,启用防护,然后试着发起一次攻击请求,然后被拦截了。后台管理界面看到的效果记录是
拦截页面上还有提示,误报请联系宝塔 http://www.bt.cn/bbs?这不是官方 waf 么?为什么非要伪装一下自己?在一个隐蔽角落还找到一个“教程”链接4,发帖人是宝塔技术-小强5,这下是官方的免费 waf 没跑了。
另外我还发现,这个免费防火墙,在软件商店里浏览的时候是找不到的,必须搜索才能搜出来。所以,其实,人家是不希望你继续使用这个 waf 的。并且在使用时,还遇到了其它问题
- 管理界面不好找
我需要先进应用商店,搜索 waf,然后找到之后,在通过 “设置” 按钮进入。
- 防御类型固定
想要防御什么类型的攻击,都是提前设置好的,只能防御这么多,并且不能新增。
- 内置规则太少
每种防御类型都需要自行配置,虽然有内置规则,但规则不多,并且都是比较常见的规则。
总体体验下来,有种我防御了,但好像防御不高的感觉。
而且,这是怎么回事?我宝塔自己的 WordPress 用宝塔自己的防火墙扫描,怎么还扫出 2 个 webshell?这是谁出问题了?
其它 waf
很久没更新了:https://github.com/httpwaf/httpwaf2.0
不好塞进宝塔里:https://github.com/openresty/
老牌项目了,但是外国产品,用不惯:https://www.modsecurity.org/
这个不错,但是也没法塞进宝塔里:http://www.goodwaf.cn/
✅ 巧了,这个原生 docker,刚好兼容宝塔,稍加改造,顺利上线,看看我的 waf 效果图。https://waf-ce.chaitin.cn/
- https://www.bt.cn/new/index.htmlahref=#fnref-1class=footnote-...
- https://www.bt.cn/new/product_nginx_firewall.htmlahref=#fnref...
- https://www.bt.cn/new/product/btwaf_httpd.htmlahref=#fnref-3c...
- https://www.bt.cn/bbs/thread-57590-1-1.htmlahref=#fnref-4clas...
- https://www.bt.cn/bbs/home.php?mod=space&uid=34807ahref=#fnre...