新买的VPS第一步该做什么:安全初始化指南

为什么安全初始化很重要

新买的VPS就像一栋没有锁门的房子——任何人都可以来试试运气。你可能觉得”我的VPS上又没什么重要数据”,但现实是:你的VPS在开通后几分钟内就会被扫描到

我曾经开了一台VPS什么都不做,24小时后查看SSH日志:

grep "Failed password" /var/log/auth.log | wc -l
# 结果: 12847

一天之内有12847次暴力破解尝试。所以安全初始化不是可选项,是必选项。

第一步:更新系统

SSH连接到VPS后,第一件事是更新系统:

# Ubuntu/Debian
apt update && apt upgrade -y

# CentOS/Rocky Linux
dnf update -y

系统自带的软件包可能有已知漏洞,更新到最新版可以堵上大部分安全隐患。

第二步:创建新用户

不要直接用root账号日常操作,创建一个普通用户:

# 创建用户
adduser myuser

# 赋予sudo权限
usermod -aG sudo myuser  # Ubuntu/Debian
# 或
usermod -aG wheel myuser  # CentOS

以后用这个新用户登录,需要管理员权限时用sudo。

第三步:配置SSH安全

这是最关键的一步。

3.1 修改SSH端口

默认的22端口是扫描机器人的首选目标,换个端口能过滤掉99%的自动化攻击:

vim /etc/ssh/sshd_config

找到 #Port 22,改为:

Port 58234  # 换成你喜欢的端口号(1024-65535之间)

3.2 配置密钥登录

密钥认证比密码安全得多。

在你的本地电脑上生成密钥对:

ssh-keygen -t ed25519 -C "mykey"

把公钥上传到VPS:

ssh-copy-id -p 58234 myuser@你的VPS_IP

3.3 禁用密码登录和root登录

确认密钥登录正常后,禁用密码登录:

vim /etc/ssh/sshd_config

修改以下配置:

PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes

重启SSH:

systemctl restart sshd

重要:修改前一定要确认密钥登录正常!否则你会把自己锁在外面。建议保持当前终端不关,新开一个终端测试登录。

第四步:配置防火墙

UFW(Ubuntu推荐)

# 安装
apt install ufw -y

# 允许你的SSH端口
ufw allow 58234/tcp

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

# 启用防火墙
ufw enable

# 查看规则
ufw status

firewalld(CentOS推荐)

# 允许SSH端口
firewall-cmd --permanent --add-port=58234/tcp

# 允许HTTP/HTTPS
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https

# 重载配置
firewall-cmd --reload

防火墙规则参考:

端口用途是否开放
22SSH(已更改)关闭
58234SSH(新端口)开放
80HTTP开放
443HTTPS开放
3306MySQL关闭(仅本地)
6379Redis关闭(仅本地)

数据库和缓存服务的端口千万不要对外开放。

第五步:安装Fail2ban

Fail2ban会自动封禁暴力破解的IP:

# 安装
apt install fail2ban -y

# 创建本地配置
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vim /etc/fail2ban/jail.local

关键配置:

[sshd]
enabled = true
port = 58234
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600

这样配置后,10分钟内SSH登录失败3次就会被封禁1小时。

# 启动
systemctl enable fail2ban
systemctl start fail2ban

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

第六步:配置自动安全更新

# Ubuntu/Debian
apt install unattended-upgrades -y
dpkg-reconfigure --priority=low unattended-upgrades

这会自动安装安全更新,不需要你手动操作。

第七步:设置时区和时间同步

# 设置时区
timedatectl set-timezone Asia/Shanghai

# 确认NTP同步开启
timedatectl status

时间不准会导致SSL证书问题、日志混乱等一系列奇怪的bug。

安全检查清单

完成所有配置后,对照这个清单检查一下:

检查项状态
系统已更新到最新[ ]
创建了非root用户[ ]
SSH端口已修改[ ]
密钥登录已配置[ ]
密码登录已禁用[ ]
root登录已禁用[ ]
防火墙已启用[ ]
只开放了必要端口[ ]
Fail2ban已安装[ ]
自动更新已配置[ ]

进阶安全措施

基础安全做完后,如果你想更进一步:

禁用IPv6(如果不需要)

echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
sysctl -p

配置swap

内存不足时swap可以防止OOM杀掉进程:

fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab

设置定时备份

# 每天凌晨3点备份网站数据
0 3 * * * tar -czf /backup/site-$(date +\%Y\%m\%d).tar.gz /var/www/html
# 每天凌晨4点备份数据库
0 4 * * * mysqldump -u root --all-databases | gzip > /backup/db-$(date +\%Y\%m\%d).sql.gz

常见安全误区

误区1:“我用了密钥就安全了”

密钥登录确实安全,但如果你的私钥文件泄露了照样完蛋。保管好你的私钥文件,设置一个强密码保护。

误区2:“防火墙开了就行了”

防火墙只能阻止未授权的端口访问,不能防止应用层面的攻击。Web应用本身的漏洞(比如WordPress插件漏洞)还是要注意更新。

误区3:“便宜VPS不需要安全配置”

恰恰相反,便宜VPS更容易被盯上。攻击者喜欢利用配置不当的VPS作为跳板或者挖矿。

总结

安全初始化大约需要30-60分钟,但这个时间投入绝对值得。做好了基本上不会有什么安全问题。如果你还没买VPS,先看看新手VPS选购指南选一台合适的。

安全配置完成后就可以开始安装Web环境和部署网站了。如果网站加载速度不理想,看看VPS网站加速方案