
一、为什么你的VPS需要安全加固?
很多新手刚买VPS,装完宝塔面板、上传完网站就以为万事大吉了。实际上,VPS暴露在公网24小时运行,每天都会受到成百上千次暴力破解扫描。根据安全机构统计,一台公网VPS平均在上线后22分钟内就会被首次扫描,一周内遭遇的暴力破解尝试可超过10万次。
但好消息是:VPS安全不需要高深的黑客技术,只需要按照本文的步骤花30分钟完成基础加固,就能防御99%以上的自动化攻击。本文所有命令均在Ubuntu/Debian系统上经过实测,复制粘贴即可执行,新手也能轻松操作。
二、VPS最常见的8大安全威胁

图:VPS面临的8大安全威胁与风险等级
了解敌人才能更好防御。公网VPS面临的威胁主要有8类:
- SSH密码暴力破解(风险🔴极高):黑客用密码字典遍历扫描22端口,弱密码服务器几小时就能被攻破。这是最常见的攻击方式,占所有入侵的90%以上。
- 弱密码/默认端口(风险🔴极高):root/123456/admin这类弱密码几乎是给黑客开门;默认22端口全网扫描器都在扫。
- 未配置防火墙(风险🟠高):全端口暴露在公网,数据库、Redis等服务没做访问限制,直接被未授权漏洞利用。
- DDoS/CC攻击(风险🟠高):带宽被打满、CPU被占满,服务直接不可用,电商、游戏、金融类网站高发。
- Web漏洞入侵(风险🟡中):SQL注入、XSS、文件上传、WordPress插件漏洞等,拿到webshell进而提权控制服务器。
- 未更新系统漏洞(风险🟡中):sudo、OpenSSL、Nginx等组件曝出高危漏洞后不打补丁,被已知漏洞利用入侵。
- 勒索病毒加密(风险🔴极高):入侵后加密数据库和文件,要求比特币赎金,不付款数据永久无法恢复。
- 数据无备份(风险🔴极高):误删数据、攻击损坏、硬件故障都可能导致数据丢失,没有备份就是永久丢失。
三、SSH安全加固8步必做配置

图:SSH服务8项核心安全配置及对应配置项
SSH是你登录服务器的入口,也是黑客攻击的首要目标。以下8项配置务必全部完成:
1创建普通用户,禁用root直接登录
直接用root登录风险极高,建议创建普通用户,需要管理员权限时用sudo提权:
# 创建新用户(把yourname替换成你的用户名)
adduser yourname
usermod -aG sudo yourname
# 测试新用户能登录后,再禁用root登录
2配置SSH密钥登录,禁用密码登录
密钥登录比密码安全100倍,几乎不可能暴力破解。本地电脑生成密钥对:
# 本地电脑执行(Windows用PowerShell/Git Bash)
ssh-keygen -t ed25519 -C "your-email@example.com"
# 公钥上传到服务器
ssh-copy-id -p 22 yourname@your-server-ip
测试密钥能登录后,再进行后续步骤。
3编辑SSH配置文件
编辑sshd_config文件,完成剩余6项配置:
sudo nano /etc/ssh/sshd_config
找到并修改以下配置项(没有就添加):
# 禁用root远程登录
PermitRootLogin no
# 启用密钥认证
PubkeyAuthentication yes
# 禁用密码认证(确认密钥登录成功后再开!)
PasswordAuthentication no
# 修改默认SSH端口(用10000-65535之间的端口,比如22222)
Port 22222
# 最大登录尝试次数
MaxAuthTries 3
# 登录超时5分钟自动断开
ClientAliveInterval 300
ClientAliveCountMax 0
# 禁用空密码
PermitEmptyPasswords no
# 禁用X11转发
X11Forwarding no
4重启SSH服务生效
# 测试配置文件语法是否正确
sudo sshd -t
# 语法没问题再重启
sudo systemctl restart sshd
重启后,不要关闭当前终端! 新开一个终端窗口,用新端口和密钥测试登录:
ssh -p 22222 yourname@your-server-ip
确认能正常登录、能sudo提权后,再关闭旧终端。
四、UFW防火墙配置:只放行需要的端口

图:常用端口风险等级与放行策略
防火墙是服务器的第一道大门,核心原则是:默认拒绝所有入站连接,只放行确实需要的端口。Ubuntu/Debian推荐用UFW(简单易用):
1. 安装并启用UFW
# 安装UFW(一般系统自带)
sudo apt install ufw -y
# ⚠️ 先放行SSH新端口!否则开启防火墙后自己连不上
sudo ufw allow 22222/tcp
# 放行网站端口80/443
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 默认拒绝所有入站,允许所有出站
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 启用防火墙
sudo ufw enable
# 查看状态
sudo ufw status verbose
- 3306(MySQL):默认绑定127.0.0.1即可,不要对外开放
- 6379(Redis):必须设置密码并绑定本地,历史上多次未授权漏洞
- 21(FTP):明文传输不安全,改用SFTP(基于SSH)
- 25(SMTP):自建邮件服务器才需要,否则关闭
- 其他不使用的端口:全部默认拒绝
2. CentOS/RHEL用户用firewalld
# 启动firewalld
sudo systemctl start firewalld
sudo systemctl enable 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
五、Fail2ban:自动封禁暴力破解IP

图:Fail2ban安装配置6步流程
防火墙放行了必要端口后,还是会有人反复尝试密码登录。Fail2ban可以监控系统日志,同一IP连续登录失败超过设定次数就自动封禁该IP一段时间,从源头阻断暴力破解。
1. 安装Fail2ban
sudo apt install fail2ban -y
2. 创建本地配置文件
不要直接改jail.conf,升级会覆盖,创建jail.local:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
3. 配置SSH防护参数
找到[sshd]段,修改或添加以下配置:
[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 86400
banaction = ufw
参数解释:
maxretry = 3:连续失败3次就封禁findtime = 600:10分钟内的失败计数bantime = 86400:封禁1天(86400秒)banaction = ufw:通过UFW添加封禁规则
4. 启动Fail2ban并设置开机自启
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban
5. 查看封禁状态
# 查看sshd监狱状态
sudo fail2ban-client status sshd
# 手动解封某个IP(如果封错了)
sudo fail2ban-client set sshd unbanip 1.2.3.4
# 查看封禁日志
sudo tail -f /var/log/fail2ban.log
正常情况下,你会看到每天都有不少IP被Fail2ban自动封禁,这些都是全网扫描的暴力破解尝试,Fail2ban帮你全部挡在了门外。
六、系统自动更新与服务最小化
1. 开启自动安全更新
及时打安全补丁是防御已知漏洞的关键。配置自动安全更新:
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades
# 选择Yes自动安装安全更新
2. 关闭不需要的服务
运行的服务越少,攻击面越小。查看监听端口:
sudo ss -tulpn
关闭不需要的服务,只保留你真正使用的(Nginx/MySQL/Redis/SSH等)。
3. 配置文件权限最小化
# 给敏感目录设置正确权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 644 /etc/passwd
chmod 600 /etc/shadow
七、DDoS防护选型:高防服务器怎么选

图:个人/企业/高安全需求场景防护方案对比
防火墙、Fail2ban能防入侵,但防不住DDoS攻击——攻击者用大量僵尸网络流量打满你的带宽,直接把你从公网"挤下去",这时候需要DDoS防护。
DDoS防护选型建议
| 网站规模 | 防护方案 | 推荐配置 | 预算参考 |
|---|---|---|---|
| 个人博客/小站 | 基础DDoS防护(免费) | LuckVM基础版VPS,机房自带G级防护 | $8.8/月起 |
| 企业官网/外贸站 | 企业级DDoS防护 | 标准版VPS,10Gbps+清洗能力 | $26.4/月起 |
| 电商/游戏/金融 | T级高防服务器 | 独立高防服务器,T级流量清洗+WAF | $88/月起 |
DDoS攻击应急处理
- 发现服务突然不可用、带宽跑满,先检查系统负载确认是否被攻击
- 小流量攻击:机房基础防护通常能自动清洗,等待10-30分钟
- 大流量攻击:立即联系客服紧急升级高防IP或接入高防节点
- 攻击期间暂停非必要服务,保留带宽给核心业务
- 开启Cloudflare CDN隐藏源站IP,分散攻击流量
八、数据自动备份:3-2-1备份策略
所有安全防护都不是100%的,最后一道防线就是备份。记住:没有备份的数据,就等于不存在。
3-2-1备份原则:
- 至少3份数据副本(生产+2份备份)
- 存储在2种不同介质上
- 至少1份异地备份(不在同一台服务器/同一个机房)
MySQL自动备份脚本
创建一个简单的数据库备份脚本:
#!/bin/bash
# 文件名: /home/yourname/backup-mysql.sh
BACKUP_DIR="/home/yourname/backups"
DATE=$(date +%Y%m%d_%H%M%S)
KEEP_DAYS=7
mkdir -p $BACKUP_DIR
# 备份所有数据库
mysqldump -u root -p'你的数据库密码' --all-databases | gzip > $BACKUP_DIR/all_db_$DATE.sql.gz
# 删除7天前的备份
find $BACKUP_DIR -name "all_db_*.sql.gz" -mtime +$KEEP_DAYS -delete
设置执行权限并添加定时任务:
chmod +x /home/yourname/backup-mysql.sh
# 编辑crontab,每天凌晨3点自动备份
crontab -e
# 添加这一行:
0 3 * * * /home/yourname/backup-mysql.sh >> /var/log/mysql-backup.log 2>&1
九、上线前安全检查清单

图:VPS上线前4大类安全检查清单,共20项
配置完成后,对照以下清单逐项检查,全部打勾再正式上线:
🔐 SSH访问控制(5项)
- ✅ 禁用了root远程登录(PermitRootLogin no)
- ✅ 配置了SSH密钥登录,禁用密码登录
- ✅ 修改了默认22端口为自定义高端口
- ✅ 设置了MaxAuthTries=3限制尝试次数
- ✅ 新端口测试登录成功,不会把自己锁在外面
🔥 防火墙配置(5项)
- ✅ 启用了UFW/firewalld防火墙
- ✅ 默认拒绝所有入站连接
- ✅ 仅放行必要端口(SSH/80/443)
- ✅ MySQL/Redis绑定127.0.0.1不对外暴露
- ✅ 禁用了不需要的服务和端口
🛡️ 入侵防护(5项)
- ✅ 安装Fail2ban并启用sshd防护
- ✅ 配置了3次失败封禁1天的规则
- ✅ 根据业务需要配置了DDoS防护
- ✅ 开启了自动安全更新
- ✅ 文件和目录权限设置正确
💾 数据备份(5项)
- ✅ 配置了数据库每日自动备份
- ✅ 备份目录不在web根目录下
- ✅ 定期下载备份到本地/异地存储
- ✅ 测试过备份文件可以正常恢复
- ✅ 配置了基础监控告警(CPU/内存/磁盘)




