VPS 安全加固实战:SSH 加固、防火墙与 fail2ban 配置一次讲清


很多站长把 VPS 买回来、环境装好、网站跑起来之后,就很少再管服务器本身了。直到某天收到商家发来的 CPU 占用异常告警,登上去一看才发现 SSH 被爆破、进程里多了个挖矿程序,甚至整台机器被拿去当跳板。公网上暴露 22 端口的服务器,每天被扫描、爆破几百上千次是常态,做好基础加固并不是折腾,而是每个站长都该做的必修课。

本文按真实操作顺序,把 VPS 安全加固的五个关键环节讲清楚:系统更新与账号隔离、SSH 登录加固、防火墙端口收敛、fail2ban 防爆破、数据自动备份。所有命令都在 Ubuntu 22.04 / Debian 12 上验证过,CentOS 系的差异会单独标注,照着做基本半小时就能完成。

一、先更新系统,别用 root 天天跑

拿到服务器后的第一件事,是先把系统补丁打全:

sudo apt update && sudo apt upgrade -y

sudo apt install -y curl wget vim unzip

CentOS 系对应的是 sudo yum update -y。接着创建一个日常使用的普通用户,而不是一直用 root:

adduser deploy

usermod -aG sudo deploy

su - deploy

这样即使日常操作敲错命令,也不会直接对系统关键文件造成破坏,后面 SSH 加固也才有意义。

二、SSH 加固:换端口、禁 root 密码登录

SSH 是 VPS 唯一的远程入口,也是被爆破最多的入口。编辑配置文件:

sudo vim /etc/ssh/sshd_config

建议改成下面几项,没有的项直接加在文件末尾:

Port 22222

PermitRootLogin prohibit-password

PasswordAuthentication no

PubkeyAuthentication yes

MaxAuthTries 3

LoginGraceTime 30

ClientAliveInterval 300

这里有几个关键点:Port 把默认 22 换成不常见的端口,能挡掉九成以上的自动化扫描;PermitRootLogin 设为 prohibit-password 表示 root 只能用密钥登录、不能用密码;PasswordAuthentication no 则彻底关闭密码登录,只允许公钥认证。

改之前一定要先确认自己的 SSH 公钥已经写入 ~/.ssh/authorized_keys,没有的话先在本地 ssh-keygen 生成,再用 ssh-copy-id 上传,否则改完可能把自己锁在门外。改完先测试配置并重启服务:

sudo sshd -t

sudo systemctl restart ssh

然后新开一个终端窗口,用 ssh -p 22222 deploy@服务器IP 验证能正常登录,确认无误后再关闭当前会话。云服务器还要记得在商家控制台的安全组里同步放行新端口。如果改完真的连不上,别慌,登录云厂商的 VNC 控制台,把配置改回去即可,这也是不要一次性关闭所有登录方式的原因。

三、防火墙:只放行真正需要的端口

Ubuntu / Debian 用 ufw 最省事:

sudo ufw default deny incoming

sudo ufw default allow outgoing

sudo ufw allow 22222/tcp

sudo ufw allow 80,443/tcp

sudo ufw allow from 你的办公IP to any port 22222

sudo ufw enable

sudo ufw status verbose

顺序很重要:先放行 SSH 新端口,再启用防火墙,否则一开启就会断连。80 和 443 是网站对外服务必须放行的,其余端口一律默认拒绝。CentOS 系用 firewalld:

sudo firewall-cmd --permanent --add-port=22222/tcp

sudo firewall-cmd --permanent --add-service=http

sudo firewall-cmd --permanent --add-service=https

sudo firewall-cmd --reload

这里有个容易被忽略的坑:装了 Docker 的机器,容器映射的端口会绕过 ufw 直接写 iptables,导致你以为没放行的端口实际上对外可达。解决办法是使用 ufw-docker 脚本,或者在发布容器时只绑定 127.0.0.1,例如 -p 127.0.0.1:8080:80,再通过 Nginx 反向代理对外提供服务。

四、fail2ban:让爆破脚本自动进小黑屋

光换端口还不够,日志里依然会有大量失败登录。fail2ban 会读取认证日志,在短时间内失败次数过多的 IP 自动加入封禁列表。安装并生成本地配置:

sudo apt install -y fail2ban

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

编辑 /etc/fail2ban/jail.local,把 sshd 段改成:

[sshd]

enabled = true

port = 22222

maxretry = 3

findtime = 10m

bantime = 1h

backend = systemd

Ubuntu 22.04 之后 SSH 日志走 systemd-journal,所以 backend 必须写成 systemd,否则 fail2ban 读不到日志、规则形同虚设。改完重启并查看状态:

sudo systemctl restart fail2ban

sudo fail2ban-client status sshd

输出里能看到当前封禁的 IP 数量。如果不小心把自己封了,用控制台执行 sudo fail2ban-client set sshd unbanip 你的IP 即可解封。想封得更狠可以把 bantime 改成 24h 甚至 -1 表示永久,再配合 recidive 规则,多次被封的 IP 会被长期拉黑。

五、自动更新与安全补丁

系统漏洞是另一条常见入口。Ubuntu 可以用 unattended-upgrades 让安全补丁自动安装:

sudo apt install -y unattended-upgrades

sudo dpkg-reconfigure --priority=low unattended-upgrades

选择 Yes 即可。生产环境如果担心自动重启影响业务,可以在 /etc/apt/apt.conf.d/20auto-upgrades 里保留自动下载安装、关闭自动重启,重启窗口自己安排。

六、备份:出事之后的最后一道保险

再好的加固也不能保证百分之百安全,真正让人安心的是就算被删库也能恢复。最低成本的方案是本地打包加异地同步:

sudo tar -czf /root/backup/web-$(date +%F).tar.gz /www/wwwroot /etc/nginx

再用 rclone 同步到对象存储,阿里云 OSS、腾讯云 COS、Cloudflare R2 都支持 S3 协议:

rclone config

rclone sync /root/backup remote:vps-backup --delete-excluded

最后加一条定时任务,每天凌晨自动执行。备份要遵守 3-2-1 原则:至少 3 份副本、2 种介质、1 份异地。只把备份放在同一台 VPS 上,等于没有备份。

七、上线后别忘了持续监控

加固是一次性的,入侵是持续的。建议至少做到三件事:定期查看 /var/log/auth.log 里的失败登录、给服务器装一个轻量监控,Netdata、哪吒监控都可以、关注 CPU 和带宽的异常波动。站内之前写过一篇《VPS 监控告警实战》,从基础资源监控到异常告警都讲得比较细,可以直接参考:https://www.fvps.cn/46.html

如果网站还没配 HTTPS,也建议顺手把证书装上,免费证书加自动续期基本零成本,具体步骤见 https://www.fvps.cn/50.html

八、常见问题

Q:改了 SSH 端口后连不上怎么办?

A:用云厂商的 VNC 控制台登录,检查 sshd_config 是否写错、防火墙和云安全组是否放行了新端口,先改回 22 端口恢复访问,再逐步排查。

Q:fail2ban 会不会误封正常用户?

A:默认只针对 SSH 认证失败,正常登录不受影响。如果用了跳板机或固定办公 IP,可以把这些 IP 加进 ignoreip 白名单。

Q:还需要装杀毒或安全软件吗?

A:Linux 服务器一般不需要传统杀毒软件,但建议装个 rootkit 检测工具,比如 rkhunter,定期扫描。更重要的是及时打补丁、收敛端口、做好备份。

九、加固检查清单

最后用一张清单快速自查:

1. 系统补丁已更新,日常使用普通用户加 sudo;

2. SSH 已改端口、禁密码登录、禁 root 密码登录;

3. 防火墙默认拒绝,只放行 SSH、80、443;

4. fail2ban 已开启并确认能读到日志;

5. 安全更新自动安装;

6. 网站数据每天自动备份并同步到异地;

7. 监控告警已配置,异常时能收到通知。

安全加固从来不是装一个软件就万事大吉,而是把这些基础动作固定成习惯。把上面这几步做完,你的 VPS 至少已经挡住了公网上 95% 的自动化攻击,剩下的精力就可以安心放在网站内容和运营上了。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

1Panel 面板实战:从一键安装到 Docker 部署网站与自动备份一次讲清

SSH 安全加固实战:从密钥登录到 fail2ban 一次讲清

评 论