前言
以前在 IIS 7 時,有使用 UrlScan 這個 WAF 來保護 IIS,但目前 UrlScan 已無法用在 IIS 10 上面。
所以可以改使用 ModSecurity ,以下介紹如何在 Windows 2019 有 IIS 的 Web Server 上安裝啟用 ModSecurity 。
實作
1.確定 IIS 已安裝。
2.安裝 ModSecurity
請到 ModSecurity Release
下載 ModSecurityIIS_2.9.4-64b.msi 安裝。



3.啟用 ModSecurity
預設 ModSecurity 是安裝在 C:\Program Files\ModSecurity IIS 目錄。
3.1.到 C:\inetpub\wwwroot 目錄建立一個 modsecurity 的目錄,
3.2.將 C:\Program Files\ModSecurity IIS 目錄中的 modsecurity.conf, modsecurity_iis.conf 及 unicode.mapping 複製到 C:\inetpub\wwwroot\modsecurity 目錄。
3.3.修改 C:\inetpub\wwwroot\web.config ,啟用 ModSecurity 的設定,如下,
1 |
|
預設 ModSecurity 是偵測模式,所以請將它改成啟用,修改 c:\inetpub\wwwroot\modsecurity\modsecurity.conf
將 SecRuleEngine DetectionOnly 改成 SecRuleEngine On ,
並在最後一行加上驗證的 Rule 如下,
1 | SecRule ARGS:testparam "test" "id:1234,deny,status:403,msg:'Our test rule has triggered'" |
Rule是說,如果 QueryString 的參數為 testparam 而且它的值為 test ,就會被 ModSecurity 拒絕,並回傳 403。
4.重啟 IIS,查看事件檢視器中應用程式中的 ModSecurity 是否有無錯誤(如果沒看到,可以直接用 Browser 連 http://localhost)。

5.測試 Rule 1234 是否會被擋。
開啟 Browser 連 http://localhost/?testparam=test ,就可以發現,網頁會被 ModSecurity 給擋住了

參考資源
ModSecurity Handbook
The latest supported Visual C++ downloads