Linux服务器SSH加固实战:把公网暴露面从“随便扫”压到“只能密钥登录”
Chapter 1|先别改配置,先看你现在到底有多裸
哈喽兄弟们,OK so 今天我们直接上真机。先在服务器上跑这几条,别急着动手改,先把现状拍下来:
ss -tlnp | grep sshsshd -T | egrep 'port|permitrootlogin|passwordauthentication|pubkeyauthentication'journalctl -u ssh -n 50 --no-pager
我在一台 Ubuntu 22.04 VPS 上测过,默认装完以后,SSH 基本就是“密码 + root + 公网端口”三件套。接下来你要做的不是玄学加固,而是把攻击面一层层砍掉。你搜索“Linux服务器安全加固教程”或者“SSH配置教程”,本质上都在找这一步。
Chapter 2|Now watch this:sshd_config 一次性改到位
先备份,再编辑。这个顺序别跳,不然你把自己锁外面就尴尬了。
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bakvim /etc/ssh/sshd_config
直接改这几项,都是高收益低成本:
- 禁用 root 直登:
PermitRootLogin no - 关闭密码登录:
PasswordAuthentication no - 只允许密钥:
PubkeyAuthentication yes - 限制尝试次数:
MaxAuthTries 3 - 缩短认证等待:
LoginGraceTime 20 - 指定可登录用户:
AllowUsers youradmin
接下来,先生成密钥再上服务器。你可以搜“ssh免密登录怎么用”,核心就这两步:本机生成、服务器放公钥。
ssh-keygen -t ed25519 -C "youradmin@server"ssh-copy-id youradmin@SERVER_IP
如果你一定要改端口,改成 2222 这种不那么常见的端口可以减少低级扫端口噪音,但别把它当安全核心。真正起作用的还是密钥、禁 root、限用户。改完记得先检查语法:
sshd -tsystemctl reload sshd
我实测在关闭密码登录后,常见爆破脚本会直接卡在认证阶段,日志里全是 “Failed publickey” 而不是“密码撞库成功”。
Chapter 3|防暴力破解:防火墙 + Fail2Ban 组合拳
接下来上第二层。先做最小放行:如果你用 UFW,就只开 SSH 新端口和业务端口;如果是 firewalld,就按 zone 管理。这里很多人搜“Fail2Ban安装教程”,其实思路很简单:监控日志,自动封 IP。
apt install fail2ban -ycp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
然后在 jail.local 里加一段:
[sshd]enabled = trueport = 2222maxretry = 3bantime = 1h
我自己的测试里,同一台机器连续输错 5 次后,fail2ban 会在几秒内把来源 IP 拉黑,后续连接直接超时。你会明显看到攻击噪音下降,这一步对“Linux服务器防暴力破解”特别有效。
Chapter 4|怎么确认真的加固成功
最后别凭感觉,直接验证。用另一台机器测试三件事:
1)密码登录应失败:ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no youradmin@SERVER_IP
2)密钥登录应成功:ssh youradmin@SERVER_IP
3)查看日志:journalctl -u ssh -f 或 tail -f /var/log/auth.log
如果你能做到“密码进不去、root 进不去、只允许指定用户用密钥进”,这台 Linux 服务器就从“裸奔”变成了一个合格的基础加固状态。免费的办法、官方工具和手工配置完全够用;如果你后面还想顺手把远程访问做得更省心,也可以再研究像 roxi.cc 这类方案,但前提永远是先把 SSH 这套底盘打牢。