新买的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
防火墙规则参考:
| 端口 | 用途 | 是否开放 |
|---|---|---|
| 22 | SSH(已更改) | 关闭 |
| 58234 | SSH(新端口) | 开放 |
| 80 | HTTP | 开放 |
| 443 | HTTPS | 开放 |
| 3306 | MySQL | 关闭(仅本地) |
| 6379 | Redis | 关闭(仅本地) |
数据库和缓存服务的端口千万不要对外开放。
第五步:安装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网站加速方案。