OpenResty WAF配置
源码
/www/server/jh-panel/plugins/op_waf
目录。可在此处修改代码,在面板重新加载后生效。
安装
/www/server/op_waf/
是安装目录。
日志
/www/server/op_waf/logs/
目录下的 sqlite 数据库中。
拦截规则
CC 防御、恶意容忍度只有全局配置,站点是无效的,源码中对应的修改函数是空的。其他规则不区分全局、站点。
请求命中 IP 黑名单时,面板的封锁历史中没有日志,源码并没有打印。
恶意容忍度的拦截规则:每命中一条拦截规则,计数器加 1,到达阙值时,封锁此 IP 的请求。判定是否到达阙值的代码在/www/server/jh-panel/plugins/op_waf/waf/lua/init.lua
-> waf_drop_ip()
。计数的代码在 /www/server/jh-panel/plugins/op_waf/waf/lua/waf_common.lua
-> _M.write_log()
。
涉及三个目录:
/www/server/jh-panel/plugins/op_waf
,OP 防火墙的源码目录/www/server/op_waf
,OP 防火墙的安装目录/www/server/web_conf/nginx/lua
运行时的配置目录
OpenResty 的配置文件/www/server/openresty/nginx/conf/nginx.conf
会引用/www/server/web_conf/nginx/lua/lua.conf
,是配置的起点。
规则拦截的起点:/www/server/jh-panel/plugins/op_waf/waf/lua/init.lua
->waf()
。
/www/server/op_waf/waf/conf
目录的文件是面板根据站点、配置自动生成的。
配置重加载的逻辑在 /www/server/jh-panel/plugins/op_waf/index.py
-> makeDstLua()
。以源码目录/www/server/jh-panel/plugins/op_waf/lua
为模板,加载到/www/server/web_conf/nginx/lua/
。文件对应关系:
/www/server/jh-panel/plugins/op_waf/lua/init_preload.lua
->/www/server/web_conf/nginx/lua/init_by_lua_file/waf_init_preload.lua
;/www/server/jh-panel/plugins/op_waf/lua/init_worker.lua
->/www/server/web_conf/nginx/lua/init_worker_by_lua_file/opwaf_init_worker.lua
;/www/server/jh-panel/plugins/op_waf/lua/init.lua
->/www/server/web_conf/nginx/lua/access_by_lua_file/opwaf_init.lua
;
init_by_lua_file
, init_worker_by_lua_file
, access_by_lua_file
目录里的文件分别被合并成init_by_lua_file.lua
, init_worker_by_lua_file.lua
, access_by_lua_file.lua
。这三个文件在/www/server/web_conf/nginx/lua/lua.conf
里被引用。
init_by_lua_file.lua
用于设置全局路径变量。
init_worker_by_lua_file.lua
用于异步统计 CPU 使用信息、拦截计数、清除过期日志。
access_by_lua_file.lua
用于拦截规则的处理。
这三个文件的加载过程见:LuaNginxModule