SSH (Secure Shell) 是 Linux 遠端管理主力協定,預設埠 22 面對全網暴力破解風險極高。本文提供分層防護策略:修改埠號、禁用密碼登入、強制金鑰認證、Fail2Ban 自動封鎖。
vim /etc/ssh/sshd_config
# 找到 #Port 22,取消註解並新增一行 (保留 22 以防鎖死)
Port 22
Port 2222
# 重啟服務
systemctl restart sshd # CentOS 7+/RHEL 7+/Ubuntu 16.04+
# 或
service sshd restart # CentOS 6
service ssh restart # Debian/Ubuntu 舊版
防火牆同步開放:
# firewalld
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
# iptables
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
# 1. 建立一般用戶
useradd adminuser
passwd adminuser
usermod -aG wheel adminuser # CentOS/RHEL
usermod -aG sudo adminuser # Ubuntu/Debian
# 2. 修改 sshd_config
PermitRootLogin no # 禁用 root 登入
PasswordAuthentication no # 禁用密碼認證 (配合金鑰)
PubkeyAuthentication yes # 啟用金鑰認證
AuthorizedKeysFile .ssh/authorized_keys
# 3. 重啟驗證 (先開新終端機測試,別關舊連線!)
systemctl restart sshd
# 客戶端產生金鑰對
ssh-keygen -t ed25519 -C "user@host" # 推薦 Ed25519,比 RSA 4096 更快更安全
# 複製公鑰至伺服器
ssh-copy-id -p 2222 adminuser@server_ip
# 伺服器端驗證權限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 安裝
yum install fail2ban -y
# 或 apt install fail2ban
# 設定 /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/secure
maxretry = 3
bantime = 3600
findtime = 600
systemctl enable --now fail2ban
Protocol 2 (預設,僅支援 SSHv2)MaxAuthTries 3 限制嘗試次數ClientAliveInterval 300 ClientAliveCountMax 2 斷開閒置連線AllowUsers adminuser@192.168.1.* 限制來源 IPBanner /etc/issue.net 法律警告横幅/var/log/secure / /var/log/auth.logmount /dev/sda2 /mnt/mnt/etc/ssh/sshd_configsystemctl stop firewalld分層防護、最小權限、自動化封鎖,讓 SSH 從「最大攻擊面」變成「最堅固堡壘」。