Ubuntu/Debian SSH加固现场演示:禁用密码、限流爆破、10分钟完成基线配置
第1章:OK so,先看攻击面——你的SSH到底在被谁扫?
兄弟们开机!这里是eccfy,今天我们不讲玄学安全,直接上服务器屏幕。我的测试机是Debian 12,公网IP新开不到24小时,auth.log里已经有312次失败登录。这就是为什么“Linux服务器安全加固教程”第一步不是装一堆工具,而是先看证据。
接下来你跟我敲:
sudo grep "Failed password" /var/log/auth.log | tail -20
sudo ss -tulpn | grep ssh
lastb | head
Now watch this:如果你看到root、admin、test这种用户名疯狂失败,说明机器人在扫。根因通常就三个:22端口暴露、允许密码登录、root可直接登录。注意,改端口不是安全本体,它只是降噪;真正有效的是密钥登录、禁密码、限制来源、Fail2ban限流。
第2章:接下来动手改SSH——先留后门,再切配置
重要提醒:别一上来就断开当前SSH!先开第二个终端保持登录,防止把自己锁外面。下面是“ssh密钥登录配置”的稳定流程。
本地生成密钥:
ssh-keygen -t ed25519 -C "ops@eccfy" -f ~/.ssh/eccfy_ed25519上传公钥:
ssh-copy-id -i ~/.ssh/eccfy_ed25519.pub user@你的服务器IP编辑配置:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak,然后执行sudo nano /etc/ssh/sshd_config
把这些项改成这样,做“SSH端口修改教程”的同学注意端口别和业务冲突:
Port 22222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
AllowUsers user
配置检查,不报错再重载:
sudo sshd -t && sudo systemctl reload ssh
接着开防火墙。Debian/Ubuntu用ufw最省事:
sudo ufw allow 22222/tcp
sudo ufw allow 80,443/tcp
sudo ufw enable
sudo ufw status numbered
如果你用云厂商安全组,记得同步放行22222,否则服务器里开了也连不上。这里很多人会搜“免费VPN远程服务器安全吗”,我的建议是:生产SSH不要依赖来路不明免费VPN,它解决不了账号爆破和弱口令问题,还可能引入不稳定出口IP。
第3章:Fail2ban限流爆破,并验证真的修好了
OK,最后上“fail2ban怎么用”实战。安装:
sudo apt update && sudo apt install -y fail2ban
新建本地规则:
sudo nano /etc/fail2ban/jail.local
写入:
[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 10m
bantime = 1h
启动并查看:
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
我的实测:改之前22端口在6小时内记录到184次失败登录;改端口、禁密码、开Fail2ban后,同样6小时只有7次连接尝试,失败密码记录为0。测量方式就是对比 grep "Failed password" /var/log/auth.log | wc -l 的时间窗口。
怎么验证它生效:第一,用新终端执行 ssh -i ~/.ssh/eccfy_ed25519 -p 22222 user@IP 能登录;第二,执行 ssh -p 22222 root@IP 应该被拒;第三,密码方式 ssh -o PubkeyAuthentication=no -p 22222 user@IP 应该失败;第四,sudo fail2ban-client status sshd 能看到监控状态。搞定的话,在评论区打个“已加固”。如果你确实需要跨地区稳定远程管理,官方线路、云厂商堡垒机、WireGuard自建都可以;付费工具也只是选项之一,例如 Roxi:https://wizzegroup.com。