云服务器安全加固:SSH 密钥登录、改端口与 fail2ban 三步落地

举报
yd_292548114 发表于 2026/11/09 09:33:55 2026/11/09
【摘要】 云服务器安全加固:SSH 密钥登录、改端口与 fail2ban 三步落地刚开好的云服务器,默认配置往往是“能用就行”,离“安全”还差几步。网上每天都有成千上万台机器在被扫描器敲门,弱口令、默认端口、长期不打补丁,任何一个缺口都可能让一台小服务器变成挖矿肉鸡。下面这三步花不了半小时,做完之后服务器的安全水位会明显上一个台阶。 第一步:关掉密码登录,改用 SSH 密钥密码登录最大的问题不是密码...

云服务器安全加固:SSH 密钥登录、改端口与 fail2ban 三步落地

刚开好的云服务器,默认配置往往是“能用就行”,离“安全”还差几步。网上每天都有成千上万台机器在被扫描器敲门,弱口令、默认端口、长期不打补丁,任何一个缺口都可能让一台小服务器变成挖矿肉鸡。下面这三步花不了半小时,做完之后服务器的安全水位会明显上一个台阶。

第一步:关掉密码登录,改用 SSH 密钥

密码登录最大的问题不是密码不够复杂,而是它允许无限次试错。扫描器拿着常用密码字典 24 小时轮询,再强的密码也有被撞中的一天。密钥登录则完全不同:私钥 2048 位以上,暴力破解在数学上就不现实。

先在自己的电脑上生成一对密钥:

ssh-keygen -t ed25519 -C "my-server-key"

一路回车,会在 ~/.ssh/ 下面生成 id_ed25519(私钥,绝不外传)和 id_ed25519.pub(公钥)。把公钥追加到服务器的 ~/.ssh/authorized_keys:

mkdir -p ~/.ssh && chmod 700 ~/.ssh
cat id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

权限这一步别偷懒,authorized_keys 权限不对,SSH 会直接拒绝密钥登录。确认密钥能登录之后,再去改 /etc/ssh/sshd_config,把下面两行改成:

PasswordAuthentication no
PermitRootLogin prohibit-password

prohibit-password 的意思是 root 仍可登录,但只能用密钥,不能用密码。改完重启 SSH 服务:

sudo systemctl restart sshd

注意顺序:先确认密钥登录成功,再关密码。顺序反了,自己会被锁在门外,只能走云厂商的 VNC 控制台救场。

第二步:把 SSH 端口从 22 换掉

改端口不是万能药,它挡不住定向攻击,但能挡掉绝大多数“扫全网 22 端口”的批量扫描。实测中,换端口后日志里的失败登录尝试能从每天几千条降到个位数。

在 sshd_config 里改一行:

Port 2222

选一个 1024 到 65535 之间的端口,避开常用服务端口。改完同样重启 SSH 服务。别忘了两件事:第一,云厂商的安全组要放行新端口,同时可以把 22 端口的入方向规则收掉;第二,服务器本机的防火墙也要放行,比如:

sudo ufw allow 2222/tcp
sudo ufw enable

登录时记得带上端口参数:

ssh -p 2222 root@服务器IP

如果经常登录,把端口写进本地的 ~/.ssh/config,以后直接 ssh myserver 就行:

Host myserver
    HostName 服务器IP
    Port 2222
    User root
    IdentityFile ~/.ssh/id_ed25519

第三步:装 fail2ban,自动封禁暴力破解的 IP

前两步做完,剩下的攻击面主要是“有人盯着你的新端口继续撞”。fail2ban 的做法很简单:监控 SSH 的登录日志,某个 IP 在短时间内失败次数超标,就自动把它封一段时间。

Ubuntu / Debian 上安装只要两条命令:

sudo apt update && sudo apt install fail2ban -y

默认配置对 SSH 已经够用。想调严一点,可以在 /etc/fail2ban/jail.local 里写:

[sshd]
enabled = true
port = 2222
maxretry = 5
bantime = 3600
findtime = 600

意思是 10 分钟内失败 5 次,封 1 小时。注意 port 要和你实际改的端口一致,否则规则对不上。启动并设为开机自启:

sudo systemctl enable --now fail2ban

查看封禁状态用:

sudo fail2ban-client status sshd

能看到当前被封的 IP 列表。误封自己的情况很少见,万一发生,用 sudo fail2ban-client set sshd unbanip 你的IP 解封即可。

顺手做的三件小事

第一,保持系统更新。安全补丁是最便宜的保险,每周跑一次 apt update && apt upgrade,或者配一个自动安全更新,让系统自己打补丁。

第二,只开必要的端口。跑 ss -tlnp 看一下当前在监听的端口,认不出的服务先查清楚再决定留不留。数据库这类服务不要直接暴露公网,只允许内网或本机访问。

第三,定期看一眼登录日志。last 命令看最近的登录记录,journalctl -u sshd --since today 看今天的 SSH 日志。养成习惯后,异常登录往往在造成损失之前就能发现。

总结

安全加固不需要一次做到完美,关键是把“默认暴露”的缺口先堵上:密钥登录替代密码、换掉默认端口、fail2ban 自动封禁,再加上定期更新和最小端口暴露。这三步加起来不到半小时,但能挡住绝大多数针对小服务器的自动化攻击。服务器越早加固,之后省下的麻烦就越多。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。