Ubuntu Server SSH 安全配置指南
SSH 是 Ubuntu Server 最常见的远程管理入口,同时也是攻击者最优先扫描的目标。在 2026 年,互联网上的自动化扫描和暴力破解工具已高度成熟,单纯依赖密码或默认配置已不足以抵御威胁。Canonical 官方文档、CIS 基准以及社区实践均强调:SSH 安全的核心是“密钥认证 + 最小暴露 + 动态防御”。
本指南适用于 Ubuntu 24.04 LTS(Noble Numbat)及后续版本,聚焦生产环境最务实、可落地的高收益加固路径。优先级从高到低排列。
1. 核心安全模型与分层防御
现代 SSH 安全采用纵深防御架构:
- 认证层:强制公钥(ed25519 优先),禁用密码
- 访问控制层:禁止 root 登录、限制用户/组/IP
- 协议与加密层:禁用弱算法、优先现代密码套件
- 连接管理层:限制尝试次数、超时、速率限制
- 入侵检测层:Fail2Ban 或 CrowdSec 动态封禁
- 网络层:UFW/nftables 限制来源 + 端口变更(可选)
- 高级层:MFA(2FA)、bastion 主机、VPN 前置、USG 自动化 CIS 合规
2. 基础配置(必须立即执行)
2.1 创建专用管理用户(禁用 root 远程登录)
直接 root 登录是最大风险点。创建普通用户 + sudo 权限:
- 新用户:adduser youradmin
- 加入 sudo:usermod -aG sudo youradmin
- 测试新用户 SSH 登录成功后,锁定 root 密码(可选):passwd -l root
2.2 配置 SSH 密钥认证(禁用密码登录)
密钥认证是 2026 年 SSH 安全基石。ed25519 曲线已成为事实标准(安全性高、计算效率优于 rsa-2048、ecdsa)。
本地生成密钥(推荐 ed25519):
textssh-keygen -t ed25519 -C "your_email@example.com - 2026"上传公钥到服务器(最安全方式):
textssh-copy-id youradmin@服务器IP编辑服务器端配置(推荐使用 drop-in 方式,避免覆盖升级): 创建 /etc/ssh/sshd_config.d/hardening.conf(优先级高于主文件):
text# 认证方式 PubkeyAuthentication yes PasswordAuthentication no KbdInteractiveAuthentication no PermitEmptyPasswords no # 禁止 root 登录 PermitRootLogin no # 限制尝试与超时 MaxAuthTries 3 LoginGraceTime 20 MaxStartups 10:30:60 # 连接保活(防 NAT 超时断开) ClientAliveInterval 300 ClientAliveCountMax 3 # 只允许特定用户(可选) # AllowUsers youradmin deploy # 现代加密优先(禁用弱算法) Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org测试配置语法:
textsudo sshd -t重启服务:
textsudo systemctl restart ssh
关键:先在新终端验证密钥登录成功,再关闭当前会话。否则容易锁死自己。
3. 网络与防火墙限制
- UFW 最小规则(推荐):text
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow OpenSSH # 或 allow 你的端口/tcp sudo ufw enable - 限制来源 IP(最高安全提升):text
sudo ufw allow from 你的家IP/32 to any port 22 sudo ufw allow from 你的公司子网/24 to any port 22 - 可选改端口(降低扫描噪音,非本质安全): 在 hardening.conf 中加 Port 5822,然后 UFW 对应放行。
4. 入侵检测与动态防御(强烈推荐)
4.1 Fail2Ban(经典、轻量)
监控 auth.log,失败尝试过多自动封禁 IP。
安装:
sudo apt install fail2ban默认已覆盖 sshd jail。自定义 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 22 # 或你的端口
maxretry = 3
bantime = 24h
findtime = 10m4.2 CrowdSec
社区威胁情报共享 + bouncer 到 nftables。
安装:
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
sudo apt install crowdsec crowdsec-firewall-bouncer-nftables配置 SSH 采集: 创建 /etc/crowdsec/acquis.d/sshd.yaml:
filenames:
- /var/log/auth.log
labels:
type: syslog启动并监控:
sudo systemctl enable --now crowdsec
cscli metricsCrowdSec 优势:共享黑名单、场景检测(不仅仅是 brute-force)、支持多服务。
5. 高级选项(视需求启用)
- MFA / 2FA:Google Authenticator PAM 模块(适用于高安全需求)
- 证书认证:SSH CA 签名密钥(大规模管理)
- Bastion / Jump Host:所有管理通过跳板机
- VPN 前置:WireGuard / Tailscale / ZeroTier,只在内网暴露 SSH
- USG + CIS 自动化:Ubuntu Pro 用户启用 USG,应用 cis_level1_server profile(包含 SSH 相关规则)
6. 验证与审计清单
- sshd -T | grep -iE 'password|permitroot|pubkey|auth' → 检查关键设置
- journalctl -u ssh -n 100 → 观察登录尝试
- fail2ban-client status sshd 或 cscli decisions list → 查看封禁
- ssh-audit localhost(安装 ssh-audit 工具)→ 自动化扫描弱点
- USG audit:sudo usg audit cis_level1_server(Pro 用户)
结语
2026 年最安全的 SSH 配置公式:密钥认证(ed25519) + 禁用密码 + 禁止 root + 限制尝试 + UFW 来源限制 + CrowdSec/Fail2Ban 动态封禁。
做到以上步骤,暴力破解成功率接近零,日常管理仍保持高效。生产环境建议结合 Ubuntu Pro 的 USG 工具实现自动化合规审计,避免手动遗漏。
如果你的服务器暴露在公网,优先实施密钥 + CrowdSec + IP 白名单,这三层组合在当前威胁环境下性价比最高。
