建立 WAF 規則(WAF Rules)
延續 4. 建立域名(Domain),這篇文章將會說明如何配置 WAF(Web Application Firewall) 規則。你可以把 WAF 想像成用戶訪問網站前必須符合的條文或規範,符合規則的人可以訪問你的網站,不符合的人則要呈現錯誤頁面或拒絕存取的資訊……等等。
目前範例網頁 http://nindomain.ninja.tw 的畫面如下:
如果我想要拒絕所有用戶存取範例網頁 https://nindomain.ninja.tw ,我可以在平台上配置一條 WAF 規則。這篇文章將會完成下圖第 6 點,在 EDGE 上新增名為deny_all 的 WAF 規則。
進入域名管理 / WAF 規則的頁面,並按下左上角的「創建」。
以示範新增 WAF 規則 deny_all 來說:
- 找到「規則名稱」的欄位,填寫 deny_all。
- 接著找到「動作」的欄位,選擇「Deny」。
- 按下儲存。
完成後,就會看到剛剛創建的 WAF 規則 deny_all 顯示出來了。
接下來,切換到域名管理 / 域名物件 / 域名配置的頁面,找到操作的欄位,按下修改 nindomain.ninja.tw。
往下滑動修改的表單,找到「WAF 規則」的欄位,選擇剛剛建立的 deny_all,把該條 WAF 規則從「可用規則」移動到「應用規則」,並按下儲存。
再度瀏覽範例網頁 https://nindomain.ninja.tw,出現錯誤頁面,說明如下:
- 錯誤:01 - 01 - 000 是平台的請求日誌狀態碼,代表「平台主動斷開 - 命中 WAF 規則裡的 deny 動作 - Lua API」。
- 錯誤碼:代表這一次請求的事件 ID。
- 時間軸:請求當下的日期與時間。
- 識別:請求者的 IP。
- 狀態:HTTP 狀態碼,此處的 403 表示伺服器有成功解析請求,但用戶沒有權限可以訪問。
另外,有了上面提到的錯誤碼 82399288746156f9558040f57dce2728,你還可以切換到事件查詢 / 事件查詢 / 原始數據的頁面,並將錯誤碼貼到中間的「 Search 事件 ID」,就可以看到該次請求被 WAF 規則擋下的紀錄囉!
2. WAF 規則可以應用的場景與情況非常多元,可以參考 INODENINJA WAF 物件說明,了解更多 WAF 參數的用途。
3. 有關平台的請求日誌狀態碼,可以延伸閱讀 iNODE NINJA 請求日誌狀態碼。
4. 如果你想套用自己撰寫的錯誤頁面,可參考建立 HTML 頁面(HTML Pages)
延伸應用
除了在 EDGE 阻擋用戶訪問域名,也可以在 SLB 攔截特定用戶的請求嗎?
回到域名管理 / WAF 規則頁面,找到操作的欄位,按下修改 deny_all。
以示範修改 WAF 規則 deny_all 來說:
- 找到「觸發 Period 阻擋」的欄位,開啟開關。
- 接著找到「使用 L3 阻擋」的欄位,開啟開關。
- 按下儲存。
完成上述設定後,請求會如下圖所示:第一次會先經由 EDGE 阻擋(L7 阻擋),倘若用戶在阻擋時間內(平台預設是 300 秒,即上圖的「阻擋時間」欄位)再度訪問該域名,就會直接由 SLB 攔截(L3 阻擋)。
當請求是直接由 SLB 攔截,瀏覽範例網頁 https://nindomain.ninja.tw 時,出現錯誤頁面會與由 EDGE 阻擋的錯誤頁面不同。