云服务器 SSH 安全加固实操:密钥登录 + 改端口 + fail2ban 防爆破
背景
新买的云服务器(比如华为云 Flexus L 实例)一上线,/var/log/auth.log 里很快就会出现大量来自陌生 IP 的 SSH 登录尝试。弱口令被爆破是云服务器最常见的被入侵原因之一。本文按“改认证方式 → 收窄暴露面 → 自动封禁”的顺序,整理一套在 Ubuntu 22.04 上可以直接照做的 SSH 加固流程。
第一步:先看看有多少人在敲门
sudo grep "Failed password" /var/log/auth.log | wc -l
sudo grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head
第一条统计失败登录次数,第二条按来源 IP 排序。如果数字很大,说明加固很有必要。
第二步:改用密钥登录
在本地电脑生成密钥(推荐 ed25519):
ssh-keygen -t ed25519 -C "my-laptop"
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@<服务器IP>
确认用密钥能登录后,再编辑服务器上的 /etc/ssh/sshd_config:
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin prohibit-password
注意:Ubuntu 22.04 的 /etc/ssh/sshd_config.d/ 目录下可能有云镜像自带的配置(如 50-cloud-init.conf 里写了 PasswordAuthentication yes),它会覆盖主配置,记得一起改掉。
第三步:修改默认端口
在 sshd_config 里加一行:
Port 22022
改端口前务必先在华为云控制台的安全组入方向规则里放行新端口(TCP 22022),否则重启 sshd 后会连不上。确认新端口能登录后,再把安全组里的 22 端口规则删除或限制来源 IP。
检查配置并重启:
sudo sshd -t && sudo systemctl restart ssh
sshd -t 会做语法检查,没有输出才表示正常。保持当前会话不要断开,另开一个终端测试新连接,确认无误再退出。
第四步:用 fail2ban 自动封禁
sudo apt update && sudo apt install -y fail2ban
sudo tee /etc/fail2ban/jail.local >/dev/null <<'CONF'
[sshd]
enabled = true
port = 22022
maxretry = 5
findtime = 10m
bantime = 1h
CONF
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
含义是:10 分钟内失败 5 次就封禁 1 小时。status sshd 可以看到当前被封的 IP 列表。如果误封了自己,用 sudo fail2ban-client set sshd unbanip <IP> 解封。
第五步:收尾检查
ss -tlnp | grep ssh:确认 sshd 只监听新端口;- 安全组只放行必要端口,SSH 端口尽量限定为自己的公网 IP;
- 控制台的 VNC 远程登录是最后的保底手段,万一配置写错把自己锁在门外,可以通过它进去改回来。
小结
密钥登录解决“弱口令”问题,改端口和安全组收窄暴露面,fail2ban 处理剩下的扫描流量。三步做完后再看 auth.log,失败登录记录基本会降到个位数。整个过程十几分钟,建议每台新开的云服务器都先做一遍。
- 点赞
- 收藏
- 关注作者
评论(0)