
嘿,各位走在科技尖端的朋友們!今天,我們要來聊一個超級酷、超級重要,但又常常被忽略的主題——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 LTS | Ubuntu 是目前最流行、社群支援最廣的 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 存取內部網路與雲端服務。
安裝流程圖
這張圖回顧了我們今天的所有安裝步驟。
✨ 總結與更進一步
恭喜你!你已經成功地建立了一個功能強大且相對安全的 Bastion Host。它現在是你團隊進入雲端世界的中央樞紐,不僅提升了安全性,也統一了工作環境。
當然,安全是一條永無止境的道路。如果你想讓你的要塞變得更強,還可以考慮:
- 禁用密碼登入:完全改用 SSH 金鑰登入。
- 啟用多因素驗證 (MFA):例如搭配 Google Authenticator,多一道防護。
- 日誌集中化:將 Bastion Host 的日誌(特別是 Auditd 的紀錄)傳送到像 ELK 或雲端廠商提供的日誌服務中,方便集中分析與告警。
希望這篇超級長文對你有幫助!打造一個好的 Bastion Host,絕對是你 DevOps 生涯中一項非常有價值的投資。現在,就去享受你那既安全又方便的數位要塞吧!