# 網路服務維運<br>安全實務
分享我在前公司維運工程師工作的~~勸退~~相關經驗
林博仁 0w0/
(前)中信安科技維運工程師
<https://hackmd.io/@brlin/operations-security-talk-presentation>
---
## {我是誰|`$ whoami`}
* (前)網路發展協會社長、講師、雜工
* (成功存活了四年才被開除的)中信安科技維運工程師
* (剛跳槽成功的)晟鑫科技軟體應用工程師
\#Ubuntu \#KDE \#Snapcraft \#L10N-TW
---
## {免責聲明|Disclaimer}
因為以下原因演說內容僅供參考:
* 可能不代表典型的維運工程師工作
* 有些東西可能不符合現代的安全實務
* 有些東西可能是*夢到*、*自身經驗*或是*朋友說的*,**{與我先前的雇主不一定有關係|如有雷同,那就雷同}**
---
## {維運工程師|Operations engineer}是在做什麼工作?
* 確保{服務|service}正常運行
* 確保{伺服器|server}不被入侵
* 與工程師配合開發新功能/服務與設計架構以完善服務
* {開通|Provision}與部署{開發|development}、{測試|test}與{生產|production}環境
---
## 維運工程師會用到些什麼?
---
### 遠端管理主機的工具
* 要能夠保存多主機的連接{設定檔|profile}
* 主機密碼不明文保存
相關工具與技能:
* OpenSSH 客戶端
* 連線多工(ControlMaster)
* [MobaXterm](https://mobaxterm.mobatek.net/download.html)
* [XSHELL](https://www.netsarang.com/en/xshell/)
---
### {自動化|Automation}
* 減少繁複的人工作業
* 使部署環境一致化
相關工具與技能:
* (主要是 Bash 的){Shell 腳本|shell script}
* Ansible/Chef/Terraform
* YAML 標記語言
---
### 調閱{運行紀錄|log}
* 快速定位服務問題
* 提早發現潛在問題與最佳化細節
相關工具與技能:
* 運行紀錄查詢方式:
- `journalctl`
- Windows 事件檢視器
* 運行紀錄分析工具:[GoAccess](https://goaccess.io/)
* 中心化運行紀錄管理系統:[Graylog](https://graylog.org/)、[ELK Stack](https://aws.amazon.com/tw/what-is/elk-stack/)
---
#### GoAccess

---
#### GoAccess (dashboard)

---
### 規劃服務架構
* 確保服務的{高可用|high-availability}(HA)
* 讓其他維運工程師能夠快速掌握架構
相關工具與技能:
* [PlantUML](https://plantuml.com/)
* [Draw.io](https://app.diagrams.net/)
---
#### PlantUML 架構圖範例
```plantuml
title Git 版控庫異地備份架構圖
frame "公司內部網路" as internal_network{
node "來源 Git 伺服器" as source_server {
database "來源 Git 版控庫" as git_repository
}
actor "軟體開發人員" as developer
actor "授權備份存取者" as backup_manager
}
frame "外部網路" as external_network{
node "異地備份伺服器" as remote_backup_server {
database "Git 版控庫(備份)" as backup_git_repository
}
}
developer -up-> git_repository: 提交
backup_manager -[#hidden]up-> git_repository
git_repository -right-> backup_git_repository: 排程推送
backup_manager -up-> backup_git_repository: 於來源版控庫不可用時取出內容
```
---
### 監控服務與主機狀態
* 定期採集服務、通訊埠、儲存、網路等層面的各種監控指標數據
* 如果出現非預期的結果就發送告警讓維運人員進行應對
相關工具與技能:
* [Hostmonitor](https://www.ks-soft.net/hostmon.eng/)
* [ZABBIX](https://www.zabbix.com/)
* [Prometheus](https://prometheus.io/)
---
#### ZABBIX 主機網路延遲監控範例

---
#### Postman Web 服務回應監控範例

---
### 撰寫服務與基礎建設的維運文件
* 包含但不限於架構、服務建置流程、服務通訊{埠|ㄅㄨˋ}號、功能驗證、常用命令與檔案路徑等相關資訊
* 確保專案的永續性
相關工具與技能:
* [Markdown](https://markdown.tw/)
* [HackMD](https://hackmd.io/)([CodiMD](https://github.com/hackmdio/codimd))
---
### 操作 RESTful/GraphQL API
* 測試服務功能是否正常
* 調用第三方服務 API 來實作自動化功能
* Telegram 機器人 API <!--發送告警訊息到指定群組/頻道-->
* GitHub/GitLab API <!--上傳並發布軟體建構產物-->
相關工具與技能:
* [curl](https://curl.se/)
* [Postman](https://www.postman.com/)
---
### 自{來源碼|source code}建構軟體
* 加入{預建構|pre-built}軟體沒有的功能
* 針對執行環境最佳化
* 滿足客戶的機車需求
---
### 源碼建構的基本流程
以基於 GNU Autotools 軟體建構系統的軟體為例:
1. {產生軟體建構配置程序|autogen.sh}
2. {配置軟體建構細節|./configure}
3. {建構軟體|make}
4. {安裝軟體|make install}
---
### English
* 閱讀要維護之服務的*原文*技術文件
* 看服務運行紀錄與配置檔
相關工具與技能:
* Google 翻譯
* LLM 大語言模型(ChatGPT/Gemini/...)
---
### ~~用水晶球~~<br>通靈主管或客戶的意思
不解釋。
---
## 資訊安全
同時也是你飯碗的安全
---
### <ruby>堡壘機<rp>(</rp><rt>Bastion host</rt><rp>)</rp></ruby>
* 業務服務器遠端管理服務不直接對外
* 避免密碼被窮舉爆破
* 管理並紀錄維運工程師的操作行為
---
```plantuml
actor 維運工程師 as operations_engineer
node "堡壘機" as bastion_host
frame "業務伺服器" as business_servers{
node "業務伺服器1" as business_server1
node "業務伺服器2" as business_server2
node "業務伺服器3" as business_server3
}
operations_engineer -> bastion_host
bastion_host -> business_server1
bastion_host -> business_server2
bastion_host -> business_server3
bastion_host .[#hidden]right. business_servers
business_server1 .[#hidden]down. business_server2
business_server2 .[#hidden]down. business_server3
```
---
### {虛擬私人網路|Virtual Private Network}(VPN)
```plantuml
actor "維運工程師" as operations_engineer
actor "一般大眾" as general_public
node "VPN 伺服器" as vpn_server
node "業務伺服器" as business_server{
component "對外服務" as public_facing_service
component "非對外服務\n(如後台與遠端管理)" as non_public_facing_service
}
general_public -> public_facing_service: 訪問
operations_engineer -down-> vpn_server: 連接
vpn_server -left-> non_public_facing_service: 連接
operations_engineer .left.> non_public_facing_service: 訪問
```
---
## 監控<br>Monitoring
---
### 要監控什麼?
* 服務可用性
* 伺服器資源使用量
* 雲平台費用
* ...
---

---

---

---

---

---

---
### 案例:堡壘機中毒
* 某同事所使用的堡壘機於凌晨五點時大量登入業務伺服器
* 應對方式:Ansible 全業務主機批量取消防火牆白名單
---
### 案例:VPS 機房新開通伺服器被埋木馬
* 新開通的伺服器每十五分鐘跟一個可疑的 IP 地址建立連線
* PAM 程式庫被調包
* 跟乾淨系統比對全系統檔案的指紋
---
### 案例:VPS 機房主機被人為重開機之後埋木馬
* 凌晨 3~5 點某業務服務器突然被重開機
* 檔案異動告警被觸發,服務啟動腳本被插命令啟動 DDoS agent
* IPMI/BMC
---

---

---

---
1. 機房透過 IPMI 重啟伺服器
1. 使用開機碟開機獲得系統權限
1. 安裝惡意程式
1. 重開回受害系統
---

---
## 勸退
為何當一個維運工程師可能不是個好出路?
---
### 有 <ruby>輪值<rp>(</rp><rt>on-call</rt><rp>)</rp></ruby>
* 要當輪班星人在下班/假日期間應對告警
* 手機不能離身,筆電也在在附近
* 手放在~~方向盤~~鍵盤上才叫做加班
※依各公司政策不同
---
### 有補休 / 加班費?
* 都說可以申請加班費,但是沒人不讀空氣真的去申請
* 補休價值觀爭議:加班加深夜/假日,補休補平日
※依各公司政策不同
---
### (待遇)有落差
* 正規行業→待遇普通(?)
* 待遇好的→高機率{賭博|博奕、博彩、波菜}行業
※依各公司政策不同
---
### 如何識別可能涉及賭博的公司
* 出差會到包含但不限於下列國家:
* 菲律賓
* 柬埔寨
* 杜拜
* 出差前需要跟公司申請離職(???)然後在當地入職另一間不同名字的公司
* 薪資透過加密貨幣支付
※友人經驗轉述,僅供參考
---
## 沒惹
| 本簡報 | 更多資訊 |
| :-: | :-: |
|  |  |
<style>
/* 調大旁註文字的字元大小 */
rt{
font-size: 15pt;
}
/* 不限制代碼區塊的高度 */
.reveal pre code{
max-height: 100%;
}
/* 迴避清單的排版美觀問題 */
.reveal .slides{
text-align: left;
}
.reveal .slides > img{
margin-left: auto;
margin-right: auto;
text-align: center;
}
:root{
--r-block-margin: 10px;
--r-heading-margin: 0 0 15px 0;
}
</style>
<!--
---
## 案例:雲平台 API key 被冒用
---
## 案例:
---

-->
{"showTags":"true","lang":"zh-TW","breaks":false,"description":"分享我在前公司維運工程師工作的相關經驗","title":"《網路服務維運安全實務》演說簡報","contributors":"[{\"id\":\"62aab908-4afa-4059-813c-f855a82c2b1d\",\"add\":7816,\"del\":1043}]"}