A. 套件下載
1. Mod_Security:
https://www.apachelounge.com/download/
2. OWASP CRS:
https://github.com/owasp-modsecurity/ModSecurity/blob/v3/master/unicode.mapping
https://github.com/coreruleset/coreruleset/releases
B. 套件解壓縮
1. Mod_Security
解壓縮 mod_security-2.9.15-win64-VS18.zip 至 mod_security-2.9.x-win64-VS18
2. OWASP CRS
解壓縮 coreruleset-4.30.0-minimal.zip 至 coreruleset-4.x.0-minimal
C. 套件安裝
1. Mod_Security
複製檔案
mkdir X:\Apache24\conf\crs
cp unicode.mapping X:\Apache24\conf\crs
cd mod_security-2.9.x-win64-VS18\mod_security
cp mod_security2.so X:\Apache24\modules
cp yajl.dll X:\Apache24\bin
cp mod_security\mod_security_\mod_security\modsecurity.conf-recommended X:\Apache24\conf\crs/\modsecurity.conf
調整 apache 設定檔 httpd.conf
啟用 (取消註解)
LoadModule unique_id_module modules/mod_unique_id.so
新增載入模組
LoadModule security2_module modules/mod_security2.so
新增使用 modsecurity.conf
#Mod Security
<IfModule security2_module>
SecRuleEngine On
Include conf/crs/modsecurity.conf
</IfModule>
啟用 mod_security 阻擋模式 (去掉註解 DetectionOnly)
#SecRuleEngine DetectionOnly
提高 PCRE Match Limit
SecPcreMatchLimit 50000
SecPcreMatchLimitRecursion 50000
設定目錄
SecTmpDir "X:/mod_security/tmp/"
SecDataDir "X:/mod_security/sec/"
SecUploadDir "X:/mod_security/upload/"
調整 audit log 記錄內容
SecAuditLogParts ABCIJDEFHZ
設定audit log 記錄輪替
SecAuditLog "|bin/rotatelogs.exe -l ${DOCROOT}/logs/modsec_audit-%Y%m%d.log 86400"
設定 BIG-5 mapping
SecUnicodeMapFile unicode.mapping 950
遮蔽Web系統版本資訊
SecServerSignature "A Web"
設定不偵測範圍
# Allow IPs
SecRule REMOTE_ADDR "@ipMatch 120.125.80.106" \
"id:50001,phase:1,nolog,allow,ctl:ruleEngine=Off"
SecRule REMOTE_ADDR "@ipMatch 120.125.69.0/25" \
"id:50002,phase:1,nolog,allow,ctl:ruleEngine=Off"
設定自動阻斷多次錯誤連線
# BAN multiple 404 IP
SecAction "id:'1011',phase:1,nolog,initcol:ip=%{REMOTE_ADDR}"
SecRule RESPONSE_STATUS "@streq 404" \
"id:'1012', phase:3, pass, setvar:ip.block_script=+2, expirevar:ip.block_script=600"
#SecRule RESPONSE_STATUS "@streq 403" \
"id:'1013', phase:3, pass, setvar:ip.block_script=+1, expirevar:ip.block_script=600"
SecRule IP:BLOCK_SCRIPT "@ge 5" \
"id:'1019', phase:1, deny, status:403, msg:'IP BANed (404 exceed)'"
修正 CRS 4.x Bug
# *CRS 4.x Bug*
# Apache VirtualHost Redirect will cause Starting phase REQUEST_HEADERS.
# tx.outbound_anomaly_score_threshold should be set in phase:3 instead of phase:1
# https://github.com/coreruleset/coreruleset/issues/3696
SecAction \
"id:'1110',\
phase:3,\
pass,\
nolog,\
setvar:tx.outbound_anomaly_score_threshold=4"
完成設定。
2. OWASP CRS
複製檔案
cd coreruleset-4.30.0-minimal/coreruleset-4.30.0
cp -R * /Apache24/conf/crs
cd /Apache24/conf/crs
cp crs-setup.conf.example crs-setup.conf
設定 crs-setup.conf
啟用阻擋 (去掉註解)
SecDefaultAction "phase:1,log,auditlog,deny,status:403"
SecDefaultAction "phase:2,log,auditlog,deny,status:403"
設置客製化規則
cp REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
編輯客製化規則
SecRule REQUEST_URI "@beginsWith /test.php" \
"id:1001,\
phase:1,\
pass,\
nolog,\
ctl:ruleRemoveById=933xxx,\
ctl:ruleRemoveById=953xxx"
完成設定。
