ModSecurity:执行阶段只能由链启动规则指定
ModSecurity: Execution phases can only be specified by chain starter rules
在 modsecurity 默认脚本中:
base_rules/modsecurity_crs_20_protocol_violations.conf
有规则,960011:
SecRule REQUEST_METHOD "^(?:GET|HEAD)$" \
"msg:'GET or HEAD Request with Body Content.',\
severity:'2',\
id:'960011',\
ver:'OWASP_CRS/2.2.9',\
rev:'1',\
maturity:'9',\
accuracy:'9',\
phase:1,\
block,\
logdata:'%{matched_var}',\
t:none,\
tag:'OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ',\
tag:'CAPEC-272',\
chain"
SecRule REQUEST_HEADERS:Content-Length "!^0?$"\
"t:none,\
setvar:'tx.msg=%{rule.msg}',\
setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},\
setvar:'tx.%{rule.id}-OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ-%{matched_var_name}=%{matched_var}'"
我只想禁用此规则的日志记录(它给出了太多误报),
因此添加我自己的脚本
base_rules/z99_logging_suppress.conf
删除默认规则并创建一个新的相同的规则 -- 仅不记录:
SecRuleRemoveById 960011
SecRule REQUEST_METHOD "^(?:GET|HEAD)$" \
"msg:'GET or HEAD Request with Body Content.',\
severity:'2',\
id:'9960011',\
ver:'OWASP_CRS/2.2.9',\
rev:'1',\
maturity:'9',\
accuracy:'9',\
phase:1,\
block,nolog,\
logdata:'%{matched_var}',\
t:none,\
tag:'OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ',\
tag:'CAPEC-272',\
chain"
SecRule REQUEST_HEADERS:Content-Length "!^0?$"\
"t:none,\
setvar:'tx.msg=%{rule.msg}',\
setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},\
setvar:'tx.%{rule.id}-OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ-%{matched_var_name}=%{matched_var}'"
与原始规则的唯一区别是 新 ID 9960011 和 nolog 添加:
...
id:'9960011',\
...
block,nolog,\
...
但是当我用这个附加规则重新启动 httpd 时,我得到错误:
AH00526: Syntax error on line 18 of /path/base_rules/z99_logging_suppress.conf:
ModSecurity: Execution phases can only be specified by chain starter rules.
同样的策略 --- SecRuleRemoveById + 然后用新的 id 重新创建它 --- 适用于我尝试过的所有其他默认规则,但不适用于这个。
谁能告诉我这是为什么?
它基本上是说 phase
命令只能在链中的第一个规则中,而不能在构成链的一部分的后续规则中。
你写的规则没有问题,阶段只在第一个SecRule
中指定。事实上,我已经在我的实例上尝试过它并且它有效。所以两件事中的任何一件都出了问题:
- 您将其错误地复制并粘贴到了这个问题中。
- 上面你定义它的规则,里面有链,所以留下了一个开放的链,你的规则 9960011 然后有效地试图继续从。
或者其他奇怪的事情发生了!但我现在选择 1 或 2:-)
在 modsecurity 默认脚本中:
base_rules/modsecurity_crs_20_protocol_violations.conf
有规则,960011:
SecRule REQUEST_METHOD "^(?:GET|HEAD)$" \
"msg:'GET or HEAD Request with Body Content.',\
severity:'2',\
id:'960011',\
ver:'OWASP_CRS/2.2.9',\
rev:'1',\
maturity:'9',\
accuracy:'9',\
phase:1,\
block,\
logdata:'%{matched_var}',\
t:none,\
tag:'OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ',\
tag:'CAPEC-272',\
chain"
SecRule REQUEST_HEADERS:Content-Length "!^0?$"\
"t:none,\
setvar:'tx.msg=%{rule.msg}',\
setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},\
setvar:'tx.%{rule.id}-OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ-%{matched_var_name}=%{matched_var}'"
我只想禁用此规则的日志记录(它给出了太多误报), 因此添加我自己的脚本
base_rules/z99_logging_suppress.conf
删除默认规则并创建一个新的相同的规则 -- 仅不记录:
SecRuleRemoveById 960011
SecRule REQUEST_METHOD "^(?:GET|HEAD)$" \
"msg:'GET or HEAD Request with Body Content.',\
severity:'2',\
id:'9960011',\
ver:'OWASP_CRS/2.2.9',\
rev:'1',\
maturity:'9',\
accuracy:'9',\
phase:1,\
block,nolog,\
logdata:'%{matched_var}',\
t:none,\
tag:'OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ',\
tag:'CAPEC-272',\
chain"
SecRule REQUEST_HEADERS:Content-Length "!^0?$"\
"t:none,\
setvar:'tx.msg=%{rule.msg}',\
setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},\
setvar:'tx.%{rule.id}-OWASP_CRS/PROTOCOL_VIOLATION/INVALID_HREQ-%{matched_var_name}=%{matched_var}'"
与原始规则的唯一区别是 新 ID 9960011 和 nolog 添加:
...
id:'9960011',\
...
block,nolog,\
...
但是当我用这个附加规则重新启动 httpd 时,我得到错误:
AH00526: Syntax error on line 18 of /path/base_rules/z99_logging_suppress.conf:
ModSecurity: Execution phases can only be specified by chain starter rules.
同样的策略 --- SecRuleRemoveById + 然后用新的 id 重新创建它 --- 适用于我尝试过的所有其他默认规则,但不适用于这个。
谁能告诉我这是为什么?
它基本上是说 phase
命令只能在链中的第一个规则中,而不能在构成链的一部分的后续规则中。
你写的规则没有问题,阶段只在第一个SecRule
中指定。事实上,我已经在我的实例上尝试过它并且它有效。所以两件事中的任何一件都出了问题:
- 您将其错误地复制并粘贴到了这个问题中。
- 上面你定义它的规则,里面有链,所以留下了一个开放的链,你的规则 9960011 然后有效地试图继续从。
或者其他奇怪的事情发生了!但我现在选择 1 或 2:-)