VPS 一旦暴露在公网上,就会有人来扫端口、试密码、找漏洞。安全加固不是一次性的事,而是一套持续的流程:装好防火墙、关掉不需要的端口、配好暴力破解防护、定期检查有没有被入侵。这篇手册把这些环节串起来,给你一个完整的安全加固路径。
一、安全加固的整体思路
VPS 安全可以从三个层面来理解:
- 网络层:防火墙控制进出流量,只开放必要端口
- 应用层:SSH 加固、Fail2ban 防爆破、Web 服务安全
- 入侵响应:被攻击了怎么判断、被入侵了怎么排查和清除
下面按这个顺序展开。
二、防火墙配置
防火墙是 VPS 安全的第一道防线。UFW(Uncomplicated Firewall)是 Ubuntu/Debian 上的默认防火墙工具,配置简单:
# 默认策略:拒绝进站,允许出站
ufw default deny incoming
ufw default allow outgoing
# 开放 SSH(必须先开,否则会把自己锁在外面)
ufw allow 22/tcp
# 开放 Web 服务
ufw allow 80/tcp
ufw allow 443/tcp
# 启用防火墙
ufw enable
# 查看状态
ufw status verbose
如果你改过 SSH 端口,记得开放新端口。UFW 的详细配置和常见问题参考 VPS 防火墙配置指南:UFW 完整教程。
关于 VPS 安全的整体加固步骤(包括用户管理、SSH 配置、自动更新等),参考 VPS 服务器安全加固指南:新手逐步操作。
三、SSH 安全加固
SSH 是服务器管理的主要通道,也是攻击者的首要目标。加固措施:
1. 改默认端口:把 22 改成一个高位端口(比如 50022),能挡掉大部分自动扫描。
# /etc/ssh/sshd_config
Port 50022
2. 禁止 root 直接登录:用普通用户 + sudo 代替。
PermitRootLogin no
3. 用密钥登录,禁止密码:
PasswordAuthentication no
PubkeyAuthentication yes
4. 限制登录用户:
AllowUsers yourusername
改完重启 SSH 服务:systemctl restart sshd。详细的 SSH 加固步骤参考 Linux SSH 安全加固完整指南。
四、暴力破解防护
即使改了 SSH 端口,还是有人会扫到。Fail2ban 通过分析日志自动封禁尝试暴力破解的 IP:
# 安装
apt install fail2ban
# 配置 SSH 防护
cat > /etc/fail2ban/jail.local << 'EOF'
[sshd]
enabled = true
port = 50022
maxretry = 3
bantime = 3600
findtime = 600
EOF
# 重启
systemctl restart fail2ban
systemctl enable fail2ban
Fail2ban 不只能防 SSH 爆破,还能监控 Nginx、Postfix 等服务的日志。详细配置参考 Fail2ban 暴力破解防护完整配置指南。
五、DDoS 防护
DDoS 攻击用大量垃圾流量把服务器打满,和暴力破解完全不同——没有漏洞可以补,拼的是带宽和过滤能力。防护手段从内核到 CDN 分层部署:
- 内核层:开启 SYN cookies 防 SYN flood
- iptables/nftables:对单 IP 做连接数限制
- Fail2ban:处理应用层 HTTP flood
- CDN 前置:Cloudflare 等 CDN 吸收大流量攻击
- Nginx 层:rate limiting 限制请求频率
详细的分层防御配置参考 VPS DDoS 防护完整指南。
六、CC 攻击防御
CC 攻击是应用层的 DDoS——攻击者模拟真实用户频繁请求消耗服务器资源。和纯流量 DDoS 不同,CC 攻击的流量可能不大,但 CPU 和数据库会被打满。
防御思路:
- 用 Nginx 的
limit_req做请求频率限制 - 对特定 URL(如 /wp-login.php)做更严格的限制
- 用 Fail2ban 监控 Nginx 日志,自动封禁高频 IP
- 必要时上 Cloudflare 的 Under Attack 模式
完整的 CC 攻击判断和防御方案参考 服务器被 CC 攻击怎么办?从判断到防御的实操方案。
七、HTTPS 证书管理
HTTPS 不只是加密通信,也是搜索引擎排名的加分项。用 Let's Encrypt 免费证书配 Nginx 就行。证书有效期 90 天,用 certbot 自动续期。
关于证书过期的确认和续期操作,参考 HTTPS 证书过期怎么办?确认与续期完整指南。
八、被攻击后的判断与处置
服务器异常时,先判断是不是真的被攻击了。常见迹象:CPU 跑满、带宽暴增、大量异常连接、文件被篡改。
判断和处置的完整流程参考 网站被攻击怎么办?判断与处置全流程指南。
如果确认被挂马了(首页被篡改、跳转到博彩站等),需要清理木马文件。具体步骤参考 网站被挂马怎么办?木马清除实操步骤。
九、VPS 自动备份
安全加固做得再好也不能保证 100% 不出事。定期备份是最后的保险。备份策略:
- 数据库每天备份,保留 30 天
- 网站文件每周备份
- 备份文件传到异地(另一台服务器或对象存储)
- 定期做恢复测试
自动备份脚本的编写和配置参考 VPS 自动备份配置完整指南。
十、安全检查清单
| 检查项 | 命令 | 频率 |
|---|---|---|
| SSH 端口是否改了 | grep Port /etc/ssh/sshd_config | 一次 |
| 密码登录是否关了 | grep PasswordAuthentication /etc/ssh/sshd_config | 一次 |
| 防火墙是否开启 | ufw status | 每周 |
| Fail2ban 是否运行 | systemctl status fail2ban | 每周 |
| SSL 证书有效期 | openssl s_client -connect domain:443 | 每周 |
| 系统更新 | apt list --upgradable | 每月 |
| 异常登录记录 | last -20 | 每周 |
| 异常进程 | ps aux | grep -v root | sort | 每周 |
| 磁盘使用 | df -h | 每周 |
| 备份是否正常 | ls -la /backup/ | 每天 |
更多服务器安全教程,请访问 fenij.com。
常见问题
问:改了 SSH 端口后连不上了怎么办?
答:先确认防火墙开放了新端口。然后确认 sshd_config 里的 Port 改对了,重启了 sshd。如果用 UFW,别忘了 ufw allow 新端口/tcp。改端口时建议保留旧端口一段时间,确认新端口能连了再删旧的。
问:Fail2ban 把自己 IP 封了怎么办?
答:用 fail2ban-client set sshd unbanip 你的IP 解封。为了避免这种情况,把自己的 IP 加入 ignoreip 白名单:echo "ignoreip = 127.0.0.1/8 你的IP" >> /etc/fail2ban/jail.local。
问:Cloudflare 开了之后还需要服务器防火墙吗?
答:需要。如果攻击者找到你的源站 IP(通过 DNS 历史、邮件头等),可以绕过 Cloudflare 直连。防火墙是最后一道防线。建议在防火墙层面只允许 Cloudflare 的 IP 段访问 80/443 端口。