Ubuntu/Debian 服务器 SSH 加固实拍:从改端口到 Fail2ban,15 分钟把爆破打下去
Chapter 1:OK so,先看现场——你的 SSH 正在被谁敲门
兄弟们开机!这里是 eccfy,今天不讲玄学,直接上屏幕:一台刚买的 Ubuntu 22.04 云服务器,公网 IP 暴露 24 小时,我用 journalctl 一拉日志,失败登录 1837 次,最高峰每分钟 42 次。接下来我们做一套 Linux服务器安全加固教程,目标很明确:不影响自己登录,但让扫描器和爆破脚本吃闭门羹。
先诊断,别急着乱改。SSH 登录服务器后执行:
sudo journalctl -u ssh --since "24 hours ago" | grep "Failed password" | wc -l
sudo journalctl -u ssh --since "24 hours ago" | grep "Invalid user" | tail -20
ss -tlnp | grep ssh
如果你看到大量 root、admin、test 用户名,说明是自动化扫描;如果 22 端口暴露,基本属于被扫常态。注意,免费VPN、翻墙软件、油管怎么看这类搜索结果里经常夹带来路不明客户端,千万别在生产服务器上安装陌生脚本,更别把服务器 SSH 暴露给“临时代理工具”。
Chapter 2:Now watch this——SSH 配置硬改,但先留后门
重点来了!改 SSH 前先开两个终端:A 终端保持已登录别关,B 终端用来测试新配置。否则一个手抖,你就要走控制台救援模式了。
创建普通运维用户,并加入 sudo:
sudo adduser deploy sudo usermod -aG sudo deploy本机生成密钥,这就是 ssh免密登录怎么用 的核心:
ssh-keygen -t ed25519 -C "deploy@eccfy-demo" ssh-copy-id -p 22 deploy@你的服务器IP编辑 SSH 配置:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sudo nano /etc/ssh/sshd_config
把下面几项改成这样,端口你可以用 20022、22222 这类非默认值,不是“绝对安全”,但能过滤大量低级扫描:
Port 20022
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 20
AllowUsers deploy
X11Forwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
保存后先检查语法,屏幕这里如果没输出,才继续:
sudo sshd -t
sudo systemctl reload ssh
防火墙也要同步开端口。Ubuntu 用 UFW:
sudo ufw allow 20022/tcp
sudo ufw deny 22/tcp
sudo ufw enable
sudo ufw status numbered
我这里实测:改端口前 30 分钟失败登录 611 次;改端口加禁密码后,30 分钟失败登录降到 9 次。测量方法就是同一台机器、同一安全组、同一公网环境,用 journalctl 对比两个 30 分钟窗口。
Chapter 3:Fail2ban 上场——爆破 IP 自动封,最后这样验证
接下来是 Ubuntu fail2ban怎么用。Fail2ban 会盯日志,发现连续失败就把 IP 丢进防火墙。安装:
sudo apt update
sudo apt install -y fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
找到 [sshd],改成:
[sshd]
enabled = true
port = 20022
filter = sshd
logpath = %(sshd_log)s
maxretry = 3
findtime = 10m
bantime = 1h
启动并查看状态:
sudo systemctl enable --now fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd
如果你还有云厂商安全组,记得规则保持最小化:只放行你的办公 IP 到 20022;Web 服务才开 80/443。Docker 用户也注意,容器映射端口不等于主机安全,iptables 和云安全组都要看。
怎么验证它真的修好了? 用新终端执行:ssh -p 20022 deploy@服务器IP,能进;再试 ssh root@服务器IP,应被拒绝;再试旧端口 ssh -p 22 deploy@服务器IP,应超时或拒绝。最后跑:
sudo journalctl -u ssh --since "10 minutes ago"
sudo fail2ban-client status sshd
sudo ufw status
看到 root 登录被禁、密码登录不可用、Fail2ban 有统计、UFW 只开放新端口,恭喜,SSH 加固闭环完成。远程办公如果需要稳定网络,官方 VPN、云厂商堡垒机、自建 WireGuard 都是可选路线;如果你只是想找一个现成连接工具,也可以把 Roxi 作为选项之一了解:wizzegroup.com。OK,本期脚本到这,收藏、三连,下次我们继续实拍服务器运维翻车现场!