云服务器安全加固:SSH 密钥登录、改端口与 fail2ban 三步落地
云服务器安全加固: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 自动封禁,再加上定期更新和最小端口暴露。这三步加起来不到半小时,但能挡住绝大多数针对小服务器的自动化攻击。服务器越早加固,之后省下的麻烦就越多。
- 点赞
- 收藏
- 关注作者
评论(0)