前言:SSH 畀人爆咗你都唔知?
今日同大家吹下水。做 IT 嘅你,應該日日都要 SSH 入 Server 㗎啦?但你知唔知,全球每秒鐘都有 botnet 不停咁掃 port 22,用字典攻擊撞你個 root 密碼。你話「我有 firewall 喎」——咁你 firewall rules 真係 set 得啱?你話「我用強密碼」——但你有冇諗過,暴力破解唔係靠運氣,而係靠時間同數量?
今日就同大家由淺入深,分享 10 招 SSH 安全加固嘅實戰技巧,全部都係即刻用得嘅 CLI 設定,唔使買咩貴價 appliance,跟住做就得。
第 1 招:換走 port 22,減少噪音
呢個係最簡單但好多人忽略嘅一招。將 SSH 由 default port 22 改去一個高位 port(例如 2222 或者 54321),可以過濾走 90% 以上嘅自動化掃描。
# 編輯 sshd_config
sudo vi /etc/ssh/sshd_config
# 搵到 Port 22,改成:
Port 54321
# 然後 restart service
sudo systemctl restart sshd
⚠️ 注意:改完要記得喺 firewall 度開返個新 port,唔係你自己都入唔到!同埋唔好用 2222——呢個太常見,botnet 已經識掃。
第 2 招:禁用 root 直接登入
呢個係保安 101。Root 係最明顯嘅攻擊目標,直接用 root login 等於送俾人撞。建立一個普通 user account,用 sudo 提權。
# /etc/ssh/sshd_config
PermitRootLogin no
# 建立管理員 account
sudo useradd -m -s /bin/bash sysadmin
sudo usermod -aG sudo sysadmin
sudo passwd sysadmin
之後所有操作先用 sysadmin login,需要 root 權限時先 sudo。咁樣就算 attacker 撞到你個 sysadmin 密碼,都仲要過 sudo 嗰關。
第 3 招:只允許金鑰認證,禁用密碼登入
呢個係最重要嘅一招。密碼登入本身就係一個漏洞——人可以揀弱密碼、可以俾人 phishing、可以被暴力破解。SSH key pair 係數學上近乎不可能被破解嘅。
# /etc/ssh/sshd_config
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
# 如果你想保留某啲 user 可以用密碼(強烈不建議):
# Match User legacy_user
# PasswordAuthentication yes
喺你呢邊 generate key pair:
ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-copy-id -p 54321 sysadmin@your-server.com
💡 小T貼士:用 ed25519 而唔係 RSA——佢更快、更短、更安全,現代 OpenSSH 全部支援。
第 4 招:限制可以登入嘅 User
唔好俾所有人都可以 SSH 入嚟。白名單模式永遠好過黑名單。
# /etc/ssh/sshd_config
AllowUsers sysadmin deployer
# 或者用 group
AllowGroups sshusers
咁樣就算有人 create 咗個奇怪嘅 account,佢都 SSH 唔到入去。
第 5 招:Fail2Ban 自動封鎖可疑 IP
就算你改咗 port、disable 咗密碼,都仲係會有人試。Fail2Ban 會 monitor log,自動 ban 走多次失敗嘅 IP。
# Debian/Ubuntu
sudo apt install fail2ban -y
# 建立 local config
sudo tee /etc/fail2ban/jail.local <<EOF
[sshd]
enabled = true
port = 54321
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
findtime = 600
EOF
sudo systemctl enable fail2ban --now
上面 config 意思:10 分鐘內失敗 3 次就 ban 24 小時。你可以根據需要調整。
第 6 招:用 TCP Wrappers 做最後防線
雖然 TCP Wrappers 比較 old school,但喺關鍵 server 度加多一層冇壞。
# /etc/hosts.allow
sshd: 192.168.1.0/24, 10.0.0.0/8
# /etc/hosts.deny
sshd: ALL
只允許 internal network 或者你 office 嘅 IP range。
第 7 招:閒置 Timeout,自動斷線
有冇試過 SSH 入 server 之後行開咗食飯,返嚟個 session 仲通?呢個係安全風險——如果有人行過你部機…
# /etc/ssh/sshd_config
ClientAliveInterval 300
ClientAliveCountMax 2
300 秒(5 分鐘)冇反應就斷。如果你需要長時間 run script,用 tmux 或 screen 啦。
第 8 招:限制 SSH 嘅 Cipher 同 Algorithm
唔好俾 server 用啲過時、脆弱嘅 encryption。只保留現代 cipher:
# /etc/ssh/sshd_config
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512
第 9 招:Audit Logging——知邊個做過咩
安全唔單止係防禦,仲要係事後追溯。將 SSH log 級別提高:
# /etc/ssh/sshd_config
LogLevel VERBOSE
咁樣每次 login、logout、command execution attempt 都會記錄。配合 auditd 更好:
sudo apt install auditd -y
sudo auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config_change
第 10 招:定期 Scan 自己
最後,定期用工具 scan 下自己嘅 SSH config,確保冇遺漏:
# 用 ssh-audit 檢查
pip install ssh-audit
ssh-audit -p 54321 your-server.com
# Lynis 全面安全審計
sudo apt install lynis -y
sudo lynis audit system --tests-from-group ssh
ssh-audit 會列出你 server 支援咩 algorithm、有咩潛在弱點,非常實用。
總結:懶人 Checklist
一口氣做齊佢:
- ✅ 改 SSH port(唔係 22,唔係 2222)
- ✅ 禁用 root login
- ✅ 只用 SSH key,禁用密碼
- ✅ AllowUsers / AllowGroups 白名單
- ✅ Fail2Ban 自動封鎖
- ✅ TCP Wrappers 限制來源 IP
- ✅ ClientAliveInterval timeout
- ✅ 限制 cipher 只用 modern algorithm
- ✅ VERBOSE logging + auditd
- ✅ 定期 ssh-audit / Lynis 自檢
做齊以上 10 招,你部 server 嘅 SSH 安全性已經超越市面上 95% 嘅 server。當然,保安係一個持續嘅過程,冇「做完就永世安全」呢回事。記住定期 review,定期更新。
下次再同大家探討其他實用 topic,例如 Docker security hardening 定係 Kubernetes RBAC 設定。有咩想睇嘅就留個言話我知啦!😎



