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@你的服务器IP3. 修改 SSH 配置
# 备份原配置文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 编辑配置
vi /etc/ssh/sshd_config关键修改项(建议逐行确认,不要直接复制整段覆盖):
| 配置项 | 推荐值 | 说明 |
|---|---|---|
Port | 2222(或其他非默认端口) | 避开 22 端口的批量扫描 |
PermitRootLogin | without-password 或 prohibit-password | 允许密钥登录,禁止密码 |
PasswordAuthentication | no | 彻底禁用密码登录 |
PubkeyAuthentication | yes | 启用密钥认证 |
MaxAuthTries | 3 | 最多尝试 3 次 |
ClientAliveInterval | 300 | 5 分钟无操作断开连接 |
ClientAliveCountMax | 2 | 最多允许 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/救援模式可以登录进去改回配置。所以改端口前一定要:
- 先放行新端口(UFW)
- 先新开窗口测试后再断旧连接
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 整理发布
此处评论已关闭。