钟馗是中国传统文化中的一个神话人物,被誉为"捉鬼大师",专门驱逐邪恶之物。Zhongkui-WAF
的命名灵感来源于这一神话人物,寓意着该软件能够像钟馗一样,有效地保护Web应用免受各种恶意攻击和威胁。
Zhongkui-WAF
基于lua-nginx-module
,可以多维度检查和拦截恶意网络请求,具有简单易用、高性能、轻量级的特点。它的配置简单,你可以根据实际情况设置不同的安全规则和策略。
可以执行安装脚本install.sh
,自动安装OpenResty
、ZhongKui
、libmaxminddb
、luafilesystem
和geoipupdate
。也可以自行逐个安装。
由于Zhongkui-WAF
基于lua-nginx-module
,所以要先安装Nginx
或OpenResty
,强烈推荐使用OpenResty
。
如果你使用Nginx
,则需要安装以下第三方模块:
LuaJIT
和lua-nginx-module
模块path-to-zhongkui-waf/lib/resty
目录假设OpenResty
安装路径为:/usr/local/openresty
,下载zhongkui-waf
文件并放置在/usr/local/openresty/zhongkui-waf
目录。
修改nginx.conf
,在http
模块下添加zhongkui-waf
相关配置:
include /usr/local/openresty/zhongkui-waf/admin/conf/waf.conf; include /usr/local/openresty/zhongkui-waf/admin/conf/admin.conf; include /usr/local/openresty/zhongkui-waf/admin/conf/sites.conf;
可根据访问量大小适当调整waf.conf
文件中配置的字典内存大小。
lua_shared_dict dict_cclimit 10m; lua_shared_dict dict_accesstoken 5m; lua_shared_dict dict_blackip 10m; lua_shared_dict dict_locks 100k; lua_shared_dict dict_config 100k; lua_shared_dict dict_config_rules_hits 100k; lua_shared_dict dict_req_count 5m; lua_shared_dict dict_req_count_citys 10m; lua_shared_dict dict_sql_queue 10m; lua_package_path "/usr/local/openresty/zhongkui-waf/?.lua;/usr/local/openresty/zhongkui-waf/lib/?.lua;/usr/local/openresty/zhongkui-waf/admin/lua/?.lua;;"; init_by_lua_file /usr/local/openresty/zhongkui-waf/init.lua; init_worker_by_lua_file /usr/local/openresty/zhongkui-waf/init_worker.lua; access_by_lua_file /usr/local/openresty/zhongkui-waf/waf.lua; body_filter_by_lua_file /usr/local/openresty/zhongkui-waf/body_filter.lua; header_filter_by_lua_file /usr/local/openresty/zhongkui-waf/header_filter.lua; log_by_lua_file /usr/local/openresty/zhongkui-waf/log_and_traffic.lua;
IP地理位置识别需要下载MaxMind的IP地址数据文件及安装该IP数据文件的读取库。
从MaxMind官网下载GeoLite2 City数据文件,后续可使用官方工具对该数据文件自动更新。
安装libmaxminddb
库
wget -P /usr/local/src https://github.com/maxmind/libmaxminddb/releases/download/1.7.1/libmaxminddb-1.7.1.tar.gz tar -zxvf libmaxminddb-1.7.1.tar.gz cd libmaxminddb-1.7.1 ./configure make && make install echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf ldconfig
Windows系统用户要自行编译,生成libmaxminddb.dll
文件,具体参考maxmind/libmaxminddb
官方文档using-cmake。
wget -O /usr/local/src/luaossl-rel-20220711.tar.gz https://github.com/wahern/luaossl/archive/refs/tags/rel-20220711.tar.gz tar -zxf luaossl-rel-20220711.tar.gz cd ./luaossl-rel-20220711 make all5.1 includedir=/usr/local/openresty/luajit/include/luajit-2.1 && make install5.1
wget -O /usr/local/src/luafilesystem-master.zip https://github.com/lunarmodules/luafilesystem/archive/refs/heads/master.zip unzip luafilesystem-master.zip cd ./luafilesystem-master make INCS=/usr/local/openresty/luajit/include/luajit-2.1 mv ./src/lfs.so /usr/local/openresty/lualib/lfs.so
安装完成后重启OpenResty
,使用测试命令:
curl http://localhost/?t=../../etc/passwd
看到拦截信息则说明安装成功。
Zhongkui-WAF
内置了管理界面,但你依然可以通过直接修改相应配置文件来进行自定义配置。
Zhongkui-WAF
的基本配置在/conf/zhongkui.conf
文件中,你可以对它进行修改。
IP黑名单列表可以配置在/conf/zhongkui.conf
文件中,也可以配置在path-to-zhongkui-waf/rules/ipBlackList
文件中。
不管是基本配置还是规则文件,修改完后都要执行nginx -s reload
命令来重新载入配置。
path-to-zhongkui-waf/rules
目录下是一系列规则文件,文件内容都是json
格式。你可以新增自己的规则,也可以对每条规则进行单独设置,如打开、关闭或者修改其拦截动作等。
拦截动作有如下几种:
allow
:允许当前请求并记录日志。deny
:拒绝当前请求,返回HTTP状态码403并记录日志。redirect
:拒绝当前请求,返回拦截页面并记录日志。coding
:对匹配到的内容进行过滤,替换为*
。redirect_js
:浏览器验证,JavaScript重定向。redirect_302
:浏览器验证,302重定向。一些通用配置项:
state
:该规则的开关状态,on
为开启,off
为关闭。description
:对该规则的描述,便于管理。配置项secret
是Zhongkui-WAF
的私钥,用于浏览器验证请求签名等,应妥善保管,安装后建议修改,格式为任意字符组合,建议较长。
CC攻击配置文件位于path-to-zhongkui-waf/rules/cc.json
,可按单URL