准备环境以使用 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 记录。

但是,由于此解决方案为示例雇员应用程序使用 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. 将计算机配置为在浏览器中加载时解析示例 Employee 应用程序 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 运行。