[GCP DDoS 大作戰] 如何設定 Google Cloud Armor 阻擋來自某些國家的 IP

[GCP DDoS 大作戰] 如何設定 Google Cloud Armor 阻擋來自某些國家的 IP

當年 Cloud Armor 推出之後,功能比較陽春,但 Google 一直有在增加更多功能上去,尤其是大家最想要的,阻擋「某些國家」的 IP 流量,這次就來試試看吧!前提條件:必須要有 instance group 搭配 Load Balance 和 Backend Service,才能設定 Cloud Armor 喔!

一、環境準備

1.建立 instance template 做為等等建 group 的範本

取名 apache-web-page,作業系統用 Debian,機器規格可選 f1-micro, g1-small 等等小台機器。最重要在這裡 startup-script,表示機器一建好就自動裝 apache和寫一張初始網頁:

GCP VM startup script
GCP VM startup script

語法如下:

#! /bin/bash
apt-get update
apt-get install -y apache2
cat <<EOF > /var/www/html/index.html
<html><body><h1>Hello World</h1>
<p>This page was created from a simple startup script!</p>
</body></html>
EOF

2. template 建好後,就可以建立一組 instance group ,取名為 aaron-instance-group

我有設定 Auto Scale 主機數量最小一台,最多十台,本範例是用不到,但如果你的主機流量時大時小的話,設定 Auto Scale會比較好喔!到這邊 instance group 就建立完成了,所以在下方圖片中我們可看到裡面有一台主機。

3. 並且確認網頁可正常運作

4. 新增 Load Balance,取得 IP 位址如下,細節就略過了,直接提供摘要如下:

Load Balance 設定摘要
Load Balance 設定摘要

5. 接下來在香港、美國、歐洲各開一台機器 

建立三台分別為位香港、美國和歐洲的主機
建立三台分別為位香港、美國和歐洲的主機

6. 然後 SSH 進去主機,做 curl http://[Load_Balance_IP]

確認香港主機可造訪 Load Balance IP

這邊需確認可以訪問網頁,即看到 Hello World。 下面帶大家分別確認香港美國歐洲的主機是否都可造訪 Load Balance IP。(右圖為香港主機)

二、設定 Cloud Armor

1. Network Security => Cloud Armor

開始設定 Network Security => Cloud Armor
開始設定 Network Security => Cloud Armor

2. Create Policy

建立防禦政策 Create Policy
建立防禦政策 Create Policy

3.先取名,範例為 allow-tw-deny-hk-eu-us

雖然有 default rule action 設為 Allow,代表原本的 rule 套用之後,其餘的流量會套用 default rule,但為了保險起見,還是會先設定一定要允許的流量。

Cloud Armor Policy 命名
Cloud Armor Policy 命名

4.先Allow 台灣,因為基本模式只有 IP 範圍,所以要用進階模式。

設定語法如下,另外其他國家的設定語法可參考《ISO 3166-2》裡面的詳細列表。

 origin.region_code == 'TW'
Cloud Armor 設定允許台灣主機訪問語法

5. 設 Allow 以及優先順序 (Priority) 設定為 100,數字越小越優先

6. 另外 Done 之後, Cloud Armor 記得要再加另一條 Rule

7.規則語法如下,對了歐洲那台是波蘭主機,要設 PL,不要設 EU,會出錯:

origin.region_code == 'HK' ||
origin.region_code == 'US' ||
origin.region_code == 'PL' 

注意 ‘||’ 是 “OR” 的意思,代表這三個國家都要套用,如果沒有’||’,會有語法錯誤。

Cloud Armor 阻擋其他國家語法
Cloud Armor 阻擋其他國家語法

8. 設定 Deny,並且優先順序設為 200,沒問題之後按 Done

設 Cloud Armor Deny 以及優先順序 (Priority) 設定為 200
設 Cloud Armor Deny 以及優先順序 (Priority) 設定為 200

9.再按 Next Step

Cloud Armor 設定下一步
Cloud Armor 設定下一步

10. 現在要把 這個 Policy 套用到目標主機,就是最前面建好的 Load Balance和 Backend

設定 Cloud Armor 要套用的目標服務
設定 Cloud Armor 要套用的目標服務

11. 最後按下 Create Policy,可以看到整個規則如下圖所示:

建立 Cloud Armor Policy 完成
建立 Cloud Armor Policy 完成

這邊提醒大家注意,設定並不會立刻生效,建議設定完後大概等5分鐘左右再回來看結果。

三、測試 Cloud Armor 效果

1. 確認主機是香港 IP

2. 確認原本是看到 Hello World,現在碰到 403 錯誤訊息

3. 美國主機也重覆上面香港主機的操作

4. 確認原本是看到 Hello World,現在碰到 403 錯誤訊息

5. 最後我們再來檢查波蘭的主機

6. 一樣確認原本是看到 Hello World,現在碰到 403 錯誤訊息

在依序檢查完上面三個地方的主機後,我們即可確認 Cloud Armor 已阻擋成功囉!

7. 最後再用台灣的桌機確認不是網站問題造成 403 錯誤

台灣的桌機 IP
台灣的桌機 IP 

8. 直接用瀏覽器確認網站是可以造訪的,且允許台灣的主機訪問:

確認網站是可以造訪的,並且允許台灣的主機訪問
參考資料:
Cloud Armor 的語法規則說明:
https://cloud.google.com/armor/docs/rules-language-reference
Cloud Armor 可直接引用 Cloudflare, Imperva 和 Fastly 的 IP list。 (Beta版):
https://cloud.google.com/armor/docs/armor-named-ip

以上就是使用 Cloud Armor 設定阻擋其他國家 IP 的設定方式,希望可以幫助到大家喔!各位如有任何問題歡迎直接留言討論,若有進一步的開發需求或想詢問更多技術問題,也可以直接與我們聯繫或參考我們的 GCP 資安解決方案

延伸閱讀:

比 VPN 連線、跳板機更方便!利用 Cloud IAP 快速建立遠端安全連線
比 SSH 連線 GCE 更好管理!輕鬆以 OS Login 掌握用戶資訊
[GCP 資安攻略] GCP 資訊安全各項功能簡介
什麼是 Cloud IAM?GCP 權限管理服務介紹


發佈留言