本文主要介绍如何通过SecRemoteRules指令,来加载放置在远程服务器中的规则文件。
一、应用场景
该方法适合服务器数量众多,但经常需要更新规则的运维人员。
作为景安网络产品经理,本人在通过使用ModSecurity为20万个网站进行基础防护时,由于云服务器数量巨大,每次更新规则后,都需要将新的规则文件同步到所有的服务器当中,虽然可以通过工具将规则文件进行批量自动上传,但是直接将规则放置在远程服务器当中,然后由业务服务器自动加载,更能减少运维工作量。
二、指令介绍
SecRemoteRules允许从指定的某个HTTPS站点上的文件来加载规则,语法如下:
SecRemoteRules some-key https://www.yourserver.com/plain-text-rules.txt
some-key意味着可以定义一个key值,远程服务器可以根据key值,来判断要返回哪些规则内容,或是否返回规则内容,当然,随便定义一个key值,远程服务器不进行任何判断也可以。
使用SecRemoteRules后,WEB服务在启动时,ModSecurity会访问配置的HTTPS路径来读取远程文件中的规则,而与此同时,请求头中会增加三个参数:ModSec-unique-id、ModSec-status、ModSec-key,如下所示:
GET /plain-text-rules.txt HTTP/1.1 User-Agent: modesecurity Host: www.yourserver.com Accept: */* ModSec-unique-id: e781ee72979d16cd91ed89c716dc087f195d7cb8 ModSec-status: 2.9.3,(null),1.5.2/1.5.2,8.43/8.43 2019-02-23,Lua 5.1,2.9.9,e781ee72979d16cd91ed89c716dc087f195d7cb8 ModSec-key: MkIe2c8pIK8AI2g5mXipvl4x
其中,ModSec-key的值就是定义的key值,在实际中我将其设置为了MkIe2c8pIK8AI2g5mXipvl4x。
四、用法步骤
远程服务器需要搭建一套简单的WEB环境,Nginx、Apache、IIS或其他WEB服务均可,然后开启HTTPS访问,SSL证书申请阿里云的免费证书即可。
然后,在安装成功ModSecurity之后,使用SecRemoteRules指令,将远程规则文件添加到modsecurity.conf文件中即可,如下所示:
Include /usr/local/nginx/conf/modsecurity/crs-setup.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/customize.conf Include /usr/local/nginx/conf/modsecurity/rules/*.conf
上述规则表示,将OWASP的规则放置在本地,然后远程服务器放置了一个customize.conf的规则文件,文件中主要放置一些更新比较频繁的自定义规则,此时请注意!之所以将加载远程规则的语句放置在第二位,是因为首先要加载OWASP规则的默认配置,即crs-setup.conf。
当然,我们也可以直接将OWASP的所有规则全部放置在远程服务器当中,然后通过以下方式进行加载(内容需复制到modsecurity.conf末尾):
SecRemoteRules 123 https://rules.modsecurity.cn/crs-setup.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-901-INITIALIZATION.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-903.9001-DRUPAL-EXCLUSION-RULES.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-903.9002-WORDPRESS-EXCLUSION-RULES.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-903.9003-NEXTCLOUD-EXCLUSION-RULES.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-903.9004-DOKUWIKI-EXCLUSION-RULES.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-903.9005-CPANEL-EXCLUSION-RULES.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-903.9006-XENFORO-EXCLUSION-RULES.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-905-COMMON-EXCEPTIONS.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-910-IP-REPUTATION.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-911-METHOD-ENFORCEMENT.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-912-DOS-PROTECTION.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-913-SCANNER-DETECTION.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-921-PROTOCOL-ATTACK.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-934-APPLICATION-ATTACK-NODEJS.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-944-APPLICATION-ATTACK-JAVA.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-949-BLOCKING-EVALUATION.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-950-DATA-LEAKAGES.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-959-BLOCKING-EVALUATION.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-980-CORRELATION.conf SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
但此时请注意,由于OWASP规则中除了规则文件外,还有一些后缀为.data的数据文件,如下所示:
如果上述数据文件也放置在了远程服务器中,那么引用这些数据的规则(通过pmFromFile指令进行引用),也需要把路径改为远程服务器的路径,如REQUEST-913-SCANNER-DETECTION.conf文件中ID为913100的规则,原内容如下:
SecRule REQUEST_HEADERS:User-Agent "@pmFromFile scanners-user-agents.data" \ "id:913100,\ phase:2,\ block,\ capture,\ t:none,t:lowercase,\ msg:'Found User-Agent associated with security scanner',\ logdata:'Matched Data: %{TX.0} found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',\ tag:'application-multi',\ tag:'language-multi',\ tag:'platform-multi',\ tag:'attack-reputation-scanner',\ tag:'paranoia-level/1',\ tag:'OWASP_CRS',\ tag:'OWASP_CRS/AUTOMATION/SECURITY_SCANNER',\ tag:'WASCTC/WASC-21',\ tag:'OWASP_TOP_10/A7',\ tag:'PCI/6.5.10',\ ver:'OWASP_CRS/3.2.0',\ severity:'CRITICAL',\ setvar:'tx.anomaly_score_pl1=+%{tx.critical_anomaly_score}',\ setvar:'ip.reput_block_flag=1',\ setvar:'ip.reput_block_reason=%{rule.msg}',\ expirevar:'ip.reput_block_flag=%{tx.reput_block_duration}'"
此时就需要修改scanners-user-agents.data数据文件的路径,即“@pmFromFile scanners-user-agents.data”,需要改成“@pmFromFile https://rules.modsecurity.cn/rules/scanners-user-agents.data”,个人建议,如果不会编写脚本进行批量替换的话,可以使用Notepad++,通过Ctrl+H,将"pmFromFile "(注意,包含后面的空格),替换为“pmFromFile https://你的域名/文件夹名/”。
五、其他补充
1、目前只有ModSecurity V3版本支持配置多个SecRemoteRules指令,其他版本只能配置一条SecRemoteRules指令,也就是说,如果使用的不是ModSecurity V3版本,所有规则都需要放置在一个文件中,且规则必须一行一个,不能像OWASP规则那样,一条规则可以通过"\"来拆分成多行;
2、经本人测试发现,ModSecurity 2.9.3无法使用SecRemoteRules指令,ModSecurity 2.9.2在与Apache搭配使用时可使用SecRemoteRules指令。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。