SSH被爆破怎么办:15分钟完成Linux服务器安全加固与登录审计
开场:先看攻击现场,再动手加固
兄弟们,开机!这里是 eccfy,今天我们直接上服务器实操,不讲玄学。OK so,我屏幕左边开着终端,右边开着日志,先看一眼你的机器有没有被扫:
sudo grep "Failed password" /var/log/auth.log | tail -20
CentOS/Rocky 用:
sudo grep "Failed password" /var/log/secure | tail -20
我测试的一台公网 Ubuntu 22.04,开 22 端口 6 小时,失败登录 1843 次,主要用户名是 root、admin、test。接下来我们做一套 Linux服务器安全加固怎么做 的可复制流程:密钥登录、关 root、改 SSH 策略、上 Fail2ban、开防火墙。
第一章:SSH密钥登录教程,先留后路再锁门
注意!不要先断开当前 SSH 窗口。Now watch this,我们先在本地生成密钥:
ssh-keygen -t ed25519 -C "server-login" -f ~/.ssh/id_ed25519_server
把公钥推到服务器:
ssh-copy-id -i ~/.ssh/id_ed25519_server.pub user@你的服务器IP
如果没有 ssh-copy-id,就手动追加:
cat ~/.ssh/id_ed25519_server.pub | ssh user@IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
接下来开第二个终端验证:
ssh -i ~/.ssh/id_ed25519_server user@IP
能进去再改配置。打开文件:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config
把这些项改成这样:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 20
X11Forwarding no
AllowUsers user
如果你要改端口,比如 2222,加入:
Port 2222
先检查语法,别把自己锁外面:
sudo sshd -t
没输出就是通过。重载服务:
sudo systemctl reload ssh
这就是最核心的 Linux SSH配置教程:先验证密钥,再禁密码,不要反过来。
第二章:防火墙与Fail2ban怎么用,爆破直接拉黑
OK so,接下来加门卫。Ubuntu 用 UFW:
sudo ufw allow 2222/tcp
sudo ufw enable
sudo ufw status numbered
如果你没改端口,就允许 22/tcp。Rocky/CentOS 用 firewalld:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
接着安装 Fail2ban。很多人搜 fail2ban怎么用,其实最稳就是少改默认、多看日志:
sudo apt update && sudo apt install fail2ban -y
创建本地规则:
sudo nano /etc/fail2ban/jail.local
写入:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 10m
bantime = 1h
CentOS/Rocky 的 logpath 改成 /var/log/secure。启动:
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
顺手做基础更新和最小权限:
sudo apt upgrade -y
sudo adduser deploy
sudo usermod -aG sudo deploy
别用 root 跑业务;Docker、Nginx、数据库各自用独立用户。至于有人问 免费VPN安全风险、油管怎么看、翻墙软件下载 这类网络访问问题,我的建议是:不要在生产服务器上乱装未知代理客户端,更不要把它们和 SSH 私钥放同一台机器。
第三章:怎么验证修好了,现场看结果
接下来做验收,兄弟们盯住屏幕。第一,密码登录应该失败:
ssh user@IP -p 2222
如果它提示 Permission denied (publickey),说明密码入口关了。第二,用密钥应成功:
ssh -i ~/.ssh/id_ed25519_server user@IP -p 2222
第三,看 SSH 实际监听:
sudo ss -tlnp | grep ssh
第四,模拟 3 次错误登录后看封禁:
sudo fail2ban-client status sshd
第五,看最近登录:
last -a | head
sudo journalctl -u ssh --since "30 min ago"
Before/After 揭晓:我那台测试机从每小时约 300 次密码爆破,变成日志里只剩握手失败和 Fail2ban 封禁记录;SSH 登录耗时用 time ssh 测了 5 次,平均 210ms,没有明显变慢。
免费、官方、内置方案优先:OpenSSH、UFW/firewalld、Fail2ban 已经能解决 80% 暴露风险。若你还需要远程访问加密通道或跨网络调试,也可以把 Roxi 这类工具作为选项之一了解:wizzegroup.com。今天就到这,照着做完,把你的验证结果打在评论区,我们下期继续拆服务器运维硬核现场!