服务器被植入后门,如何加固 SSH 登录?
刚买的服务器还没跑业务,就被通知有后门?
八成是 SSH 弱口令被扫了。
别急着重装,先按下面步骤把 SSHD 加固到指纹级别,后门就算还在也连不进来。
先做三件事:备份、查后门、留条退路
登录服务器后,第一件事不是改配置,而是备份现有 SSH 配置文件:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
接下来快速排查常见后门位置:
cat ~/.ssh/authorized_keys—— 查看是否有多余的公钥;crontab -l以及检查/var/spool/cron/下有无可疑定时任务;ps aux | grep -i ssh—— 看是否有异常 SSH 进程在监听其他端口;- 检查
/root/.bashrc、/etc/rc.local等开机启动脚本是否有恶意加载。
如果发现异常文件或进程,先记录路径,不要马上删除(可能触发反弹 shell),等加固完再清理。
核心加固:让后门无机可乘
1. 修改默认端口,减掉 99% 的扫描
sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config
选一个 1024-65535 之间的端口(例如 2222),之后连接要用 ssh -p 2222 user@ip。
2. 关闭 root 直接登录,切断最高权限入口
sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
以后用普通用户登录,需要提权时再 su - 或 sudo。
3. 只允许密钥登录,密码登录彻底禁用
先确认本机(客户端)已有密钥对,没有则生成:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
将公钥传到服务器(直接复制到 ~/.ssh/authorized_keys,注意权限:chmod 600 ~/.ssh/authorized_keys && chmod 700 ~/.ssh/)。
然后执行:
sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
4. 防火墙只放行可信 IP(可选但强烈建议)
用 iptables 或火墙(ufw/firewalld)限定源 IP。
这里以 ufw 为例:
ufw allow from 你的家庭公网IP to any port 2222
ufw deny 2222
注意顺序:先放行再拒绝,否则把自己锁了。
5. 安装 fail2ban 自动封掉暴力破解
debian/ubuntu 系列:
apt install fail2ban -y
配置 /etc/fail2ban/jail.local:
[sshd-custom]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
重启生效:systemctl restart fail2ban。
所有配置修改后,务必先重载 SSHD 但不退出当前会话:
systemctl reload sshd
然后另开一个终端窗口测试新连接,确认能登录再关闭旧窗口。
避坑高频问题
- 改了端口却连不上? 检查防火墙是否放行了新端口,以及 SELinux(
getenforce显示 Enforcing 时要放行 2222 端口)。 - 密钥登录失败? 查看服务端
~/.ssh/authorized_keys权限是否为 600,目录是否为 700;客户端密钥权限不能超过 600。 - 禁用 root 后忘记创建普通用户? 立刻用旧会话创建用户并加入 sudo 组:
useradd -m user && usermod -aG sudo user && passwd user;如果旧会话已断,联系服务商进救援模式。 - fail2ban 封了自己? 在 /etc/fail2ban/jail.local 中的
ignoreip添加本机 IP 或内网段,重启 fail2ban。
验证加固效果
- 查看 SSH 日志是否只记录白名单来源:
grep "Accepted" /var/log/auth.log | tail -10; - 换个网络环境(比如手机热点)尝试用密码登录旧端口,应该被拒绝;
- 故意输错几次密码,等待 fail2ban 封禁:
fail2ban-client status sshd-custom显示Currently banned数量 > 0 即为成功; - 最后检查一下后门是否还有残留——用
lsof -i -n | grep -v 2222 | grep LISTEN看看有无意外监听端口,如果有,确认并清理。
完成以上加固后,你的 SSH 就像换了指纹锁,之前植入的后门没有钥匙,只能在外墙瞎转。
建议把这篇教程收藏起来,每次服务器初始化时照着跑一遍,后门自然没机会落地。