LOGO

MIS 腳印

記錄 IT 學習的軌跡

Google Cloud 建立與設定 VM 執行個體 for CentOS 7

使用 Google Cloud Platform 雲端服務的 Compute Engine 建立 CentOS 7 的 VM 執行個體,並說明 VM 如何預約靜態外部 IP、如何使用 PieTTY 與 VM 建立 SSH 連結、如何使用 WinSCP 與 VM 建立 SCP 來安全的傳輸檔案,以及透過第三方供應商 SendGrid 的電子郵件服務來讓 Postfix 寄發電子郵件。

Google Cloud Platform

Google Cloud Platform (GCP,Google 雲端平台) 是一項使用 Google 核心基礎架構、資料分析和機器學習技術的雲端運算服務。

啟用免費試用

搜尋並點擊 Google Cloud。

搜尋 Google Cloud
搜尋 Google Cloud

點擊「免費試用」。

啟用 Google Cloud 免費試用
啟用 Google Cloud 免費試用

選擇國家和勾選服務條款。

Google Cloud 選擇國家和勾選服務條款
Google Cloud 選擇國家和勾選服務條款

填寫個人資料。

Google Cloud 填寫個人資料
Google Cloud 填寫個人資料

填寫付款方式與信用卡資料。

Google Cloud 付款方式與信用卡
Google Cloud 付款方式與信用卡

啟用免費試用完成,Google Cloud 首頁。

Google Cloud 啟用免費試用完成
Google Cloud 啟用免費試用完成

VM 執行個體

Google Cloud 的 Compute Engine,提供可彈性擴充高效能的 VM (Virtual Machine,虛擬機器)

啟用 VM

點擊「VM 執行個體」。

Google Cloud VM 執行個體
Google Cloud VM 執行個體

必須「啟用計費功能」,才能使用 Compute Engine 來建立 VM。

只要不超過 Compute Engine 指定用量限制的配額,不管在免費試用期間或試用期過後,都能繼續免費使用。用量限制詳細內容可參考 Google Compute Engine「一律免費」方案的用量限制
Google Cloud 啟用計費功能
Google Cloud 啟用計費功能

Compute Engine 啟用中。

Google Cloud 啟用 Compute Engine 中
Google Cloud 啟用 Compute Engine 中

建立 VM

建立 VM。

Google Cloud 建立 VM
Google Cloud 建立 VM

VM 配置,映像檔選擇要安裝的作業系統 CeneOS 7。

此配置符合Google Compute Engine「一律免費」方案的用量限制,因此右側會顯示本月使用「f1-micro」執行個體的前 720 小時完全免費 (720 小時 / 30 天 = 24 小時,就是都免費 )
Google Cloud 新增 VM 配置
Google Cloud 新增 VM 配置

建立 VM 完成。

Google Cloud 建立 VM 完成

預約靜態外部 IP

每當建立一個新的 VM 執行個體時,都會自動配發一個臨時外部 IP,但當您重啟 VM 時,這個臨時外部 IP 就會被回收,因此我們必須透過「預約靜態外部 IP」來保留一個固定 IP。

進入 VM 詳細資料。

Google Cloud VM 詳細資料
Google Cloud VM 詳細資料

編輯 VM。

Google Cloud 編輯 VM
Google Cloud 編輯 VM

編輯 VM 網路介面。

Google Cloud 編輯 VM 網路介面
Google Cloud 編輯 VM 網路介面

編輯 VM 網路介面外部 IP。

Google Cloud 編輯 VM 網路介面外部 IP
Google Cloud 編輯 VM 網路介面外部 IP

建立 VM 的外部 IP 位址。

Google Cloud 建立 VM 外部 IP 位址
Google Cloud 建立 VM 外部 IP 位址

VM 預約新的靜態外部 IP 位址。

Google Cloud VM 預約新的靜態外部 IP 位址
Google Cloud VM 預約新的靜態外部 IP 位址

VM 預約新的靜態外部 IP 位址完成。

Google Cloud VM 預約新的靜態外部 IP 位址完成
Google Cloud VM 預約新的靜態外部 IP 位址完成

編輯 VM 完成儲存。

Google Cloud 編輯 VM 完成儲存

VM 預約新的靜態外部 IP 設定完成。

Google Cloud VM 預約新的靜態外部 IP 設定完成

SSH 連結 VM

使用 SSH (Secure Shell,安全外殼協定) 連結 VM 最常用的兩種方式。

其它連結方式可參考使用進階方法連線至執行個體

在瀏覽器視窗開啟

Google Cloud 預設提供「在瀏覽器視窗中開啟」與 VM 的 SSH 連結。

Google Cloud「在瀏覽器視窗中開啟」與 VM 的 SSH 連結
Google Cloud「在瀏覽器視窗中開啟」與 VM 的 SSH 連結

連結 VM 中…

Google Cloud「在瀏覽器視窗中開啟」與 VM 的 SSH 連結中
Google Cloud「在瀏覽器視窗中開啟」與 VM 的 SSH 連結中

已連結至 VM。

Google Cloud「在瀏覽器視窗中開啟」與 VM 已連結
Google Cloud「在瀏覽器視窗中開啟」與 VM 已連結

PieTTY

在 Windows 可以使用 PieTTY 或 PuTTY 軟體,連結 Google Cloud VM 執行個體。

PieTTY project 下載並執行軟體後,點擊「PuTTY 模式」。

PieTTY 切換至 PuTTY 模式
PieTTY 切換至 PuTTY 模式
PieTTY 切換至 PuTTY 模式提示
PieTTY 切換至 PuTTY 模式提示

輸入 Google Cloud VM 的外部 IP。

PieTTY SSH 連結位址
PieTTY SSH 連結位址

設定在新建立 SSH 金鑰製作好儲存的 Private Key,並開啟。

PieTTY 設定 SSH Private Key
PieTTY 設定 SSH Private Key
PieTTY 首次連結的主機,安全性警告
PieTTY 首次連結的主機,安全性警告

成功連結 VM,輸入使用者名稱 (就是在新建立 SSH 金鑰時自訂的)。

PieTTY SSH 連結 Google Cloud VM
PieTTY SSH 連結 Google Cloud VM

儲存設定,這樣下次就不用再重新設定一次。

PieTTY 儲存設定
PieTTY 儲存設定
PieTTY 儲存設定的名稱
PieTTY 儲存設定的名稱

使用 root 帳戶

執行這個指令即可切換至 root 帳戶 (無須密碼):

[small_jack_computer@centos7-lemp ~]$ sudo su

使用 WinSCP 傳輸檔案

Windows 可透過 WinSCP 軟體使用 SCP (Secure Copy,安全複製),來與 Google Cloud VM 傳輸檔案。

WinSCP 下載安裝並執行軟體後,點擊「Advanced」進入進階設定。

WinSCP 進階設定
WinSCP 進階設定


設定在新建立 SSH 金鑰製作好儲存的 Private Key。

WinSCP 設定 SSH Private Key
WinSCP 設定 SSH Private Key
  1. File protocol:SCP。
  2. Host name:輸入 Google Cloud VM 的外部 IP。
  3. User name:使用者名稱 (就是在新建立 SSH 金鑰時自訂的)。

點擊「Login」登入。

WinSCP 設定並登入
WinSCP 設定並登入
WinSCP 連結主機中
WinSCP 連結主機中
WinSCP 首次連結的主機,安全性警告
WinSCP 首次連結的主機,安全性警告

成功連結 Google Cloud VM。

WinSCP 連結 Google Cloud VM 成功
WinSCP 連結 Google Cloud VM 成功

一般帳戶登入切換至 root

修改 SCP Shell 設定為 sudo su -,在連結後會自動切換自 root 帳戶。

WinSCP 一般帳戶登入切換至 root
WinSCP 一般帳戶登入切換至 root

SSH 金鑰

新建立

於 Windows 建立新的 SSH 金鑰,必須透過第三方工具 PuTTY Key Generator。至 PuTTYOS (Operating System,作業系統) 位元下載 puttygen.exe。

要在 Linux 和 masOS 建立新的 SSH 金鑰,可參考管理中繼資料中的安全殼層 (SSH) 金鑰組

執行 puttygen.exe,點擊 Generate 來產生 public/private key。

  1. 產生 public/private key 完成,可自訂「Key comment」(也就是到時登入系統的使用者名稱),這裡我設定 jacky 這個使用者 (修改同時可看到上方的「Public key …」也會跟著修改)。
  2. 點擊「Save public key」和「Save private key」,儲存產生的 public/private key (PieTTY 連結 VMWinSCP 與 VM 傳輸檔案要使用)。
  3. 複製上方的 SSH「Public key …」(下面的 加入 VM 要使用)。
如欲設定登入系統的使用者密碼可自訂「Key passphrase」

加入 VM

將 puttygen.exe 產生的 SSH「Public key …」加入 VM。

進入 VM 詳細資料。

Google Cloud VM 詳細資料
Google Cloud VM 詳細資料

編輯 VM 的 SSH 金鑰。

Google Cloud 編輯 VM 的 SSH 金鑰
Google Cloud 編輯 VM 的 SSH 金鑰

貼上 puttygen.exe 產生的 SSH「Public key …」並儲存。

Google Cloud 貼上 VM 的 SSH 金鑰並儲存
Google Cloud 貼上 VM 的 SSH 金鑰並儲存

SSH 金鑰加入 VM 完成。

Google Cloud SSH 金鑰加入 VM 完成
Google Cloud SSH 金鑰加入 VM 完成

CentOS 7 設置

語系

查看目前系統語系。(Google Cloud VM 安裝的 CentOS 7 語系預設為 en_US)

[root@centos7-lemp ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

將語系設定為中文台灣。

[root@centos7-lemp ~]# localectl set-locale LANG=zh_TW.utf8

重新登入後再查看目前系統語系,已設為中文台灣。

[root@centos7-lemp ~]# locale
LANG=zh_TW.utf8
LC_CTYPE="zh_TW.utf8"
LC_NUMERIC="zh_TW.utf8"
LC_TIME="zh_TW.utf8"
LC_COLLATE="zh_TW.utf8"
LC_MONETARY="zh_TW.utf8"
LC_MESSAGES="zh_TW.utf8"
LC_PAPER="zh_TW.utf8"
LC_NAME="zh_TW.utf8"
LC_ADDRESS="zh_TW.utf8"
LC_TELEPHONE="zh_TW.utf8"
LC_MEASUREMENT="zh_TW.utf8"
LC_IDENTIFICATION="zh_TW.utf8"
LC_ALL=

時區

查看目前系統時區。(Google Cloud VM 安裝的 CentOS 時區預設為 UTC)

[root@centos7-lemp ~]# timedatectl
      Local time: 六 2019-04-27 13:11:53 UTC
  Universal time: 六 2019-04-27 13:11:53 UTC
        RTC time: 六 2019-04-27 13:11:53
       Time zone: UTC (UTC, +0000)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

將時區設定為亞洲/台北。

[root@centos7-lemp ~]# timedatectl set-timezone Asia/Taipei

重新登入後再查看目前系統時區,已設為亞洲/台北。

[root@centos7-lemp ~]# timedatectl
      Local time: 六 2019-04-27 21:19:19 CST
  Universal time: 六 2019-04-27 13:19:19 UTC
        RTC time: 六 2019-04-27 13:19:19
       Time zone: Asia/Taipei (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

使用 SendGrid 傳送電子郵件

雖然 Google Cloud VM 安裝的 CentOS 7 預設就包含 Postfix 電子郵件伺服器 (Mail Server),但 Google Cloud 的 Compute Engine 不允許 SMTP 通訊埠 25 與 SMTPS 通訊埠 465、587 傳出連線,也就是 SMTP 與 SMTPS 的通訊埠會遭到封鎖,因為這些通訊埠容易被大量濫用。

雖然可以自訂 Postfix 的其它通訊埠,但建議使用擁有信任的第三方供應商 (如SendGrid),可減輕 Google Cloud 的 Compute Engine 與我們維持良好 IP 記錄的壓力。

訂閱 SendGrid

前往 Google Cloud Platform Marketplace 或至 Marketplace 來訂閱 SendGrid Email。

Google Cloud Marketplace SendGrid Email
Google Cloud Marketplace SendGrid Email
Google Cloud 啟用 SendGrid Email
Google Cloud 啟用 SendGrid Email

選擇 SendGrid Email 的 Free 方案。

Compute Engine 使用者每月可使用 SendGrid Email 服務的 Free 方案,免費傳送 12,000 封電子郵件
Google Cloud SendGrid Email 方案選擇
Google Cloud SendGrid Email 方案選擇

前往註冊「SendGrid」。

Google Cloud SendGrid 註冊說明
Google Cloud SendGrid 註冊說明

填寫註冊資訊

Google Cloud SendGrid 註冊頁面
Google Cloud SendGrid 註冊頁面

允許 SendGrid 存取 Google 帳戶。

允許 Google Cloud SendGrid 存取 Google 帳戶
允許 Google Cloud SendGrid 存取 Google 帳戶

註冊完成。

Google Cloud SendGrid 註冊完成
Google Cloud SendGrid 註冊完成

Google Cloud SendGrid Email 訂閱完成。

Google Cloud SendGrid Email 訂閱完成
Google Cloud SendGrid Email 訂閱完成

申請 SendGrid API Key

點擊「在 SendGrid 網站上管理 API 金鑰」來申請 API Key。

Google Cloud 連結 SendGrid 網站管理 API Key
Google Cloud 連結 SendGrid 網站管理 API Key

認證 Email (預設為剛才允許存取 Google 的帳戶 Email)。

SendGrid 認證 Email
SendGrid 認證 Email

認證 Email 確認信。

SendGrid 認證 Email 確認信
SendGrid 認證 Email 確認信

產生 API Key。

SendGrid Create API Key
SendGrid Create API Key

選擇 API Key 的權限 (自己使用的,選取 Full Access 即可)。

SendGrid API Key Permissions
SendGrid API Key Permissions

產生的 API Key。

此為唯一一份金鑰,因此請務必先複製並儲存在關閉該視窗,似供日後使用
SendGrid API Key
SendGrid API Key

Postfix

安裝相關套件。

[root@centos7-lemp ~]# yum install postfix cyrus-sasl-plain cyrus-sasl-md5 -y

修改 Postfix 設定檔,在結尾處加入這些設定。

[root@centos7-lemp ~]# vim /etc/postfix/main.cf

# ... 以上省略 ...

# 新增 SendGrid SMTP 服務與使用的通訊埠 (Compute Engine 不允許使用通訊埠 25 和 587,因此請務必使用通訊埠 2525)
relayhost = [smtp.sendgrid.net]:2525

# 強制執行安全資料傳輸層 (SSL)/傳輸層安全標準 (TLS) 支援,並設定 STMP 驗證
smtp_tls_security_level = encrypt
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
header_size_limit = 4096000
smtp_sasl_security_options = noanonymous

使用 SendGrid 帳戶產生的 API Key 來產生 SASL 密碼對應 (將紅字改為您的 API Key 即可)。

[root@centos7-lemp ~]# vim /etc/postfix/sasl_passwd
[smtp.sendgrid.net]:2525 apikey:SG.xxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

產生 .db 檔。

[root@centos7-lemp ~]# postmap /etc/postfix/sasl_passwd

為確保安全性,刪除內含 API Key 的檔案 (該檔案已產生 .db 檔,因此也不需要了)。

[root@centos7-lemp ~]# rm /etc/postfix/sasl_passwd

設定 .db 檔案權限,並確認其它檔案都已刪除。

[root@centos7-lemp ~]# chmod 600 /etc/postfix/sasl_passwd.db
[root@centos7-lemp ~]# ls -al /etc/postfix/sasl_passwd*
-rw-------. 1 root root 12288  5月  2 23:24 /etc/postfix/sasl_passwd.db

重新載入 Postfix 設定:

[root@footmark-com-tw ~]# postfix reload

SELinux 設定

SELinux (Security Enhanced Linux,安全增强式 Linux),預設不允許透過網頁伺服器傳送電子郵件:

[root@footmark-com-tw ~]# getsebool -a | grep httpd_can_sendmail
httpd_can_sendmail --> off

設定 SELinux 允許網頁伺服器傳送電子郵件:

[root@footmark-com-tw ~]# setsebool -P httpd_can_sendmail=1

確認設定:

[root@footmark-com-tw ~]# getsebool -a | grep httpd_can_sendmail
httpd_can_sendmail --> on

寄發 Email 測試

安裝寄發 Email 套件。

[root@centos7-lemp ~]# yum install mailx -y

寄發 Email。

[root@centos7-lemp ~]# echo 'message' | mail -s subject a.b@gmail.com

查看系統 Email 記錄檔,在 status=sent 顯示成功的回應 250 ok,代表已寄發 Email 成功。

[root@centos7-lemp ~]# tail -n 5 /var/log/maillog
May  2 23:52:41 centos7-lemp postfix/smtp[3890]: 304161012FE4: to=<a.b@gmail.com>, relay=smtp.sendgrid.net[167.89.123.58]:2525, delay=13141, delays=13140/0.04/0.36/0.06, dsn=2.0.0, status=sent (250 Ok: queued as eBBmgQliRvi0OTtWBfYm2Q)
May  2 23:52:41 centos7-lemp postfix/qmgr[3432]: 304161012FE4: removed
May  3 00:02:41 centos7-lemp postfix/qmgr[3432]: 49F701012FE5: from=<root@centos7-lemp.localdomain>, size=466, nrcpt=1 (queue active)
May  3 00:02:41 centos7-lemp postfix/smtp[4094]: 49F701012FE5: to=<a.b@gmail.com>, relay=smtp.sendgrid.net[169.47.148.162]:2525, delay=13230, delays=13230/0.05/0.26/0.08, dsn=2.0.0, status=sent (250 Ok: queued as iaLpsQy0T7iWxSGWHPdc8g)
May  3 00:02:41 centos7-lemp postfix/qmgr[3432]: 49F701012FE5: removed

發表迴響