LUCKVM / CLOUD INFRASTRUCTURE

探索 LuckVM

首页 全球加速 域名注册 帮助中心 新闻中心 关于我们

VPS安全防护完整指南:SSH加固 · 防火墙 · DDoS防护 · 数据备份一站式教程

VPS安全防护完整指南 - LuckVM
一、为什么VPS安全如此重要?

很多新手买完VPS第一件事就是赶紧搭网站、部署服务,安全配置则是"以后再说"——这恰恰是最危险的做法。根据安全厂商统计,一台公网VPS在上线后平均15分钟内就会开始遭受扫描和暴力破解攻击,每天被尝试登录的次数超过1000次。

不做安全加固的后果可能非常严重:

  • 被植入挖矿木马:CPU占满100%,服务器变卡,你的电费/流量费暴增
  • 被发垃圾邮件:IP被列入黑名单,你的正常邮件全部进垃圾箱
  • 被当作跳板机:黑客用你的服务器攻击他人,法律风险找上你
  • 数据被勒索加密:网站、数据库全部锁死,不交比特币就不恢复
  • 被DDoS打瘫:业务完全中断,没有防护的小VPS几分钟就被打死
真实案例:2025年某用户在LuckVM购买美国VPS后用root+弱密码直接上线,不到6小时SSH就被爆破,黑客植入挖矿程序,CPU持续100%占用。幸好我们客服及时发现并通知用户重装系统,否则不仅服务不可用,还可能因发送恶意流量被机房封机。

好消息是:VPS安全加固并不复杂。按照本文步骤操作1小时,就能防御99%以上的常见攻击。所有命令都经过实测,CentOS 7+/Debian 10+/Ubuntu 18+通用,可以直接复制使用。

二、VPS面临的5大安全威胁

在开始加固前,先了解你的VPS究竟面临哪些威胁,才能有针对性地防护:

VPS面临的5大安全威胁:暴力破解、DDoS攻击、漏洞利用、挖矿病毒、数据丢失
图1:VPS服务器最常见的5类安全威胁

从发生概率看,SSH暴力破解是最高频的威胁,几乎所有公网服务器每天都会遇到;从危害程度看,DDoS攻击和数据丢失是最致命的——前者让你的业务直接停摆,后者让你永远找不回数据。

理解了威胁来源,下面我们从最核心的SSH加固开始,一层一层建立完整的安全防线。

三、SSH安全加固8步法(核心必做)

SSH是你远程管理VPS的唯一通道,一旦被攻破,服务器就完全属于黑客了。SSH加固也是性价比最高的安全措施——完成这8步可以抵御99%的暴力破解攻击。

SSH安全加固8步法流程图:修改端口、禁用root、密钥登录、Fail2ban、IP限制、超时设置、登录告警、MFA双因子
图2:SSH安全加固8步法——按顺序执行即可
重要提醒:修改SSH配置前,务必保留一个已经连接的SSH终端窗口不要关闭!所有修改完成后在新窗口测试登录成功,再关闭旧窗口。否则一旦配置错误,你可能把自己锁在服务器外面。

3.1 修改SSH默认端口(第1步)

SSH默认端口22是所有扫描器的首选目标。改成一个不常见的高端口(10000-65535之间),可以立刻减少90%以上的自动化扫描。

bash
# 编辑SSH配置文件
sudo vi /etc/ssh/sshd_config

# 找到 Port 22 这一行,改成你想要的端口(例如22345)
# 注意:不要用其他服务常用的端口(如3306/8080/8443等)
Port 22345

# 保存退出后重启SSH
# Debian/Ubuntu:
sudo systemctl restart sshd
# CentOS/RHEL:
sudo systemctl restart sshd

改完端口后,记得在防火墙中放行新端口(后面防火墙章节会讲),否则你下次就连不上了。连接时需指定端口:

bash
ssh -p 22345 username@your-server-ip

3.2 禁用root直接登录(第2步)

root是Linux的超级管理员,所有扫描器都会优先尝试root账号。禁用root直接登录,改用普通用户登录后再sudo提权,即使密码泄露也不会直接丢掉服务器控制权。

bash
# 1. 先创建一个普通用户(例如admin)
sudo adduser admin
sudo usermod -aG sudo admin   # Debian/Ubuntu 加入sudo组
# 或 CentOS: sudo usermod -aG wheel admin

# 2. 测试新用户能正常登录并sudo
su - admin
sudo whoami   # 应该返回 root

# 3. 确认没问题后,修改SSH配置禁用root登录
sudo vi /etc/ssh/sshd_config
PermitRootLogin no

# 4. 重启SSH
sudo systemctl restart sshd

3.3 使用SSH密钥登录,禁用密码登录(第3步,最关键)

这是单步效果最强的安全措施。RSA密钥的长度是2048位或4096位,暴力破解需要的计算量远超当前全人类算力总和——只要私钥不泄露,理论上不可能被破解。

bash - 在你的本地电脑执行
# 1. 在本地电脑生成密钥对(一路回车即可,建议设置passphrase给私钥加密)
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"

# 2. 把公钥上传到服务器(替换成你的用户、IP、端口)
ssh-copy-id -p 22345 admin@your-server-ip

# 3. 测试密钥登录(应该不需要输入密码就能登录)
ssh -p 22345 admin@your-server-ip

确认密钥登录正常工作后,在服务器上禁用密码登录:

bash - 在服务器上执行
sudo vi /etc/ssh/sshd_config

# 设置以下参数
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

# 重启SSH
sudo systemctl restart sshd
完成这一步后,SSH暴力破解攻击对你就彻底无效了——因为即使攻击者知道你的用户名,没有私钥文件也无法登录,而私钥只保存在你本地电脑上。

3.4 安装Fail2ban自动封禁暴力IP(第4步)

即使已经禁用密码登录,Fail2ban依然值得安装——它可以监控日志文件,发现多次登录失败的IP就自动加入iptables黑名单封禁一段时间,减少无效流量和日志噪音。

bash
# Debian/Ubuntu
sudo apt install fail2ban -y
# CentOS
sudo yum install epel-release -y
sudo yum install fail2ban -y

# 创建本地配置(不要直接改jail.conf)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vi /etc/fail2ban/jail.local

# 修改 [DEFAULT] 段:
bantime  = 86400    # 封禁24小时(单位秒)
findtime = 600      # 10分钟内
maxretry = 3        # 失败3次就封禁

# 启动并设置开机自启
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# 查看已封禁的IP
sudo fail2ban-client status sshd

3.5-3.8 进阶加固

完成前4步已经能防住绝大多数攻击。以下4步是进阶加固,按需要选择:

5

限制登录IP白名单

在 /etc/ssh/sshd_config 中添加 AllowUsers admin@192.168.1.* ,只允许指定IP段登录。适合有固定办公IP的场景。

6

设置空闲超时自动断开

添加 ClientAliveInterval 300 和 ClientAliveCountMax 2,闲置5分钟自动断开SSH,防止忘记退出被他人利用。

7

登录告警通知

在 /etc/pam.d/sshd 末尾添加脚本,每次SSH登录成功时自动发邮件/钉钉/微信通知你,有人非法登录能第一时间发现。

8

配置MFA双因子认证

安装Google Authenticator PAM模块,登录时除了密钥还需要输入手机App上的动态验证码。适合安全等级要求极高的场景。

四、UFW防火墙配置实战

防火墙是第二道防线——原则是"默认拒绝,按需开放",只让真正需要的端口对外提供服务。推荐新手使用UFW(Uncomplicated Firewall),命令简单直观。

UFW防火墙常用命令速查表:启用/开放端口/封禁IP/删除规则等12条最常用命令
图3:UFW防火墙12条最常用命令速查表——直接复制执行

4.1 基础配置(必做)

bash
# 安装UFW(Debian/Ubuntu一般已预装)
sudo apt install ufw -y

# ⚠️ 重要:先放行SSH端口,否则启用后会把自己锁外面!
sudo ufw allow 22345/tcp   # 改成你自己改的SSH端口

# 设置默认策略
sudo ufw default deny incoming    # 默认拒绝所有入站
sudo ufw default allow outgoing   # 默认允许所有出站

# 启用防火墙
sudo ufw enable

4.2 按需开放端口

根据你实际运行的服务开放对应端口,不要开放不需要的端口:

bash
# 建站必备
sudo ufw allow 80/tcp     # HTTP
sudo ufw allow 443/tcp    # HTTPS

# FTP/Mail等其他服务(按需开放)
# sudo ufw allow 21/tcp   # FTP
# sudo ufw allow 25/tcp   # SMTP

# SSH防暴力破解:限制连接频率(比简单allow更安全)
sudo ufw limit 22345/tcp  # 30秒内连接超过6次自动拒绝

# IP白名单:只允许你的办公IP访问SSH(最安全)
# sudo ufw allow from 你的办公IP to any port 22345

# 查看当前规则
sudo ufw status numbered

# 删除某条规则(用编号指定)
# sudo ufw delete 3
CentOS/RHEL用户注意:CentOS默认使用firewalld而非UFW。如果想用UFW,先 sudo systemctl stop firewalld && sudo systemctl disable firewalld,再安装UFW即可。或者直接使用 firewall-cmd 命令,原理相同。

五、Fail2ban深度配置(防Web攻击)

前面只配置了SSH防护,Fail2ban还可以保护Nginx、WordPress等应用层服务。推荐补充以下jail配置:

bash
sudo vi /etc/fail2ban/jail.local

# 添加以下内容保护Nginx和WordPress

[nginx-http-auth]
enabled  = true
port     = http,https
logpath  = /var/log/nginx/error.log
maxretry = 3
bantime  = 86400

[nginx-botsearch]
enabled  = true
port     = http,https
logpath  = /var/log/nginx/access.log
maxretry = 2
bantime  = 86400

[wordpress-auth]
enabled  = true
port     = http,https
logpath  = /var/log/nginx/access.log
filter   = wordpress-auth
maxretry = 5
bantime  = 86400

# 重启Fail2ban生效
sudo systemctl restart fail2ban

六、DDoS攻击与防御方案

DDoS(分布式拒绝服务攻击)是最让站长头疼的攻击方式——攻击者控制大量"肉鸡"向你的服务器发送海量请求,打满带宽或耗尽连接数,让正常用户无法访问。

必须正视的事实:单机软件无法防御大流量DDoS。SYN洪水、UDP洪水等流量型攻击会直接打满你的服务器带宽,在流量到达服务器之前就已经堵死了,iptables/ufw/脚本都无能为力。真正有效的DDoS防御必须依赖上游的专业清洗设备。

6.1 DDoS防御的三层方案

防御层级 方案 防护能力 成本 适用场景
第一层 选择自带DDoS防护的机房 10-100Gbps 免费 所有网站(必做)
第二层 接入CDN(Cloudflare/阿里云CDN) 隐藏源IP+缓存加速 免费-$20/月 面向公众的网站
第三层 购买高防IP/高防CDN 100Gbps-Tbps级 $100+/月 经常被攻击的业务

6.2 软件层面减轻DDoS影响

虽然软件层面防不了大流量DDoS,但适当的内核参数调整可以减轻小规模CC/SYN攻击的影响:

bash - SYN洪水防护
sudo vi /etc/sysctl.conf

# 添加以下参数
net.ipv4.tcp_syncookies = 1              # 启用SYN Cookies
net.ipv4.tcp_max_syn_backlog = 2048      # 增大SYN队列
net.ipv4.tcp_synack_retries = 2          # 减少SYN重试次数
net.ipv4.icmp_echo_ignore_broadcasts = 1 # 忽略广播ping
net.ipv4.conf.all.rp_filter = 1          # 反向路径过滤

# 生效
sudo sysctl -p

🛡️ LuckVM所有节点默认自带DDoS基础防护

美国/香港/日本机房均提供免费的DDoS基础清洗能力,可抵御常见的小规模攻击。对于高防护需求的用户,还提供高防IP附加服务,专业T级清洗集群秒级响应。新用户首单8折,使用优惠码 LUCKVM2026。

查看高防套餐 →

七、系统级安全加固

SSH和防火墙只是大门,系统本身的安全同样重要。以下是系统级加固清单:

VPS纵深防御7层安全架构:网络层、防火墙、SSH接入、系统层、应用层、数据层、备份监控
图4:VPS纵深防御7层安全架构——从外到内层层设防

7.1 保持系统和软件更新

bash
# Debian/Ubuntu:定期执行安全更新
sudo apt update && sudo apt upgrade -y

# CentOS/RHEL
sudo yum update -y

# 建议开启自动安全更新
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

7.2 创建非特权用户运行服务

永远不要用root运行Web服务/数据库/应用。为每个服务创建独立的低权限用户,即使某个服务被攻破,攻击者也只能拿到有限权限:

bash
sudo useradd -r -s /sbin/nologin www-data
# 确保Nginx/MySQL/PHP-FPM等服务都以非root用户运行

7.3 关闭不必要的服务

运行的服务越少,攻击面越小。查看并关闭不用的服务:

bash
# 查看监听的端口
sudo ss -tulnp

# 关闭不需要的服务
sudo systemctl stop avahi-daemon
sudo systemctl disable avahi-daemon

7.4 安装入侵检测工具

bash
# 安装rootkit检测工具
sudo apt install rkhunter chkrootkit -y
sudo rkhunter --check

# 文件完整性检查(关键文件被篡改时报警)
sudo apt install aide -y
sudo aideinit

八、数据备份3-2-1黄金策略

安全防护再严密,也不可能100%杜绝事故。数据备份是最后的生命线——没有备份,勒索病毒、误删操作、硬盘损坏任何一个都可能让你的数据永久丢失。

数据备份3-2-1黄金法则:3份副本、2种介质、1份异地备份
图5:数据备份3-2-1黄金策略——遵循这一原则,任何灾难都不会丢数据

8.1 网站备份自动化脚本

对于WordPress等建站场景,以下脚本可以自动备份网站文件和数据库,并保留7天历史版本:

bash - /root/backup.sh
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup"
SITE_DIR="/var/www/html"
DB_NAME="your_database"
DB_USER="your_db_user"
DB_PASS="your_db_password"

mkdir -p $BACKUP_DIR

# 备份数据库
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/db_$DATE.sql.gz

# 备份网站文件
tar -czf $BACKUP_DIR/site_$DATE.tar.gz $SITE_DIR

# 删除7天前的备份
find $BACKUP_DIR -name "*.gz" -mtime +7 -delete

echo "Backup completed: $DATE"

添加到crontab每天凌晨3点自动执行:

bash
sudo crontab -e
# 添加以下行
0 3 * * * /bin/bash /root/backup.sh >> /var/log/backup.log 2>&1

8.2 异地备份到对象存储

本地备份不够——VPS硬盘损坏或被勒索病毒加密时本地备份也会丢失。推荐把备份同步到异地对象存储:

bash
# 安装rclone工具(支持S3/OSS/COS/OneDrive等几十种存储)
curl https://rclone.org/install.sh | sudo bash

# 配置对象存储(按交互式向导填写)
rclone config

# 同步备份到对象存储
rclone sync /backup remote:your-bucket/backup/
定期验证备份可用性!每月至少做一次恢复测试,确认备份文件可以完整恢复。很多人出了事才发现备份文件是空的、损坏的或权限不对——比没有备份更让人崩溃。

九、监控告警与应急响应

9.1 关键监控指标

建议安装监控工具实时监控以下指标,异常时及时告警:

监控项 告警阈值 可能原因
CPU使用率 持续80%+超过10分钟 挖矿病毒/流量异常/爬虫
内存使用率 持续90%+ 内存泄漏/被攻击/OOM
带宽流量 突然超过日常3倍 DDoS攻击/被爬取/被盗刷
磁盘空间 使用率超过85% 日志爆增/被上传大文件
SSH登录 非常用IP登录 账号可能已泄露
失败登录次数 单IP 1分钟超过10次 暴力破解攻击

推荐工具:Netdata(开箱即用的实时监控面板)、Uptime Kuma(轻量网站宕机监控)、Prometheus+Grafana(企业级方案)。

9.2 被入侵后的应急响应流程

万一不幸被入侵,按以下流程处理:

1

不要慌,先断网

立即在控制台关闭服务器公网网卡或切断网络,防止黑客继续操作或销毁证据。

2

保留证据

通过VNC/控制台登录,备份关键日志文件(/var/log/auth.log、/var/log/nginx/access.log、history记录),用于溯源分析。

3

备份数据

把网站文件和数据库备份到本地(注意不要备份木马文件,恢复前要先查杀)。

4

重装系统

被入侵过的系统不建议清理后继续使用——黑客可能留下多个后门,清理不干净。最安全的做法是直接重装系统。

5

按本文加固后恢复

重装后严格按照本文8步SSH加固+防火墙+Fail2ban全套配置做完,再恢复网站数据。同时更换所有密码和密钥。

LuckVM用户福利:所有LuckVM服务器在控制台都提供一键重装系统和网页VNC控制台功能,即使SSH完全连不上也能通过控制台登录操作,应急处置非常方便。

十、常见问题FAQ

Q1:VPS被暴力破解了怎么办?
立即通过服务商VNC控制台登录,查看auth.log确认是否被成功登录(accepted login关键字表示登录成功)。如果确认被入侵,备份重要数据后直接重装系统最安全。重装后务必按本文步骤修改SSH端口、禁用密码登录、启用密钥认证和Fail2ban。
Q2:开启Fail2ban会影响正常登录吗?
正常使用不会。Fail2ban只封禁连续多次输入错误密码的IP,正常登录成功的IP不会被封禁。建议在jail.local中配置ignoreip白名单,把你的常用办公IP加入白名单,确保不会被误封:ignoreip = 127.0.0.1/8 ::1 你的办公IP。
Q3:禁用密码登录只用密钥后还会被破解吗?
几乎不可能。RSA 4096位密钥的可能组合数是2的4096次方,暴力破解所需时间远超宇宙年龄。但要注意:私钥文件本身的保护同样重要——私钥泄露等同于密码泄露。强烈建议给私钥文件设置passphrase密码短语,即使私钥文件被盗,攻击者还需要知道passphrase才能使用。
Q4:DDoS攻击能彻底防御吗?
没有任何方案能100%防御所有DDoS攻击,但通过"自带DDoS防护的机房+CDN隐藏源IP+高防IP"三层方案,可以抵御99%以上的常见攻击。选择LuckVM这样自带基础DDoS防护的服务商,小规模攻击无需额外配置即可自动清洗。
Q5:Linux VPS需要安装杀毒软件吗?
Linux不像Windows那样需要传统杀毒软件。更有效的做法是:做好SSH加固和权限控制、定期更新系统、安装rkhunter/chkrootkit检测rootkit、配置AIDE文件完整性检查、启用最小权限原则。这些措施的防护效果远好于杀毒软件。
Q6:备份频率多久合适?
遵循3-2-1策略:每日增量备份保留7天,每周全量备份保留4周,每月异地备份永久归档。频繁更新的站点(如新闻站、电商站)可以缩短到每6小时增量备份。使用本文提供的自动化脚本+crontab即可实现。
Q7:修改SSH端口后忘了端口号怎么办?
通过VPS服务商的VNC控制台登录查看。LuckVM控制台提供网页版VNC,无需SSH即可登录服务器。登录后执行 grep ^Port /etc/ssh/sshd_config 即可查看到SSH端口。修改端口前务必在保持一个终端连接的同时,新开一个终端测试新端口可以正常登录。

🚀 安全从一台可靠的VPS开始

LuckVM美国/香港/日本VPS默认自带DDoS基础防护,支持控制台VNC救援、一键重装快照、安全组防火墙配置,配合本文的安全加固教程,为你的业务提供坚实保障。新用户首单享8折优惠。

立即选购安全VPS →

相关服务

查看相关 LuckVM 产品的配置、线路与资源,实际库存与价格以订购页为准。 域名注册查询_便宜顶级域名购买与免费隐私保护