帮助中心 >
  关于云服务器 >
  建站VPS安全设置必做清单:SSH/防火墙/定期备份
建站VPS安全设置必做清单:SSH/防火墙/定期备份
时间 : 2026-07-08 16:00:26
编辑 : Jtti

  把网站部署到VPS上之后,很多人会有一种“终于搞定了”的放松感,然后就把服务器扔在那里不管了。直到某天收到CPU跑满的告警邮件,登录一看发现多了几个不认识的进程,或者网站被挂了一堆垃圾页面,才意识到安全这件事不是“有空再说”的。这篇文章整理了一份基础的VPS安全设置清单,按照这个顺序做完,至少能把80%的自动扫描和脚本攻击挡在门外。

  SSH安全加固:守住服务器的第一道门

  SSH是几乎所有VPS的默认管理入口,也是被暴力破解最频繁的服务。如果你去看一下VPS的SSH日志,多半会发现每天都有成千上万条来自世界各地的失败登录尝试——全是机器人程序在自动扫描。

  修改默认端口

  把SSH端口从22改成其他端口,这是最基础也最有效的防御手段。大量扫描器只扫22端口,改掉之后能过滤掉绝大部分自动攻击。

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

# 找到并修改Port行
Port 2222  # 改成你喜欢的端口,建议选五位数高位端口,避开已知服务

# 重启SSH服务
sudo systemctl restart sshd

  重要提醒:改端口之前先测试好新端口是否能正常连接,千万别关掉当前SSH会话,否则万一端口没开,你就把自己锁在门外了。

  禁用root直接登录

  root是每个Linux系统都存在的账号,攻击者不需要猜用户名,只需要破解密码就行。禁用root登录,用普通用户登录后再通过sudo提权,能显著提高安全性。

# 在sshd_config中修改
PermitRootLogin no

# 之后用普通用户登录,需要用root权限时执行:
sudo -i

  使用SSH密钥登录并关闭密码验证

  密码暴力破解是SSH被攻破的主要途径。密钥登录使用非对称加密,私钥不在服务器上,几乎不可能被暴力破解。

  生成密钥对的步骤:

# 在本地电脑上执行(不要在服务器上执行)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 一路回车,会生成 ~/.ssh/id_ed25519(私钥)和 ~/.ssh/id_ed25519.pub(公钥)

  把公钥传到服务器上:

# 用ssh-copy-id自动复制,注意指定修改后的端口
ssh-copy-id -p 2222 username@your_server_ip

# 或者手动添加
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys

  确认密钥能正常登录后,关闭密码验证:

# 在sshd_config中修改
PasswordAuthentication no
PubkeyAuthentication yes

# 重启SSH
sudo systemctl restart sshd

  安装Fail2ban防御暴力破解

  Fail2ban能自动监控日志中的失败登录尝试,对异常IP进行临时封禁。

sudo apt-get install fail2ban -y   # Debian/Ubuntu
sudo yum install fail2ban -y       # CentOS/RHEL

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# 查看被封禁的IP列表
sudo fail2ban-client status sshd

  防火墙配置:控制进出流量

  防火墙是VPS安全的基础防线,规则设置得当可以防止未授权的端口暴露在公网上。Cloudflare的报告显示,配置不当的端口和服务是导致数据泄露的主要原因之一,所以这一步建议花点心思认真处理。

  UFW基本配置(适用于Ubuntu/Debian)

# 安装UFW
sudo apt-get install ufw -y

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

# 允许SSH新端口(一定要先开这个,否则下一次就连不上了)
sudo ufw allow 2222/tcp

# 允许HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 如果使用FTP
sudo ufw allow 21/tcp

# 启用防火墙
sudo ufw enable

# 查看状态
sudo ufw status numbered

  Firewalld基本配置(适用于CentOS/RHEL)

# 启动firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 开放需要的端口
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# 重新加载配置
sudo firewall-cmd --reload

# 查看已开放的端口和服务
sudo firewall-cmd --list-all

  端口开放原则

  防火墙配置的核心原则是最小暴露:只开放业务必需的端口,其他端口一律关闭。Web服务器通常只需要开放22/2222(SSH)、80(HTTP)、443(HTTPS)这几个端口。数据库端口(如3306、5432)建议只监听内网或通过白名单IP访问,不要直接暴露在公网上。

  定期备份:最后一道防线

  前面所有的安全措施都有可能被突破,只有备份是“出了事还能翻盘”的保障。一个完整的备份方案至少要做到:定期执行、异地存储、可验证恢复。

  数据库备份

  数据库通常比文件更重要,MySQL的备份脚本示例:

#!/bin/bash
# 数据库备份脚本

BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
DB_USER="your_db_user"
DB_PASS="your_db_password"

# 创建备份目录
mkdir -p $BACKUP_DIR

# 备份所有数据库
mysqldump -u$DB_USER -p$DB_PASS --all-databases > $BACKUP_DIR/all_db_$DATE.sql

# 压缩
gzip $BACKUP_DIR/all_db_$DATE.sql

# 删除7天前的备份
find $BACKUP_DIR -type f -mtime +7 -delete

  PostgreSQL备份命令:

pg_dumpall -U postgres | gzip > /backup/pg_all_$(date +%Y%m%d).sql.gz

  网站文件备份

#!/bin/bash
# 网站文件备份脚本

BACKUP_DIR="/backup/www"
DATE=$(date +%Y%m%d)
WWW_DIR="/var/www"

mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/www_$DATE.tar.gz $WWW_DIR

# 同步到远程存储(以AWS S3为例)
aws s3 sync $BACKUP_DIR s3://your-bucket-name/backups/

  备份是否有效的唯一检验标准是“能不能恢复”。建议每个季度至少做一次完整的恢复演练,确保备份文件可用、恢复流程清晰。有经验的老手也都踩过备份文件损坏或权限不足导致恢复失败的坑,定期验证能避免同样的问题。

售前客服
JTTI-Coco
JTTI-Andrew
JTTI-Selina
JTTI-Amano
JTTI-Eom
JTTI-Defl
JTTI-Luca
JTTI-Ellis
技术支持
JTTI-Noc
标题
电子邮件地址
类型
销售问题
销售问题
系统问题
售后问题
投诉与建议
市场合作
信息
验证码
提交