ASM網關支持對接WAF,并且可以通過自定義訪問日志格式來查看WAF對回源請求添加的Header,更方便線上運維。本文介紹如何使用ASM網關對接WAF,以及如何使用ASM的自定義訪問日志能力進行調試。
前提條件
已部署入口網關。具體操作,請參見創建入口網關。
已添加集群到ASM實例。具體操作,請參見添加集群到ASM實例。
已部署httpbin應用,并暴露在網關的80端口。具體操作,請參見部署httpbin應用。
WAF功能介紹
Web應用防火墻(Web Application Firewall,簡稱WAF)為您的網站或App業務提供一站式安全防護。WAF可以有效識別Web業務流量的惡意特征,在對流量清洗和過濾后,將正常、安全的流量返回給服務器,避免網站服務器被惡意入侵導致性能異常等問題,從而保障網站的業務安全和數據安全。
步驟一:將ASM網關接入WAF
ASM支持四層CLB和CNAME這兩種方式接入WAF。兩種方式使用場景不同,請根據需求選擇。
四層CLB接入(推薦):將ASM網關的CLB接入(原SLB)。這種方式可以直接將網關的所有流量接入WAF。所有到達網關CLB的請求都會執行WAF規則。
CNAME接入:將指定域名的請求接入。如果一個ASM網關上有多個域名,并非所有域名都需要WAF防護,可以采用這種方式。
說明CNAME接入需要修改域名的DNS的解析規則。請將您的域名先指向WAF代理,然后WAF再將請求傳給ASM網關。
方式一:四層CLB接入
登錄Web應用防火墻控制臺,按照您的需求單擊購買包年包月或開通按量付費,仔細確認地域等配置項后,單擊立即購買創建WAF3.0實例。如果您已創建WAF實例,可以使用已有實例。
在左側導航欄,選擇接入管理。在接入管理頁面,選擇云產品接入頁簽,單擊CLB(TCP),在右側區域單擊接入。
在接入資產-四層CLB面板列表中,找到網關綁定的CLB,單擊添加端口。選擇ASM網關上的對應端口。端口配置完,單擊確定。
本文選擇的是HTTP協議的80端口。如果您需要選擇HTTPS協議,需要在此處配置HTTPS證書。
說明您可以登錄ASM控制臺,在網關詳情頁查看網關對應的CLB實例信息。
選中啟用流量標記。配置三個Header,然后單擊確定,完成配置。
如果請求攜帶該Header,則可以認為該請求經過了WAF防護。三個Header的內容分別是:自定義Header
customwaftag:customwaftagvalue
、客戶端真實源IPclientrealip
以及客戶端真實源端口clientrealport
。
方式二:CNAME接入
登錄Web應用防火墻控制臺,按照您的需求單擊購買包年包月或開通按量付費,仔細確認地域等配置項后,單擊立即購買創建WAF3.0實例。如果您已創建WAF實例,可以使用已有實例。
在左側導航欄,選擇接入管理,然后在接入管理頁面,選擇CNAME接入頁簽,單擊接入。
在配置監聽配置向導,進行相關配置,單擊下一步。
中國內地的WAF會校驗域名是否備案。請填寫有效的域名,避免校驗失敗。配置示例如下。
在配置轉發配置向導,負載均衡算法選中IP hash,服務器地址選中IP,填寫ASM網關的公網地址。選中啟用流量標記,添加三個Header,其他配置項保持默認,單擊提交。
該配置會在通過WAF發往ASM網關的請求中添加對應的三個Header。三個Header的內容分別是:自定義Headercustomwaftag:customwaftagvalue、客戶端真實源IPclientrealip以及客戶端真實源端口clientrealport。
在接入完成配置向導,單擊復制CNAME,記錄WAF提供的CNAME地址,然后單擊完成。
說明采用CNAME接入,需要您將此處配置的域名的DNS記錄指向WAF提供的CNAME地址。
(可選)步驟二:自定義ASM訪問日志格式
經過WAF校驗的請求可能會攜帶一些特殊的Header。例如,步驟一配置轉發時在請求中添加了一個自定義Header和兩個標識請求源IP、源端口的Header。在將線上應用接入WAF時,如果不能在調用鏈路的日志中看到這個Header,將會給鏈路聯調造成極大困難。這種情況下,您可以使用ASM可觀測能力的自定義訪問日志功能。具體操作,請參見自定義數據面訪問日志。
步驟三:測試是否接入WAF成功
方式一:采用四層CLB接入
使用四層CLB接入WAF,直接訪問網關的IP地址。在瀏覽器中輸入${ASM網關IP地址}:80/status/418
。
預期輸出:
-=[ teapot ]=-
_...._
.' _ _ `.
| ."` ^ `". _,
\_;`"---"`|//
| ;/
\_ _/
`"""`
方式二:采用CNAME接入
使用WAF提供的CNAME地址,執行以下命令,訪問httpbin應用的/status/418
路徑。
curl -HHost:${WAF處配置的域名} "http://${WAF提供的CNAME地址}/status/418" -v
* Trying x.x.x.x:80...
* Connected to geszcfxxxxxxxxxxxxxxxxxxxxppbeiz.aliyunwaf1.com (x.x.x.x) port 80 (#0)
> GET /status/418 HTTP/1.1
> Host:xxxx
> User-Agent: curl/7.84.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 418 Unknown
< Date: Wed, 22 Feb 2023 05:07:23 GMT
< Content-Length: 135
< Connection: keep-alive
< Set-Cookie: acw_tc=0bc1599a16770424432844282e82xxxxxxxxxxxxxxxxxxx1ad989e7e5245f;path=/;HttpOnly;Max-Age=1800
< server: istio-envoy
< x-more-info: http://tools.ietf.org/html/rfc2324
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 1
<
-=[ teapot ]=-
_...._
.' _ _ `.
| ."` ^ `". _,
\_;`"---"`|//
| ;/
\_ _/
`"""`
此處并沒有使用原始域名訪問。如需使用原始域名訪問,請您自行修改域名解析規則,將原始域名解析到WAF提供的CNAME地址。
步驟四:查看網關日志中WAF添加的Header值
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在網關日志標簽頁的文本框中輸入418,單擊查詢/分析。
您可以看到日志中已經打印出了WAF添加的Header值。
對接完成之后,您可以登錄WAF控制臺配置其他更高級的防護能力,保護您的網站不受攻擊,更多防護配置信息,請參見圖說防護配置。如果您還有其他自定義Header需要全鏈路觀測,請參考步驟二中的方式配置。