準備使用 Web 應用程式防火牆的環境

準備您的環境以使用Oracle Cloud Infrastructure 的「Web 應用程式防火牆 (WAF)」服務來保護您的應用程式。

開始之前

在建立 WAF 原則之前,您需要知道 employee-helidon-lb 負載平衡器的公用 IP 位址已經部署。請參閱將以微服務為基礎的 RESTful Java 應用程式建置到 Oracle Cloud

取得並記下範例員工應用程式之負載平衡器的 EXTERNAL-IP 位址。稍後若要建立 WAF 原則,便需要這麼做。

kubectl get service employee-helidon-lb

前述命令應傳回類似以下的輸出:

NAME                  TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
employee-helidon-lb   LoadBalancer   10.X.X.X       132.X.X.X        80:31437/TCP   5m

Kubernetes 所顯示的 EXTERNAL-IP 與公用 IP 位址相同,這會在您瀏覽至Oracle Cloud Infrastructure 主控台中的「核心>網路>負載平衡器」時顯示。

建立 WAF 原則

若要使用 WAF 保護您的應用程式,您必須先建立 WAF 原則。

  1. 登入Oracle Cloud Infrastructure 主控台。
  2. 開啟導覽功能表。在治理與管理底下,移至安全性並按一下 WAF 原則
    如果出現提示,請選擇要建立 WAF 原則的區間。
  3. 按一下建立 WAF 原則
  4. 建立 WAF 原則對話方塊中,輸入下列欄位:
    欄位
    原則名稱 員工示範原則
    主網域 employee。 example.com
    其他網域 留白
    起點名稱 員工 OKE 負載平衡器
    URI 負載平衡器EXTERNAL-IP
  5. 按一下建立 WAF 原則以關閉對話方塊。
  6. 建立後,從原則清單載入員工示範原則的詳細資料。

使用 WAF 路由應用程式流量

若要透過 WAF 遞送流量,則指定的主要網域和任何其他網域都必須解析為 WAF 原則資訊中所列的 CNAME Target。第一次建立原則時會顯示為通知。

如果應用程式實際上是在 DNS 區域中設定,則通常會使用 WAF_Target 作為其值,為 employee.example.com 建立 CNAMEALIAS 記錄。

但是,由於此解決方案使用範例 Employee 應用程式的 example.com 主機名稱,因此您需要設定您的機器 (從此處存取應用程式) 來解析主機。
  1. 設定 WAF_TARGET 環境變數以用於其他命令,確保您指定 WAF 原則詳細資訊中列出的 CNAME Target 作為變數值。
    # Mac or Linux
    export WAF_TARGET=employee-example-com.b.waas.oci.oraclecloud.net
    # Windows
    set WAF_TARGET=employee-example-com.b.waas.oci.oraclecloud.net
  2. 確認流量是透過 WAF 傳送。檢查「HTTP 回應」標頭並預期會看到下列內容:
    • Server: ZENEDGE
    • X-Cdn: Served-By-Zenedge
    curl -I-X GET http://${WAF_TARGET}/public/ -H'host: employee.example.com'
    前面的程式碼必須傳回類似以下的輸出:
    HTTP/1.1 200 OK
    Content-Type: text/html
    Connection: keep-alive
    Server: ZENEDGE
    ETag: "1565120174000"
    X-Cache-Status: NOTCACHED
    Content-Length: 14258
    Date: Wed, 07 Aug 2019 20:22:35 GMT
    Last-Modified: Tue, 07 Aug 2019 19:36:14 GMT
    X-Zen-Fury: 1053bc526e3d722eadb457f2
  3. 設定您的機器,以在載入瀏覽器時解析範例「員工」應用程式 URL。這會透過在 hosts 檔案中建立項目來完成,因而略過 DNS 並將要求從機器路由至 employee.example.com 的 WAF IP 位址。
    1. 指定 $WAF_TARGET 的網路 IP 位址 (可能有數個)。
      nslookup $WAF_TARGET
      前面的程式碼必須傳回類似以下的輸出:
      Server:         192.168.X.X
      Address:        192.168.X.X#YY
      Non-authoritative answer:
      employee-example-com.b.waas.oci.oraclecloud.net canonical name = oci.tm.u.waas.oci.oraclecloud.net.
      oci.tm.u.waas.oci.oraclecloud.net  canonical name = us-seattle.u.waas.oci.oraclecloud.net.
      Name:   us-seattle.u.waas.oci.oraclecloud.net
      Address: 152.X.X.X
      Name:   us-seattle.u.waas.oci.oraclecloud.net
      Address: 152.X.X.Y
      Name:   us-seattle.u.waas.oci.oraclecloud.net
      Address: 152.X.X.Z
    2. 非授權式答案區段中選取任何單一地址,並在 /etc/hosts 檔案中為 example 主要網域建立 hosts 項目,如下所示:
      # hosts file entry
      # <WAF IP Address>    <domain>  
         152.X.X.Z          employee.example.com

      數個項目已經存在。請確定您保留不變,以避免非預期的行為。

  4. 在瀏覽器中開啟 http://<employee.example.com>/public/

應用程式現在已超過 WAF 執行。