Linux Server SSH 安全加固 5 步搞掂:由基本到進階嘅完整指南

開場:你部 Linux Server 真係安全咩? 同你吹下水,呢排好多客仔問我:「小編,我開咗部 VPS 放咗個 website 上去,咁係咪就搞掂?」你話呢?就咁 default setting 放出街,等於打開大門叫駭客入嚟飲茶啦! 今日同大家探討下 Linux Server SSH 安全加固嘅最佳實踐,由基本到進階,step-by-step 教你鎖實道門。就算你係新手都好,跟住做就一定安心...

開場:你部 Linux Server 真係安全咩?

同你吹下水,呢排好多客仔問我:「小編,我開咗部 VPS 放咗個 website 上去,咁係咪就搞掂?」你話呢?就咁 default setting 放出街,等於打開大門叫駭客入嚟飲茶啦!

👉 延伸閱讀:Linux Server 安全加固 6 步搞掂 — Defense in Depth 實戰指南

今日同大家探討下 Linux Server SSH 安全加固嘅最佳實踐,由基本到進階,step-by-step 教你鎖實道門。就算你係新手都好,跟住做就一定安心好多。

Step 1:唔好用 root 直接 login

呢個係基本中嘅基本。Default 好多 VPS 都開咗 root SSH login,即係全世界都可以撞你個 root password。我哋第一步就熄咗佢。

首先,create 一個新 user(假設叫 admin):

sudo adduser admin
sudo usermod -aG sudo admin

確認新 user 可以 sudo 之後,edit SSH config:

sudo nano /etc/ssh/sshd_config

搵到 PermitRootLogin 呢行,改做:

PermitRootLogin no

然後 reload SSH:

sudo systemctl reload sshd

記住!改完唔好 logout 住,開多個 terminal 試咗新 user login 到先,如果唔係 lock 死自己就大鑊。

Step 2:換 port + 限制 IP

Default port 22 係最多人掃嘅 target,換個 port 雖然唔係萬能,但至少擋到大量 automated scan。

sudo nano /etc/ssh/sshd_config
# 改成你鐘意嘅 port,例如 2222
Port 2222

更好嘅做法係用 firewall(例如 ufw)限制只允許特定 IP access:

sudo ufw allow from 203.0.113.0/24 to any port 2222 proto tcp
sudo ufw deny 2222/tcp
sudo ufw enable

如果你係用 AWS / GCP / Azure,更加要用 Security Group 去 restrict inbound SSH,呢個係雲端 defense-in-depth 嘅基本操作。

Step 3:SSH Key Authentication — 唔好用 password!

Password 有幾危險?撞得中、phish 到、keylogger 錄到。SSH Key 係最有效嘅第一道防線。

喺你本地機 generate key:

ssh-keygen -t ed25519 -C "your_email@example.com"

然後 copy public key 去 server:

ssh-copy-id -p 2222 admin@your-server-ip

確認 key login 成功之後,熄咗 password authentication:

sudo nano /etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication no

再 reload SSH。由呢一刻開始,只有揸住 private key 嘅你先入到 server。

Step 4:安裝 Fail2Ban — 自動封鎖可疑 IP

Fail2Ban 係一個必須有嘅 tool,佢會 monitor log file,發現有人不斷 fail login 就自動加 firewall rule ban 佢一段時間。

sudo apt install fail2ban -y   # Debian/Ubuntu
sudo dnf install fail2ban -y   # RHEL/Rocky/Alma

Create 一個 local config:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

重點設定:

[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600
findtime = 600

意思係:600 秒內 fail 3 次就 ban 1 個鐘。你可以 set 得再 aggressive 啲都得。

sudo systemctl enable fail2ban --now
sudo fail2ban-client status sshd

Step 5:進階玩法 — 2FA + Audit Logging

想再 secure 啲?加埋 Two-Factor Authentication(TOTP):

sudo apt install libpam-google-authenticator
google-authenticator   # 跟 prompt 做,scan QR code

Edit PAM config:

sudo nano /etc/pam.d/sshd
# 加呢行:
auth required pam_google_authenticator.so

Edit sshd_config:

ChallengeResponseAuthentication yes

而家每次 SSH login 都要入 verification code,就算 key 俾人偷咗都入唔到嚟。

另外,記得 enable auditd 記錄所有 privilege escalation:

sudo apt install auditd
sudo auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config_change
sudo auditctl -a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands

總結

以上 5 個 step,由 basic 到 advanced,做齊基本上你部 Linux server 已經去到「唔易攻」嘅 level。記住 security 係 journey 唔係 destination,定期 check log、定期 update package、定期 review config,咁先係真正嘅 best practice。

🔗 參考資料:OpenSSH 官方文件

有冇邊個 step 你未做?而家就好去搞咗佢!下次再同大家吹過其他 security 話題,bye~👋

#IT教學 #技術分享 #Server #Linux #SSH