OpenLiteSpeed ModSecurity WAF 分步完整部署手册 - 技术宅银魂 - 科技改变生活 - 万事屋

OpenLiteSpeed ModSecurity WAF 分步完整部署手册

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

请登录后发表评论

    没有回复内容

万事屋新帖