【終極教學】打造你的超級要塞!Bastion Host 跳板機與 DevOps 神器安裝全攻略

站主自己的課程,請大家支持
揭秘站長的架站心法:如何利用 Hugo × AI 打造高質感個人品牌網站? 揭秘站長的架站心法:如何利用 Hugo × AI 打造高質感個人品牌網站?
  • Post by
  • Oct 09, 2025
post-thumb

嘿,各位走在科技尖端的朋友們!今天,我們要來聊一個超級酷、超級重要,但又常常被忽略的主題——Bastion Host,也就是俗稱的「跳板機」。

想像一下,你的公司有一座藏滿金銀財寶的城堡(也就是你們寶貴的內部伺服器和資料庫),你會希望大家都能隨便開門進來逛大街嗎?當然不!你肯定會蓋一座又高又厚的城牆,只留下一座固若金湯的城門,並派最強的衛兵在那裡站崗,對吧?

沒錯!Bastion Host 就是你雲端世界的那個超級城門和最強衛兵!

在這篇文章中,我會用最口語、最有趣的方式,帶你從零開始,親手打造一個屬於你自己的數位要塞。我們不只會建立這個要塞,還會把它武裝到牙齒,在上面安裝好所有 DevOps 戰場上最厲害的神器,像是 Docker、kubectl、Helm 和 Azure CLI。

準備好了嗎?讓我們一起從麻瓜變身為霍格華茲的資安魔法師吧!


📖 這篇文章你會學到什麼?

  • 什麼是 Bastion Host? (用大白話講給你聽)
  • 為什麼我需要它? (它能解決哪些痛點)
  • 事前準備工作 (就像做菜前的備料)
  • Step-by-Step 安裝教學 (從系統更新到神器安裝,一步都不少)
    • Docker:容器化的小精靈
    • kubectl:指揮 K8s 大軍的魔法棒
    • Helm:K8s 的 App Store
    • Azure CLI:通往微軟雲端的任意門
  • 安全加固 (把你的要塞變成銅牆鐵壁)
  • 酷炫的用法 (讓你像個 Pro 一樣工作)
  • 架構圖解 (一張圖勝過千言萬語)

🤔 什麼是 Bastion Host?為什麼它這麼重要?

想像一下,你是一位 DevOps 工程師或系統管理員,每天都要連線到好幾台位於私有網路(Private Subnet)的伺服器上進行維護、部署或除錯。這些伺服器因為安全考量,是不能直接從網際網路存取的。

這時候,你會怎麼做?

  • 做法 A(危險!):把每一台伺服器都開一個對外的連接埠,然後用 IP 白名單限制存取。天啊!這簡直是開了無數個後門,只要其中一個被攻破,你的內部網路就門戶大開了!管理起來也像一場惡夢。
  • 做法 B(專業!):建立一台位於公開網路(Public Subnet)的「堡壘主機」,也就是我們的 Bastion Host。所有人都必須先登入這台主機,然後再從這台主機「跳」到內部的伺服器。

Bastion Host 的核心價值就在於「集中化管理」與「縮小攻擊面」。

優點口語化解釋
單一入口就像城堡只有一個城門,你只需要防守好這裡就好,不用擔心四面八方都有敵人摸進來。
集中控管所有的進出紀錄都在這座城門登記,誰、什麼時候、從哪裡來、要去哪,一清二楚。
安全審計衛兵(系統)會詳細記錄每個人的行為,如果有人搞鬼,馬上就能抓出來。
工具整合你可以把所有管理工具(kubectl, az cli…)都裝在這,不用每個人電腦都裝一套,版本統一,管理方便。

簡單來說,Bastion Host 就是你通往內部網路的唯一、受監控、且安全的通道。它是現代雲端架構的基石,也是保護你數位資產的第一道防線!


🛠️ 需求與前置條件:我們的「戰前整備」

在開始蓋要塞之前,總得先準備好磚塊和水泥吧?以下是我們這次任務需要的材料清單:

項目說明為什麼需要?
作業系統Ubuntu 20.04 LTS / 22.04 LTSUbuntu 是目前最流行、社群支援最廣的 Linux 發行版之一,穩定又好用!
使用者權限具備 sudo 權限的管理員帳號我們要安裝軟體、修改設定,沒這個權限就像沒帶鑰匙的工頭,啥也幹不了。
網路環境一個 Public IP 給 Bastion Host總得有個公開地址,我們才能從外面連進去嘛!
基本工具SSH 客戶端(你的電腦上要有)這是我們登入遠端主機的標準工具,Mac/Linux 內建,Windows 可用 WSL 或 PuTTY。

都準備好了嗎?太棒了,讓我們開始動工吧!


🚀 詳細安裝步驟:一步步打造你的神器庫

現在,最精彩的部分來了!我們要親手把一台乾淨的 Ubuntu 主機,打造成一個功能強大的 DevOps 工作站。請跟著我的指令,一步一步來,保證不會迷路!

1. 更新系統:打好地基

拿到一台新主機,第一件事永遠是更新系統。這就像蓋房子前要先把地整平,確保所有東西都是最新、最穩定的狀態。

# 更新套件列表,並且升級所有已安裝的套件
sudo apt-get update && sudo apt-get upgrade -y

這個指令會先跟軟體庫的伺服器說「嘿!最新的軟體清單給我一份!」,然後再把本機上所有過時的軟體都升級到最新版。-y 參數是自動回答 “Yes”,省去你一直按確認的麻煩。

2. 安裝 OpenSSH:開啟要塞的大門

SSH (Secure Shell) 是我們遠端登入的唯一通道,Ubuntu Server 通常都預設安裝了,但我們還是要確保它在運作中。

# 安裝 OpenSSH 伺服器
sudo apt-get install -y openssh-server

# 設定開機自動啟動 SSH 服務
sudo systemctl enable ssh

# 立刻啟動 SSH 服務
sudo systemctl start ssh

現在,你的 Bastion Host 已經可以透過 SSH 連線了。但別急,這只是個毛胚屋,我們還要繼續裝潢。

3. 安裝 Docker:你的容器魔法盒

Docker 應該不用多介紹了吧?它讓我們可以把應用程式和它的所有依賴打包成一個個輕巧的「容器」,在哪裡跑都長得一模一樣。在 Bastion Host 上安裝 Docker,可以讓我們方便地運行一些臨時的工具或環境。

官方建議我們使用 Docker 自己的軟體庫來安裝,這樣才能確保是最新版本。

# 1. 移除舊版本 (如果有的話)
sudo apt-get remove docker docker-engine docker.io containerd runc

# 2. 安裝一些必要的小工具
sudo apt-get install -y ca-certificates curl gnupg lsb-release

# 3. 建立存放 GPG 金鑰的目錄
sudo mkdir -p /etc/apt/keyrings

# 4. 下載 Docker 的官方 GPG 金鑰,並存放到剛剛建立的目錄
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 5. 把 Docker 的軟體庫資訊加到系統裡
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 6. 再次更新套件列表 (因為我們剛加了新的)
sudo apt-get update

# 7. 安裝 Docker 引擎、CLI、Compose 等等全家桶
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

安裝完後,來驗證一下是不是成功了:

docker --version
docker compose version

看到版本號跳出來,就代表你的 Docker 魔法盒已經準備就緒!

4. 安裝 kubectl:Kubernetes 的指揮棒

如果你的團隊正在使用 Kubernetes (K8s),那 kubectl 就是你每天吃飯的傢伙。它是跟 K8s 叢集溝通的命令列工具,讓你能夠部署應用、查看狀態、管理資源。

# 1. 安裝必要工具
sudo apt-get install -y ca-certificates curl

# 2. 建立存放 K8s GPG 金鑰的目錄
sudo mkdir -p /etc/apt/keyrings

# 3. 下載 K8s 的 GPG 金鑰
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# 4. 把 K8s 的軟體庫資訊加到系統裡
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list

# 5. 再次更新套件列表
sudo apt-get update

# 6. 安裝 kubectl
sudo apt-get install -y kubectl

驗證一下你的指揮棒是不是拿穩了:

kubectl version --client

看到 clientVersion 就表示安裝成功!現在你可以在 Bastion Host 上對你的 K8s 叢集發號施令了(當然,前提是你已經設定好 kubeconfig 檔案)。

5. 安裝 Helm:K8s 的 App Store

如果說 kubectl 是讓你手動操作 K8s 的工具,那 Helm 就是 K8s 世界的「套件管理器」。它能讓你用非常簡單的方式,一鍵安裝、升級、管理複雜的 K8s 應用(例如 Prometheus, Grafana, WordPress…)。

Helm 的安裝超級簡單,一個指令搞定:

# 從官方腳本下載並安裝 Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

這個指令會自動偵測你的作業系統,下載對應的最新版 Helm 並放到正確的位置。

驗證一下:

helm version

看到版本號,就代表你已經擁有了 K8s 的「App Store」客戶端!

6. 安裝 Azure CLI (az):通往微軟雲的任意門

如果你的基礎設施在 Azure 上,那 Azure CLI (az) 就是你的超能力。它讓你可以在命令列中完成幾乎所有在 Azure Portal 上能做的事情:建立虛擬機、設定網路、管理資料庫…應有盡有。

# 1. 安裝必要工具
sudo apt-get install -y ca-certificates curl apt-transport-https lsb-release gnupg

# 2. 下載微軟的 GPG 金鑰
curl -sL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /etc/apt/keyrings/microsoft.gpg

# 3. 取得你的 Ubuntu 版本代號
AZ_REPO=$(lsb_release -cs)

# 4. 把 Azure CLI 的軟體庫資訊加到系統裡
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | sudo tee /etc/apt/sources.list.d/azure-cli.list

# 5. 再次更新套件列表
sudo apt-get update

# 6. 安裝 Azure CLI
sudo apt-get install -y azure-cli

驗證一下任意門是否正常運作:

az version

看到一大串 JSON 格式的版本資訊,就代表你已經可以從 Bastion Host 直接號令 Azure 雲端大軍了!


🛡️ 安全加固:把你的要塞變成銅牆鐵壁

恭喜你!你的 Bastion Host 已經安裝好了所有神器。但現在它還只是一個裝備精良的兵工廠,我們還需要加固城牆,設定警報系統,才能真正高枕無憂。

1. 設定防火牆 (UFW - Uncomplicated Firewall)

UFW 是 Ubuntu 上一個非常簡單好用的防火牆管理工具。我們的原則是:預設拒絕所有連入,只開放必要的。對 Bastion Host 來說,唯一需要對外開放的就是 SSH 的 22 埠。

# 安裝 UFW
sudo apt-get install -y ufw

# 預設拒絕所有連入的流量
sudo ufw default deny incoming

# 預設允許所有連出的流量
sudo ufw default allow outgoing

# 只允許 SSH (port 22) 的連線
sudo ufw allow 22/tcp

# 啟用防火牆
sudo ufw enable

啟用時它會警告你可能會中斷現有連線,勇敢地按 y 下去就對了!

2. 防止暴力破解 (Fail2ban)

總會有一些無聊的駭客或自動化腳本,不停地嘗試用各種密碼來登入你的 SSH。Fail2ban 就是一個自動化的守衛,它會監視登入日誌,如果發現有人在短時間內連續登入失敗,就會自動把他的 IP 封鎖掉

# 安裝 Fail2ban
sudo apt-get install -y fail2ban

# 設定開機自動啟動並立刻啟動
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

沒錯,裝好就開始工作了!Fail2ban 預設就會保護 SSH,你什麼都不用改。是不是很貼心?

3. 系統稽核 (Auditd)

Auditd 就像一個無所不在的監視器,它會詳細記錄系統上發生的所有重要事件,例如誰執行了什麼指令、誰修改了哪個檔案。這對於事後追蹤問題或安全事件非常有幫助。

# 安裝 Auditd
sudo apt-get install -y auditd

# 設定開機自動啟動並立刻啟動
sudo systemctl enable auditd
sudo systemctl start auditd

安裝完畢!現在你的 Bastion Host 不僅有堅固的城牆 (UFW)、機警的守衛 (Fail2ban),還有無死角的監視系統 (Auditd)!


🎩 使用方式:像個 Pro 一樣優雅地「跳」

設定好了 Bastion Host,該怎麼用它來連線到內部網路的伺服器呢?最酷炫的方式是使用 SSH 的 ProxyJump 功能。

你只需要在你自己的電腦上,編輯 ~/.ssh/config 檔案(如果沒有就新增一個),加入以下內容:

# Bastion Host 的設定
Host bastion
  HostName <你的 Bastion Host 公開 IP>
  User <你用來登入 Bastion 的使用者名稱>
  # 建議加上金鑰路徑,更安全!
  # IdentityFile ~/.ssh/your_bastion_key

# 內部伺服器的設定
Host private-server-1
  HostName <內部伺服器的私有 IP 或主機名>
  User <登入內部伺服器的使用者名稱>
  ProxyJump bastion

設定好之後,神奇的事情發生了!當你想連到內部伺服器時,你不再需要先 ssh 到 bastion,再從 bastion ssh 到內部主機。你只需要在你的電腦上執行:

ssh private-server-1

SSH 會自動幫你完成「先連到 bastion,再透過 bastion 連到 private-server-1」這個兩段式跳躍!是不是超級優雅?


🗺️ 架構圖與流程圖:一張圖勝過千言萬語

為了讓你更清楚地理解我們今天打造的系統,我畫了兩張圖:

整體架構圖

這張圖展示了使用者如何透過 Bastion Host 存取內部網路與雲端服務。

Cloud Provider
Private Network (內部網路)
Public Network (網際網路)
你的電腦
SSH (Port 22)
SSH
kubectl / Helm
az CLI
☁️ Azure Cloud
💻 Private Server 1
☸️ Kubernetes Cluster
🛡️ Bastion Host
外部使用者

安裝流程圖

這張圖回顧了我們今天的所有安裝步驟。

🚀 開始
1. 更新系統
2. 安裝 OpenSSH
3. 安裝 Docker
4. 安裝 kubectl
5. 安裝 Helm
6. 安裝 Azure CLI
7. 安全加固 (UFW/Fail2ban)
✅ 完成!

✨ 總結與更進一步

恭喜你!你已經成功地建立了一個功能強大且相對安全的 Bastion Host。它現在是你團隊進入雲端世界的中央樞紐,不僅提升了安全性,也統一了工作環境。

當然,安全是一條永無止境的道路。如果你想讓你的要塞變得更強,還可以考慮:

  • 禁用密碼登入:完全改用 SSH 金鑰登入。
  • 啟用多因素驗證 (MFA):例如搭配 Google Authenticator,多一道防護。
  • 日誌集中化:將 Bastion Host 的日誌(特別是 Auditd 的紀錄)傳送到像 ELK 或雲端廠商提供的日誌服務中,方便集中分析與告警。

希望這篇超級長文對你有幫助!打造一個好的 Bastion Host,絕對是你 DevOps 生涯中一項非常有價值的投資。現在,就去享受你那既安全又方便的數位要塞吧!


LATEST POST
TAG