iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
Modern Web

網站一條龍 - 從架站到前端系列 第 13

[Day13] 在 GCP 上面設定防火牆

我們一台主機上面,通常會有好幾個程式/服務在跑,這些功能會分別監聽並佔用一個或多個 port。例如 http request 使用 80 port; https request 使用 443 port,以後我們的 MySQL 使用 3306 port。所以之前我們讓 .NET API 直接使用 80 與 443 port 其實不是很好的做法。

之前我們跑 .NET Web API 都用環境變數硬性指定我們的 API 監聽 80 與 443 port,這個同樣是為了暫時跳過防火牆與 Web Server 的設定。今天我們就先來介紹一下 GCP 的防火牆設定,然後讓 .NET Web API 用回它預設的 5000, 5001 port。

GCP 的防火牆規則

GCP 使用 “標記機制” 來對各個 VM 套用防火牆規則。我們可以預先設定防火牆規則,然後為它設定一個標籤(tag),接著 GCP 會自動幫我們搜尋帶有這個標籤的 VM,為他們套用防火牆規則。例如我們之前在建立 VM 的時候,它其實就是替我們的 VM 加上了 http-serverhttps-server 兩個標記,然後 GCP 就會為這個 VM 開通 80 與 443 port。

https://ithelp.ithome.com.tw/upload/images/20210913/201406646CH5U3WNw4.png

新增並套用自訂防火牆

要建立自訂的防火牆規則,首先到 虛擬私有雲網路分類下的防火牆。點選上方的建立防火牆規則
https://ithelp.ithome.com.tw/upload/images/20210913/20140664jg1r6AYsWk.png

接著,大部分的地方用預設值就好,只有幾個地方要改
1 防火牆的名字跟描述
2 賦予這個防火牆規則一個或多個標記
https://ithelp.ithome.com.tw/upload/images/20210913/20140664sz8Dh8p5gt.png
3 指定 IP 來源範圍設為 0.0.0.0/0 代表接收所有來源。當然,如果以後對安全性有要求,記得改成程式可以信任的 IP 來源。
https://ithelp.ithome.com.tw/upload/images/20210913/20140664gM5OVt022k.png
4 指定 tcp 的 5000 與 5001 port。逗號(,)可以分隔多個 port;減號(-)可以指定一個範圍的 port
https://ithelp.ithome.com.tw/upload/images/20210913/20140664fvFhXaXdn6.png

建立完防火牆規則之後,我們要把它套用到 VM 上。直接到 VM 列表的頁面,點選 VM 的名稱可以查看 VM 的詳細資料,然後點選上方的編輯
https://ithelp.ithome.com.tw/upload/images/20210913/20140664TYIj1Otpjr.png

在網路標記的地方新增剛剛新增的防火牆標記,然後儲存。
https://ithelp.ithome.com.tw/upload/images/20210913/20140664bTKV1Qkbcl.png

VM 上的設定

最後我們需要再回到 VM 上,把 CentOS的防火牆也開通

  • sudo firewall-cmd --permanent --zone=public --add-service=http
  • sudo firewall-cmd --permanent --zone=public --add-service=https
  • firewall-cmd –reload
    如果有邦友是使用 DigitalOcean 的 CentOS,會發現找不到 firewall-cmd 的指令,必須先安裝 firewalld
    sudo yum install firewalld

更改 service unit

最後一個步驟,我們把之前「借用」的 80 與 443 改回 .NET 預設的 5000, 5001。先用 vim 打開 service unit 檔案
sudo vi /etc/systemd/system/ironman_api.service

然後把設定 port 的環境變數改成
Environment=ASPNETCORE_URLS=http://0.0.0.0:5000;https://0.0.0.0:5001

接著嘗試重啟服務會發現,Linux 跟我們警告 service 被改過了。必須執行這行指令重新載入 service
sudo systemctl daemon-reload

Reload 完就可以順利重啟 service,用 sudo systemctl status ironman_api.service 指令可以看到我們的 API 程式正在監聽 5000 與 5001 port。

https://ithelp.ithome.com.tw/upload/images/20210913/201406644vfewuCxY9.png

最後再到瀏覽器輸入 https://外部IP:5001/api/User ,確定 API 正常發揮就OK了~收工!


上一篇
[Day12] 讓 Linux 的 systemd 幫我們管理 API 程式
下一篇
[Day14] 架設 Nginx 當我們的 Web Server
系列文
網站一條龍 - 從架站到前端33

尚未有邦友留言

立即登入留言