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)。

  1. 本地生成密钥(推荐 ed25519):

    text
    ssh-keygen -t ed25519 -C "your_email@example.com - 2026"
  2. 上传公钥到服务器(最安全方式):

    text
    ssh-copy-id youradmin@服务器IP
  3. 编辑服务器端配置(推荐使用 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
  4. 测试配置语法:

    text
    sudo sshd -t
  5. 重启服务:

    text
    sudo 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。

安装:

text
sudo apt install fail2ban

默认已覆盖 sshd jail。自定义 /etc/fail2ban/jail.local:

text
[sshd]
enabled = true
port = 22          # 或你的端口
maxretry = 3
bantime = 24h
findtime = 10m

4.2 CrowdSec

社区威胁情报共享 + bouncer 到 nftables。

安装:

text
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:

text
filenames:
  - /var/log/auth.log
labels:
  type: syslog

启动并监控:

text
sudo systemctl enable --now crowdsec
cscli metrics

CrowdSec 优势:共享黑名单、场景检测(不仅仅是 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 白名单,这三层组合在当前威胁环境下性价比最高。

THE END