VPS SSH 安全加固实战:禁用 Root 密码登录、ED25519 密钥认证与 Fail2ban 防爆破配置

详解生产级 Linux VPS 的 SSH 安全加固实践:配置 ED25519 现代椭圆曲线密钥认证、彻底禁用密码与 Root 直连、修改非标端口并联动 Fail2ban 自动封禁暴力破解 IP。

VPS SSH 安全加固实战:禁用 Root 密码登录、ED25519 密钥认证与 Fail2ban 防爆破配置

任何一台拥有公网公网 IP 的 Linux VPS,在开机后的数分钟内就会迎来全网自动化扫描机器人的成千上万次暴力破解。在落实VPS SSH 安全加固实战时,依靠简单的复杂密码早已无法抵御持续的字典碰撞与潜在漏洞探测。

更严重的是,频繁的密码爆破不仅会消耗服务器 CPU 与内存算力,还极易触发服务商的 ToS 违规警报。结合此前在 VPS 停机封禁原因与 ToS 避坑指南 与 Linux VPS 自动化巡检与状态告警实战 中的安全准则,本文提供一套生产级 VPS 开机必做的 SSH 防护体系:从 ED25519 密钥认证、禁用密码、变更端口到 Fail2ban 自动化拦截,彻底阻断 99.9% 的恶意探测。


一、配置现代 ED25519 椭圆曲线密钥认证

相比传统的 RSA 2048/4096 算法,ED25519 椭圆曲线算法具备更高的安全性、更小的密钥体积(仅 68 字符)以及更快的签名计算速度。

1. 本地生成 ED25519 密钥对

在本地终端(Windows PowerShell 或 macOS/Linux Terminal)执行:

ssh-keygen -t ed25519 -C "[email protected]"

按提示指定保存路径(默认 ~/.ssh/id_ed25519),并强烈建议设置本地保护密码(Passphrase)。

2. 将公钥分发至目标 VPS

通过 ssh-copy-id 命令快速安装(或手动追加至远程机器的 ~/.ssh/authorized_keys):

ssh-copy-id -i ~/.ssh/id_ed25519.pub root@<YOUR_VPS_IP>

安装后确保远程目录与文件权限严格受限(避免由于权限过宽导致 SSH 忽略公钥):

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

二、收紧 SSH 服务端核心配置(防失联实操)

[!CAUTION] 切勿在关闭现有 SSH 会话前退出! 修改配置并重启服务后,务必新开一个独立终端测试登录,验证成功后再关闭老会话,防止配置失误导致机器失联。

编辑主配置文件 /etc/ssh/sshd_config(或在 /etc/ssh/sshd_config.d/99-security.conf 中追加):

# 1. 修改默认 22 端口至高位随机端口(例如 28422),避开全网无差别扫描
Port 28422

# 2. 彻底禁用密码认证,仅允许密钥登录
PasswordAuthentication no
ChallengeResponseAuthentication no

# 3. 限制 Root 直接登录,或仅允许通过密钥认证
PermitRootLogin prohibit-password

# 4. 禁用空密码与 X11 转发
PermitEmptyPasswords no
X11Forwarding no

# 5. 限制最大认证尝试次数(超过3次直接断开)
MaxAuthTries 3

验证配置语法并重启服务:

sshd -t
systemctl restart sshd

三、部署 Fail2ban 实现爆破 IP 自动化拦截与拉黑

修改端口与禁用密码能杜绝爆破成功,但日志中依然可能残留海量连接握手。部署 Fail2ban 能够自动监控系统安全日志,在某个 IP 达到阈值后自动调用 iptables/nftables 封禁该 IP。

1. 安装 Fail2ban

# Debian / Ubuntu
apt update && apt install -y fail2ban

# CentOS / AlmaLinux / Rocky Linux
dnf install -y epel-release && dnf install -y fail2ban

2. 配置自定义监控规则

创建局部配置文件 /etc/fail2ban/jail.local:

[DEFAULT]
bantime = 1d
findtime = 10m
maxretry = 3
banaction = iptables-multiport

[sshd]
enabled = true
port = 28422
filter = sshd
logpath = /var/log/auth.log
maxretry = 3

注:在 RedHat/CentOS 体系中,logpath 通常为 /var/log/secure。

3. 启动服务与状态核验

systemctl enable --now fail2ban

# 查看当前被封禁的恶意 IP 列表
fail2ban-client status sshd

四、生产级 SSH 防护决策对比与排错清单

安全层级 采取措施 防御效果 运维维护成本
基础层 修改默认 22 端口(例如 28422) 过滤 95% 以上全网无差别自动化扫盘 极低(仅需记忆新端口)
认证层 禁用密码 + 强制 ED25519 密钥 杜绝暴力破解可能,防中间人探测 低(保管好私钥与备份)
网络层 Fail2ban 自动化日志分析与动态封禁 压制恶意扫描并发,减轻系统资源消耗 极低(守护进程常驻)
隔离层 UFW / iptables 仅允许白名单 IP 访问 彻底隐蔽管理端口,最高安全基线 中等(需固定公网 IP 或搭配 VPN)

如果团队有多台服务器分布于全球,推荐进一步参考 多节点 VPS 异地组网实战,通过 Tailscale 或 WireGuard 构建私有运维内网,直接将 SSH 绑定在内网虚拟网卡上,从公网彻底隐藏 SSH 端口。更多系统级防护技巧可参阅 建站与运维指南。

评论