Cyberpanel的WAF基本废了,我之前用CYberpanel就因为它带WAF,现在OpenLiteSpeed可以自带WAF,那Cyberpanel的意义就不大了。现在简单说说OpenLiteSpeed怎么设置WAF。
一、安装需要的依赖:
apt update
apt install git -y
二、创建和下载OWASP CRS官方规则
1、创建WAF目录:
mkdir -p /usr/local/lsws/conf/modsec
2、克隆最新规则:
git clone https://github.com/coreruleset/coreruleset.git /usr/local/lsws/conf/modsec/crs
3、生成CRS核心配置文件:
cp /usr/local/lsws/conf/modsec/crs/crs-setup.conf.example /usr/local/lsws/conf/modsec/crs/crs-setup.conf
4、自定义规则文件(存放黑白名单、站点放行、屏蔽误报规则,不改动官方规则):
touch /usr/local/lsws/conf/modsec/custom-rules.conf
校验目录生成是否成功:
ls /usr/local/lsws/conf/modsec/crs
# 能看到 crs-setup.conf.example、rules 文件夹代表正常
三、编写 ModSecurity 主配置文件 modsec.conf
1、编辑配置文件:
nano /usr/local/lsws/conf/modsec/modsec.conf
2、黏贴以下完整配置:
# WAF运行总开关 On=拦截攻击;DetectionOnly=仅记录不拦截;Off=关闭
SecRuleEngine On
# 开启POST表单、上传文件检测(必须开启,否则无法拦截注入)
SecRequestBodyAccess On
SecUploadDetectMultipartGlobal On
# 日志配置:仅记录被拦截的403请求,减少磁盘占用
SecAuditEngine RelevantOnly
SecAuditLog /usr/local/lsws/logs/modsec_audit.log
SecAuditLogRelevantStatus "^403|405"
SecAuditLogParts ABIJFZ
# 请求体最大200M,和PHP上传限制统一
SecRequestBodyLimit 209715200
SecRequestBodyLimitAction Reject
# 加载OWASP基础规则
Include /usr/local/lsws/conf/modsec/crs/crs-setup.conf
Include /usr/local/lsws/conf/modsec/crs/rules/*.conf
# 自定义规则(放在最后,优先级最高,覆盖官方规则)
Include /usr/local/lsws/conf/modsec/custom-rules.conf
四、在 OLS 全局配置开启 ModSecurity 模块
1、编辑 OLS 主 web 配置
nano /usr/local/lsws/conf/httpd_config.conf
2、拉到文件最底部,追加三行(若已有 modsecurity 开头配置,先删除旧内容)
modsecurity On
modsecurity_rules_file /usr/local/lsws/conf/modsec/modsec.conf
modsecAsync 1
- modsecurity On:全局启用 WAF
- modsecurity_rules_file:指定我们刚才写好的 WAF 配置文件
- modsecAsync 1:异步 WAF 检测,降低网站访问延迟
五、写入全局优化 + WordPress + Flarum 专属放行规则
1、自定义规则文件:
nano /usr/local/lsws/conf/modsec/custom-rules.conf
复制以下完整内容:
# ===================== 全局通用防护调优 =====================
# 防护等级1,误报最低,适合通用PHP站点
setvar:tx.paranoia_level=1
# 提高攻击分数阈值,轻微可疑请求不拦截
setvar:tx.inbound_anomaly_score_threshold=10
setvar:tx.outbound_anomaly_score_threshold=10
# 允许表单、JSON、上传文件请求类型
setvar:tx.allowed_request_content_type=application/x-www-form-urlencoded|multipart/form-data|application/json|text/plain
# ===================== 全局屏蔽高频通用误报规则 =====================
SecRuleRemoveById 941100
SecRuleRemoveById 941160
SecRuleRemoveById 942100
SecRuleRemoveById 943100
SecRuleRemoveById 949110
SecRuleRemoveById 920350
# ===================== WordPress 专用放行规则 =====================
# 放行后台、登录、API、媒体上传、xmlrpc
SecRule REQUEST_URI "@rx ^/wp-admin|^/wp-login|^/wp-json|^/wp-content/uploads|^/xmlrpc.php" "id:10001,phase:1,pass,nolog,ctl:tx.anomaly_score=-20"
# 放行文章、评论富文本HTML内容,避免保存403
SecRule ARGS_NAMES "@rx ^(content|post_content|comment_content)$" "id:10002,phase:2,pass,nolog,ctl:tx.anomaly_score=-10"
# ===================== Flarum 论坛专用放行规则 =====================
# 放行API接口、登录注册、帖子页面、附件上传
SecRule REQUEST_URI "@rx ^/api|^/login|^/register|^/d/|^/assets|^/storage/uploads" "id:20001,phase:1,pass,nolog,ctl:tx.anomaly_score=-20"
# 放行帖子正文、评论富文本
SecRule ARGS_NAMES "@rx ^(content|text|message|html)$" "id:20002,phase:2,pass,nolog,ctl:tx.anomaly_score=-10"
# ===================== IP白名单模板(取消注释,填入你的公网IP) =====================
# SecRule REMOTE_ADDR "@ipMatch 123.45.67.89 127.0.0.1" "id:99999,phase:1,pass,nolog,ctl:ruleEngine=Off"
# ===================== IP黑名单模板(拦截恶意IP) =====================
# SecRule REMOTE_ADDR "@ipMatch 111.222.33.44" "id:99998,phase:1,log,auditlog,deny,status:403"
六、重载 OpenLiteSpeed,WAF 全部配置生效
/usr/local/lsws/bin/lswsctrl reload
七、校验 WAF 是否部署正常
1、校验 OLS 是否开启 modsecurity
grep modsecurity /usr/local/lsws/conf/httpd_config.conf
# 输出三行我们写入的配置即正常
2、校验 CRS 规则目录存在
ls /usr/local/lsws/conf/modsec/crs/rules/
# 大量 .conf 规则文件存在即可
3、实时查看 WAF 拦截日志(排查 403 报错核心命令)
tail -f /usr/local/lsws/logs/modsec_audit.log
八、日常 WAF 操作分步说明
1、调试模式(网站频繁 403 误拦截时使用)
编辑主 WAF 配置
nano /usr/local/lsws/conf/modsec/modsec.conf
修改开关:
SecRuleEngine DetectionOnly
重载服务
/usr/local/lsws/bin/lswsctrl reload
作用:只记录攻击日志,不拦截页面,根据日志里的 Rule ID 屏蔽误报规则。
2、切回生产拦截模式(调试完成后)
修改 modsec.conf
SecRuleEngine On
重载生效。
3、单个网站临时关闭 WAF(网站根目录 .htaccess)
进入站点目录编辑 .htaccess,添加:
<IfModule mod_security.c>
SecRuleEngine Off
</IfModule>
重载 OLS。
4、全局临时关闭 WAF(应急方案)
编辑 httpd_config.conf,把 modsecurity On 改为 modsecurity Off
执行重载命令
/usr/local/lsws/bin/lswsctrl reload
九、常见问题分步修复
问题 1:ols waf enable 执行后 crs 目录缺失
原因:官方脚本下载 CRS 网络失败。
修复:直接执行本文 二、手动创建 WAF 目录 & 下载 OWASP CRS 完整步骤,绕过 ols 自带安装逻辑。
问题 2:WordPress 编辑文章、上传媒体 403
开启 DetectionOnly 调试模式
执行 tail -f /usr/local/lsws/logs/modsec_audit.log 查看触发的规则 ID
在 custom-rules.conf 添加屏蔽规则,示例:
SecRuleRemoveById 941100
重载 OLS












没有回复内容