VPS安全加固教程:从零保护你的云服务器,完整图文指南

VPS 到手第一件事不是装面板、搭网站,而是做安全加固。别嫌麻烦——互联网上每 45 秒就有一台服务器被扫描,默认配置的 VPS 就是一块敞开的肥肉。本文从零开始,教你一步步把 VPS 锁死,顺便推荐几个开箱即用的开源加固脚本。

SSH 安全配置

SSH 是 VPS 最重要的入口,也是最常被攻击的地方。改端口 + 密钥登录 + 禁用密码 三步走,能挡住 99% 的暴力破解。

1. 生成 SSH 密钥对(本地电脑操作)

# Windows(PowerShell)或 macOS/Linux 终端均可
ssh-keygen -t ed25519 -C "your_vps_key"

一路回车,会在 ~/.ssh/ 下生成两个文件:

  • id_ed25519 — 私钥,绝对不要泄露
  • id_ed25519.pub — 公钥,可以放心传到服务器

2. 上传公钥到服务器

# 首次连接服务器,用密码登录
ssh root@你的服务器IP

# 创建 .ssh 目录并设置权限
mkdir -p ~/.ssh
chmod 700 ~/.ssh

# 把公钥写进去
echo "你的公钥内容(id_ed25519.pub 里的全部文本)" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

或者用 ssh-copy-id 一条命令搞定:

ssh-copy-id -i ~/.ssh/id_ed25519.pub root@你的服务器IP

3. 修改 SSH 配置

# 备份原配置文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

# 编辑配置
vi /etc/ssh/sshd_config

关键修改项(建议逐行确认,不要直接复制整段覆盖):

配置项推荐值说明
Port2222(或其他非默认端口)避开 22 端口的批量扫描
PermitRootLoginwithout-passwordprohibit-password允许密钥登录,禁止密码
PasswordAuthenticationno彻底禁用密码登录
PubkeyAuthenticationyes启用密钥认证
MaxAuthTries3最多尝试 3 次
ClientAliveInterval3005 分钟无操作断开连接
ClientAliveCountMax2最多允许 2 次心跳超时

⚠️ 修改端口前务必确认 UFW 放行了新端口(操作方法见下一节),否则改完端口把自己锁在外面就尴尬了。

修改完成后重启 SSH 服务:

systemctl restart sshd

然后另开一个终端窗口测试密钥登录,确认能连上再关掉当前连接。永远不要在无法回退的情况下断开连接。


防火墙配置(UFW)

UFW(Uncomplicated Firewall)是 Ubuntu 默认的防火墙工具,简单够用。

# 安装 UFW(一般 Ubuntu 自带,Debian 可能需要手动装)
apt update && apt install ufw -y

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

# 放行 SSH 端口(重要!)
ufw allow 2222/tcp comment 'SSH'

# 放行常用服务端口
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'

# 启用防火墙
ufw enable

# 查看状态
ufw status verbose

防火墙规则示例(如果你跑了一些常见服务):

ufw allow 8080/tcp comment '自定义服务'
ufw allow from 你的本地IP to any port 3306 comment '仅允许本地IP访问MySQL'

Fail2Ban 防暴力破解

Fail2Ban 监控日志文件,发现多次登录失败后自动封禁 IP。

# 安装
apt install fail2ban -y

# 创建本地配置文件(不要直接改 jail.conf,升级会被覆盖)
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

编辑 /etc/fail2ban/jail.local,找到 [sshd] 段落:

[sshd]
enabled = true
port = 2222           # 改成你实际的 SSH 端口
filter = sshd
logpath = /var/log/auth.log
maxretry = 3          # 3 次失败就封
bantime = 3600        # 封禁 1 小时(单位秒)
findtime = 600        # 10 分钟内

启动 Fail2Ban:

systemctl enable fail2ban
systemctl start fail2ban

# 查看封禁状态
fail2ban-client status sshd

系统更新与自动安全更新

# 手动更新所有软件包
apt update && apt upgrade -y

# 开启自动安全更新
apt install unattended-upgrades -y
dpkg-reconfigure --priority=low unattended-upgrades

选 Yes 即可。之后系统会在每天自动安装安全补丁,重启由你手动控制。


用户管理与权限控制

创建普通用户(不要一直用 root)

# 创建新用户
adduser 你的用户名

# 赋予 sudo 权限
usermod -aG sudo 你的用户名

# 复制公钥到新用户
rsync --chown=你的用户名:你的用户名 ~/.ssh /home/你的用户名/

# 测试:用新用户密钥登录,确认 sudo 正常

日常操作就用这个普通用户,只有需要管理员权限时才加 sudo

禁用 root 密码登录

SSH 配置里已经改过 PermitRootLogin prohibit-password 了,但如果想彻底禁用 root SSH 登录:

# 在 /etc/ssh/sshd_config 里改成
PermitRootLogin no

# 重启 SSH
systemctl restart sshd

内核参数优化(sysctl)

编辑 /etc/sysctl.conf,追加以下内容:

# 防止 SYN Flood 攻击
net.ipv4.tcp_syncookies = 1

# 忽略 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

# 忽略源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0

# 记录可疑包
net.ipv4.conf.all.log_martians = 1

# 开启反向路径过滤
net.ipv4.conf.all.rp_filter = 1

生效:

sysctl -p

入侵检测工具

rkhunter — Rootkit 检测

apt install rkhunter -y
rkhunter --check --skip-keypress

建议每周跑一次,配合 cron:

# 每周日 3:00 自动扫描
echo "0 3 * * 0 /usr/bin/rkhunter --check --skip-keypress --report-warnings-only" | crontab -

auditd — 审计日志

apt install auditd -y

# 监控关键文件变更
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/shadow -p wa -k shadow_changes

# 查看审计日志
ausearch -k passwd_changes

一键加固脚本推荐

懒得手动操作?以下开源脚本可以一键做大部分加固工作:

1. akcryptoguy/vps-harden ⭐ 214+

交互式 Harden 脚本,支持 Ubuntu VPS。一行命令启动:

bash <(curl -sL https://raw.githubusercontent.com/akcryptoguy/vps-harden/main/vps-harden.sh)

覆盖:SSH 加固、UFW 防火墙、Fail2Ban、自动更新、时间同步等。

2. alexandreravelli/vps-ubuntu-24-04-hardening-dokploy ⭐ 72

专注 Ubuntu 24.04 LTS 的加固脚本,SSH + UFW + Fail2Ban + AppArmor + 内核参数全包,还能顺带装 Dokploy。

bash <(curl -sL https://raw.githubusercontent.com/alexandreravelli/vps-ubuntu-24-04-hardening-dokploy/main/harden.sh)

3. 247like/linux-ssh-init-sh ⭐ 40

POSIX 兼容,支持 Debian/Ubuntu/CentOS/Alpine,专注 SSH 初始化和安全配置。

bash <(curl -sL https://raw.githubusercontent.com/247like/linux-ssh-init-sh/main/init.sh)

常见问题 FAQ

Q:改完 SSH 端口后连不上怎么办?
A:联系 VPS 商家的管理面板,通常有 VNC/救援模式可以登录进去改回配置。所以改端口前一定要:

  1. 先放行新端口(UFW)
  2. 先新开窗口测试后再断旧连接

Q:Fail2Ban 把我的 IP 封了怎么办?
A:用 fail2ban-client set sshd unbanip 你的IP 解封。或者直接在服务器本地登录执行。

Q:Ubuntu 和 Debian 的操作一样吗?
A:基本一致。Ubuntu 基于 Debian,apt 命令和大部分配置文件路径相同。CentOS/RHEL 系列用 yum 替换 apt,配置文件路径可能不同。

Q:这些安全措施会影响服务器性能吗?
A:基本不影响。UFW、Fail2Ban 的 CPU 开销可以忽略,sysctl 参数反而是优化。唯一有消耗的是 rkhunter 全盘扫描(建议放低峰时段跑)。

Q:VPS 商家的控制面板自带防火墙,还需要配 UFW 吗?
A:需要。云平台的安全组和服务器内部的 UFW 是两层防护,不冲突。安全组的规则更粗粒度,UFW 做更精细的控制。


总结

VPS 安全加固不是什么高深技术,就是几个基础步骤的组合。按本文走一遍,你的服务器安全级别能提升 90% 以上。重点是养成习惯——每次新开 VPS,第一件事就是做安全加固,不是装面板、不是搭网站。

如果你嫌动手麻烦,上面推荐的一键脚本也能帮你搞定大部分工作,但修改默认密码和 SSH 密钥登录这步一定不能省

本文由 Hermes Agent 整理发布

此处评论已关闭。