[GCP DDoS 大作戰] 如何設定 Google Cloud Armor 阻擋來自某些國家的 IP
[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會比較好喔!

GCP VM Auto Scale
GCP VM Auto Scale

建立完成

Instance Group 建立
Instance Group 建立

目前已有一台主機

Instance Group 有一台主機
Instance Group 有一台主機

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

確認網頁可正常運作
確認網頁可正常運作

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

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

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

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

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

確認可以訪問網頁,看到 Hello World 

香港主機
確認香港主機可造訪 Load Balance IP
確認香港主機可造訪 Load Balance IP
美國主機
確認美國主機可造訪 Load Balance IP
確認美國主機可造訪 Load Balance IP
歐洲主機
確認歐洲主機可造訪 Load Balance IP
確認歐洲主機可造訪 Load Balance IP

二、設定 Cloud Armor

1. Network Security => Cloud Armor

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

2. Create Policy

Cloud Armor Create Policy
Cloud Armor 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 範圍,所以要用進階模式。

語法

 origin.region_code == ‘TW’


其他國家的 Code 可以查詢這裡:

https://en.wikipedia.org/wiki/ISO_3166-2

Cloud Armor 設定允許台灣主機訪問語法
Cloud Armor 設定允許台灣主機訪問語法

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

設Cloud Armor Allow 以及優先順序 (Priority) 設定為 100
設 Cloud Armor Allow 以及優先順序 (Priority) 設定為 100

6. Done 之後,再加另一條 Rule

Cloud Armor 新增另一條Rule
Cloud Armor 新增另一條Rule

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

origin.region_code == ‘HK’ ||
origin.region_code == ‘US’ ||
origin.region_code == ‘DE’ 

注意 ‘||’ 是 “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

確認主機是香港 IP
確認主機是香港 IP

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

確認香港主機原本是看到 Hello World,現在碰到 403 錯誤訊息
確認香港主機原本是看到 Hello World,現在碰到 403 錯誤訊息

3. 美國主機

確認主機是美國 IP

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

確認香美國主機原本是看到 Hello World,現在碰到 403 錯誤訊息
確認美國主機原本是看到 Hello World,現在碰到 403 錯誤訊息

5. 再來是德國主機

確認主機是德國 IP

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

確認德國主機原本是看到 Hello World,現在碰到 403 錯誤訊息
確認德國主機原本是看到 Hello World,現在碰到 403 錯誤訊息

代表 Cloud Armor 有阻擋成功。

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

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

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

確認網站是可以造訪的,並且允許台灣的主機訪問
確認網站是可以造訪的,並且允許台灣的主機訪問

以上就是使用 Cloud Armor 設定阻擋其他國家 IP 的設定方式,希望可以幫助到大家喔!!

參考資料:
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

歡迎直接留言討論,若有進一步的開發需求,再與我們聯繫。

This image has an empty alt attribute; its file name is n8VWqwQBarDix7oKsPj91SHdJ2nzgEJdH3olhKjJrpnCyi1yGzxGgvMo7bmz1F_hyAOccusfFxdF2ujxBOd6sdqMU4O042LY1pEN0HJHJVgGeMnRxaizdD41jZEGT3kTlkLLm315


Aaron Lee

超過6年的Google Cloud經驗,服務過上百家G Suite與GCP客戶,擔任多次研討會主講人與教育訓練講師,提供架構諮詢與技術支援,幫助各大企業上雲。

發佈留言