[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了~收工!


<<:  各种无用的Guide与设计模式

>>:  【从实作学习ASP.NET Core】Day01 | 前言与建立专案

Day 14 试用 Heroku

今天来试用 Heroku,并请使用 Heroku 的 Python 范例。 在这之前我已经有注册过 ...

将MongoDB加进discord-bot

建立 data.py 套入 pip install mongo bot_id.json { &quo...

DAY2-JAVA的变数与资料型态

第一天有讲到变数的部分,今天就让我们来深入了解一下吧! 首先,JAVA的资料型态可以分为原始资料型态...

专业人士可以实现员工入职流程自动化的方式

亚当·贝特拉姆(Adam Bertram)解释了自动化新员工入职过程的好处。 不论全新租赁的角色如何...

[DAY 06]物品拍卖价格查询功能(4/4)

今天终於能把查询物品拍卖价格网址这功能讲完了(汗) 物品拍卖价格网址目前热门的是universali...