WAF防火牆規則攻略:13個高階使用技巧,安全防線再升級!
13個高階WAF防火牆規則的使用技巧,讓您網站安全防線再升級!iNODE NINJA智慧CDN建立平台,不僅能快速幫您建立私有CDN服務,同時內建高階WAF防火牆!詳細WAF規則佈署與使用情境,為您完整公開!
內容包括:
- WAF防火牆是什麼?
- 為何CDN服務需要高階WAF防火牆
- WAF防火牆規則中的「條件」與「動作」
- 如何活用WAF防火牆規則、使用情境
WAF防火牆是什麼?CDN服務必備,安全性飆升!
WAF防火牆是一種保護網站的安全機制,可以監控和過濾網路流量,檢測和阻擋惡意攻擊,特別在阻擋「第七層攻擊」(Layer 7 DDoS attack)方面扮演關鍵角色。iNODE NINJA智慧CDN建立平台,不僅能快速幫您建立私有CDN服務,同時內建高階WAF防火牆,您可以透過佈署、調整WAF防火牆規則,為網站擋下不斷變化攻擊方法和技術以規避偵測的第七層攻擊。
WAF防火牆:每一種特徵都有規則,99%的準確保證
iNODE NINJA的高階WAF防火牆提供極彈性的WAF規則設定,且建立與調整WAF規則僅須數分鐘,配合平台上監控面板的流量數據、攻擊告警等,管理者能立即分析惡意請求特徵,並佈署WAF規則阻擋,高達數十種條件與動作設定,能打造強大精準的防禦壁壘。
WAF防火牆規則攻略:13種「動作」與12種「條件」完全解析!
WAF規則可以做什麼?
當管理者發現惡意請求流量的特徵後,利用WAF(Web Application Firewall網站應用程式防火牆)能控制掌握網站存取控制的特性,定義WAF規則的「條件」以及滿足條件時觸發的「動作」,以限制可疑流量通過。除常見的黑白名單外,高階的WAF還能配置跳轉、速度限制等多種規則。
如何使用WAF規則組(WAF物件)?
您可以將「WAF物件」想像成「規則組」,規則組可以分為「條件」與「動作」兩部份,使用起來相當容易,只要符合「條件」,便會採取「動作」。比如條件設定「IP 1.2.3.4」且動作為「阻擋」,那就代表只要符合IP 1.2.3.4
就會採取「阻擋」的動作。您只要撰寫一次WAF物件,便可以套用在多個域名(或專案1)之中使用,此種方式能夠讓您的配置更靈活。
註1:專案指的是被分類於同一群組的域名,一旦在專案套用WAF規則,則專案內的所有域名皆受WAF規則保護。
WAF防火牆規則:12種「條件」介紹
判斷方式:單一WAF規則中有2個條件
- 同時滿足2個條件
單一規則中,各個WAF條件之間的判斷方式為「and」。假設在一條WAF中同時設定了「IP地址: 1.1.1.1」以及「請求URI: /example」兩項條件,並且動作為「阻擋」時,當請求同時滿足ip = 1.1.1.1
以及uri =
/example
兩項條件就會觸發阻擋動作。
- 滿足任1條件
單一規則中,若有多重條件,可透過「換行」表示不同的條件內容,而此時判斷的方法為「or」,假設在IP地址中設定了1.1.1.1/32以及2.2.2.2/32.這時請求的IP只要是1.1.1.1或者是2.2.2.2都會觸發該條件。
條件1:IP地址
使用用戶的IP地址為條件時,填寫格式為<IP>/<netmask>
。比如1.2.3.4/32
代表單一個IP;1.2.3.0/24
則代表1.2.3.0 – 1.2.3.255整段IP。
使用情境:如果想要阻擋1.2.3.0/24網段的請求,可以設定動作為Deny、條件為IP: 1.2.3.0/24的規則。
條件2:請求URI
當用戶請求網站的URI「包含」填寫的內容時即觸發條件。比如填寫/image,那麼預期符合的URI如下:
/image/a.png→包含/image
,符合條件
/image/b.png→包含/image
,符合條件
/assets/image/c.jpeg→包含/image
,符合條件
此項條件設定支援變數和正規表示式,不過如果設定的條件中包含非英文字母時,會需要將該段文字進行URL編碼後填入才能正常判斷。例如,判斷條件中需包含「/測試」時,就會需要先將測試進行URL編碼成%E6%B8%AC%E8%A9%A6
之後填入/%E6%B8%AC%E8%A9%A6
才能正確判斷。
小技巧:如果我們只需要/image
在URI開頭的話, 我們可以這樣去配置^/image
;而如果需要指定URI在結尾的話,我們可以使用/image$
。
使用情境:如果想針對請求帶有/picture開頭的內容,限制請求速率的話,可以設定動作為Speed Limit、條件為URI: ^/picture的WAF規則。
條件3:請求表頭
此項條件設定同樣支援變數
和正規表示式,需注意的是,空格也包含在判斷條件內。例如:test:blank
跟test: blank
就是不一樣的條件。另外,如果該項條件需要判斷非英文字母時,只需直接將其填入即可正常判斷。
假設判斷條件中需包含test:測試
表頭時,只需直接填入test:測試
即可。
小技巧:如果將WAF套入至專案(APP Profile,同一群組)中,裡面的域名都享有相同設定;此時如果需要針對特定域名做配置,可以使用Host
表頭來指定,比如配置Host:inodeninja.net
,那就只有專案中的這個域名會命中條件。
使用情境:以APP Profile(域名群組)來說,如果設定的規則只想套用於群組內的某些域名,如,觸發跳轉其他頁面(維護畫面等)可設定動作為Redirect、條件為Host: domain的WAF規則。
條件4:Request Headers Not Exist(請求無包含哪些表頭)
請求沒有包含哪些表頭時,觸發該條件,此條件換行設定多項時判斷為and。假設今天設定了user-agent
以及host
兩項條件時,請求表頭只要缺少user-agent或者host其中之一就會觸發該條件。
條件5:來源國家
請求用戶所屬的國家,可複選。
使用情境:如果只想允許特定國家的用戶訪問網站,可設定動作為Deny、條件先選取所有國家,在移除想允許的國家名稱的WAF規則。
條件6:線路商
請求用戶的線路商提供者,如果線路商名稱有包含特殊符號需使用跳脫符號.例如,線路商名稱為example (demo),那設定時就須填寫example \(demo\)
才會正常觸發。
使用情境:如果只想允許信任的線路商訪問網站,可設定動作為Allow、條件設定為該線路商名稱的WAF規則。
條件7:Proxy Type
使用ip2proxy的資料庫判斷請求的代理類型。
小技巧:如何得知用戶的Proxy Type?進入https://www.ip2proxy.com後,輸入請求ip可得知其代理類型。
使用情境:如果不想用戶透過DCH的代理訪問的話,可以設定動作為Deny、條件設定為DCH的WAF規則。
條件8:請求方法
HTTP請求當中的Method屬性,支援「GET」、「POST」、「PURGE」、「PUT」、「HEAD」、「OPTIONS」、「DELETE」與「PATCH」。
使用情境:如果不希望用戶使用網站沒有支援的請求方法(Ex: DELETE),可以設定動作為Deny、條件設定為DELETE的WAF規則。
條件9:請求速率
當「同一個用戶(IP)」在一定時間內存取次數超過N次時觸發條件。填寫方式為<請求次數>/時間(秒)
;比如,填寫5/2
,代表同一個使用者在2秒內存取5次時,會觸發條件。
使用情境:如果不希望用戶同時間重複訪問網站(如,一直重新整理),可以設定動作為Block Period、條件為3/10的WAF規則來限制用戶。
條件10:Not Source IP(排除非指定的來源IP)
當請求的IP「不等於」設定的條件時觸發。
使用情境:類似於白名單,可以設定動作為Deny、條件為信任的IP的WAF規則。
條件11:Not Request URI(排除非指定的請求URI)
當請求的URI「不等於」設定的條件時觸發,此項條件設定支援方式跟「請求URI」相同。
使用情境:類似於白名單,可以設定動作為Deny,條件為信任的URI的WAF規則。
條件12:Not Request Headers(排除非指定的請求表頭)
當請求的表頭「不等於」設定的條件時觸發,此項條件設定支援方式跟「請求表頭」相同。
使用情境:類似於白名單,可以設定動作為Deny,條件為信任的Header的WAF規則。
WAF防火牆規則:13種「動作」介紹
動作1:Allow(允許)
「允許」達到您設定條件的請求,正常訪問源站(origin server)。當用戶的請求達到此條件時,後續的動作2就不會再判斷。
註2:請見文末的「配置順序」。如果只想讓特定對象訪問,需搭配「Deny」使用,在文末的「示範」中有更詳細的說明。
動作2:Deny(阻擋)
根據設定條件對請求進行「阻擋」。同時,可設置「阻擋頁面」,當用戶的請求觸發條件時,會看到事先設定的頁面,您可以選擇預設的頁面或者自行上傳客製化頁面。
進階設定:
將「觸發Period阻擋」的開關打開時,有更多功能可以設定:
- 觸發Period阻擋頻率:與「請求速率」的判斷方式相同。
- 阻擋時間:進入
Block Period
的時間。 - 群組設定:是否要阻擋整個群組或者只阻擋有設定此動作的域名。
- 使用L3阻擋3:要在SLB(L3)就直接阻擋,還是透過EDGE(L7)阻擋。
註3:開啟L3阻擋並且觸發條件之後,約需兩分鐘才會生效在SLB阻擋,關閉也是需要兩分鐘。
動作3:Speed Limit(限速)
限制用戶頻寬(流量),因此用戶端的內容下載速度會變慢。您可以在限速的欄位設定限制的流量,至少要大於0。
動作4:Redirect(重新導向)
當請求命中設定的條件時,能將請求跳轉至您設定的網址,並且可以設定跳轉的原因,如HTTP 301、HTTP 302、HTTP 307。
動作5:Cookie / JS Challenge
當請求命中設定的條件時,將對用戶發送驗證,分辨是否為合法瀏覽器發出的請求。
動作6:Gesture Challenge(圖形驗證)
為了防止偽裝成瀏覽器的機器人來請求,可以進行手勢驗證,來確保用戶是正常用戶。
動作7:Log(觀察模式)
當請求達到設定的條件時,請求會被記錄在事件查詢中,但不會採取其他動作(觀察模式)。
動作8:Block Period(阻擋時間)
當請求達到設定的條件時,將阻擋用戶一段時間(可設定時長)。
進階設定:
- 阻擋時間:進入「Block Period」的時間。
- 群組設定:整個群組裡的域名或者只有設定的域名。
- 使用L3阻擋4: 要在SLB(L3)就直接阻擋,還是透過EDGE(L7)阻擋。
註4:開啟L3阻擋並且觸發條件之後,約需兩分鐘才會生效在SLB阻擋,關閉也是需要兩分鐘
動作9:Set Request Headers(設定請求表頭)
當用戶的請求到達CDN時,加上設定的表頭。可以使用預設的變數
來添加相關資訊。
使用情境:如果想在源站知道用戶請求的port,可以設定動作為Set Request Headers,其中設定請求表頭填入: X-Client-Port:$dstport,這樣用戶的請求經過CDN時,就會加上此表頭回到源站。
動作10:Set Response Headers(設定回應表頭)
設定「從CDN回應至用戶」的回應表頭,較常使用在跨源資源共享(CORS)5的情況。
註5:CORS(Cross-Origin Resource Sharing)是一種用於瀏覽器的網路安全機制,它允許網頁應用程式在瀏覽器中與不同來源(domain)的資源進行互動,而不會被同源政策(Same-Origin Policy)所阻擋。同源政策是一種瀏覽器的安全機制,它限制了網頁中不同來源之間的資源交換,例如 JavaScript 腳本、Cookie、XHR 請求等。換句話說,同源政策要求網頁應用程式只能訪問與自身同源的資源,即具有相同的協定(http或https)、主機名稱(domain)和埠號(port)。 CORS透過在HTTP回應表頭中添加額外的訊息,告訴瀏覽器哪些跨域請求是被允許的。例如,在設定回應表頭中設定:Origin:$host標頭,表示請求的源頭,而伺服器可以在回應中添加一個Access-Control-Allow-Origin表頭,表示允許哪些源頭訪問該資源。這樣,瀏覽器就可以根據這些訊息,判斷是否允許跨域請求。
動作11:Custom Page(自訂義頁面)
根據設定條件返回客製化頁面,返回頁面的內容能夠自行設計。
動作12:Origin Policy(回源政策)6
根據設定條件進行回源請求,回源方式能夠自行配置。
註6:在inode-ninja域名管理中,有一項回源政策可以設定不同的源站網址,此政策可以套用在域名物件以及WAF規則中的回源政策,以WAF規則來說,當觸發對應的條件以後CDN就會將用戶的訪問導向回源政策中的網址,而不是域名物件的網址
使用情境:假設購物網站有某些促銷活動只想給特定區域的用戶看到,可以設定規則為Origin Policy(導向促銷活動的網址),條件為特定區域的WAF規則。
動作13:Smart Captcha(圖片驗證)
為了防止請求來自偽裝成瀏覽器的機器人,可進行圖片驗證,以確保用戶是正常用戶。
WAF防火牆規則:配置順序、變數與使用情境
了解了WAF防火牆規則的條件以及動作後,接著將介紹完整WAF防火牆運作的重要功能,包括,WAF規則的「配置順序」以及設定WAF條件時可以使用的「變數」,最後會針對幾種情境示範設定WAF防火牆規則的方法。
WAF防火牆規則的「配置順序」
以上圖為例,假設域名下套用了4條WAF規則,WAF規則將根據由「上至下」的順序依序判斷,因此以上圖而言,順序為allow>deny>captcha>redirect。換言之,當請求來的時候會先判斷allow規則中的條件有沒有觸發,如果觸發的話就會執行allow的動作,如果沒有,才會接續判斷有沒有觸發deny規則中設定的條件。
WAF防火牆規則的「變數」
在設定WAF條件時,iNODE NINJA的CDN管理平台提供了幾種變數供使用,以下為各個變數的介紹。
變數 | 說明 |
---|---|
$host | 請求訪問的域名 |
$request_uri | 請求的uri |
$rip | 請求的ip位置 |
$dstport | 請求訪問的port號 |
$scheme | 請求使用的協議 |
$rootdomain | 請求訪問的「二級域名」以及「根域名」 |
以https://waf.example.com/test?variable=all
為例:
* $host:waf.example.com
* $request_uri:/test?variable=all
* $rip:1.1.1.1
* $dstport:443
* $scheme:https
* $rootdomain:example.com
WAF防火牆規則的「使用示範」
【情境一】設定白名單
假設只想要允許1.2.3.0 – 1.2.3.255整段IP可以訪問源站,其他的ip都直接阻擋在CDN EDGE時,可以這樣做(順序由上至下):
- 設定allow規則,並且在**來源IP**中填寫1.2.3.0/24
- 設定deny規則,並且在**來源IP**中填寫0.0.0.0/0
這樣請求的ip如果屬於1.2.3.0 – 1.2.3.255網段時觸發allow規則進而可以訪問到源站,而如果請求的ip不屬於該網段時不會觸發allow規則,而會觸發deny的規則進而被阻擋.因此可以有效地達成除了特定ip可以訪問源站,其餘都會被阻擋的效果。
【情境二】需要進行圖片驗證,並且只允許中國地區的用戶訪問
假設只希望中國地區的用戶可以訪問,並且在訪問前可以先通過圖片驗證,可以這樣做(順序由上至下):
- 設定smart captcha規則,將條件中的「國家」設定為中國。
- 設定allow規則,將條件中的「國家」設定為中國。
- 設定deny規則,並且在條件中的「來源IP」上填寫0.0.0.0/0。
這樣中國的用戶訪問時會先觸發圖片驗證,驗證通過以後再通過allow規則訪問到源站。而其他國家的用戶訪問時不會觸發smart captcha規則以及allow規則,而會直接觸發deny規則而被阻擋。
相信以上詳盡的WAF防火牆規則策略、設置邏輯與使用情境,能幫助您駕馭高階WAF防火牆,提供更符合自身或客戶期待的CDN服務。
請接著閱讀:自建CDN成功案例:馬來西亞CDN解決方案領導品牌