VPS 到手先做这 10 件事
2026 年 09 月 28 日 · 约 9 分钟读完
新买的 VPS 先别急着装网站。刚开出来的机器用的是默认配置,等于把门敞开着等人来试——新机器上线几分钟,/var/log/auth.log 里就会出现第一批爆破记录,全网的机器人 24 小时扫 22 端口试密码,这是公开的秘密。这 10 件事按顺序做,一个下午搞定,做完你的服务器就超过了八成个人小站的安全水平。每件事后面都写了做完怎么验证,验证不过就别往下走,跳过验证的初始化等于没做。顺序别乱:前面 6 件是保命(SSH 和防火墙),中间是省心(更新、时区、名字),最后两件是兜底(备份、快照)。
动手前先看:这份清单的用法
下面每一件都是三段式:做什么(为什么要做)、怎么做(直接复制命令)、怎么验证(做完必须跑一遍)。验证这一步别省,初始化最常见的翻车就是配完不验证,三个月后出问题才发现当初配错了,那时候早忘了当初怎么配的。另外准备两个终端窗口:一个保持登录别动(救命窗口),另一个做修改,万一改错了还有退路。
第 1 件:改掉 SSH 的默认 22 端口
全网的机器人 24 小时扫 22 端口试密码,你的机器上线几分钟就会被扫到。改掉端口不能防住定向攻击,但能挡掉九成以上的噪音扫描,日志也清净。挑一个 1024 以上的端口,比如 2222,顺眼好记就行。
sudo nano /etc/ssh/sshd_config # 把 Port 22 改成 Port 2222
sudo systemctl restart sshd怎么验证:新开一个终端,用 ssh -p 2222 用户@IP 能连上;再试默认端口,连不上就对了。端口别选 8080、8443 这种太常见的,等于换汤不换药。另外记得同步改防火墙和云厂商安全组:ufw 里放行的是 22 就改成 2222,不然改完端口直接把自己挡在外面。
第 2 件:换成密钥登录,禁用密码登录
密码再复杂也架不住字典爆破,密钥加禁用密码一步到位。注意顺序:先确认密钥能登录,再禁用密码,反了就把自己锁外面了。
ssh-keygen -t ed25519 # 本地生成密钥,一路回车
ssh-copy-id -p 2222 用户@IP # 把公钥传上去
# 确认密钥能登录后,再改服务端:
sudo nano /etc/ssh/sshd_config # PasswordAuthentication no
sudo systemctl restart sshd怎么验证:ssh -o PreferredAuthentications=password 用户@IP -p 2222,提示被拒绝就是成功了。ssh-copy-id 其实就做了一件事:把你的公钥追加到服务器 ~/.ssh/authorized_keys 里。如果那台机器上 ssh-copy-id 不可用,手动也行:本地 cat ~/.ssh/id_ed25519.pub,把内容粘到服务器的 authorized_keys 文件末尾,效果一样。-C 参数是给密钥加备注(比如 -C 我的笔记本),有多台电脑时分得清哪把钥匙是哪台。
第 3 件:新建普通用户,日常别用 root
root 权限太大,一个手滑 rm 就能删库。日常操作都用普通用户,需要提权时前面加 sudo,这是 Linux 世界的基本卫生习惯。
sudo adduser deploy # 按提示设密码
sudo usermod -aG sudo deploy # 给它 sudo 权限怎么验证:ssh deploy@IP -p 2222 登录,跑 sudo whoami,显示 root 就说明 sudo 生效了。deploy 用户也要配密钥登录,步骤和第 2 件一样(ssh-copy-id 目标换成 deploy@IP),别让新用户还用密码登录,不然第 2 件白做了。root 的密码登录保持禁用,日常用 deploy,需要 root 权限时 sudo 提权,这是服务器的基本操作姿势。
第 4 件:防火墙只开必须的门
服务器默认所有端口都开着,等于大门敞开。只放行 SSH(你改过的端口)、80、443,数据库端口(5432、3306 这类)一律不对公网开,应用和数据库走内网通信。
sudo ufw allow 2222
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable怎么验证:ss -tlnp 看监听的端口,应该只剩你放行的那几个;再跑 sudo ufw status verbose 确认规则生效。如果云厂商还有安全组,两边都要配,别只配一边。记住 ufw 的默认策略:没明确放行的都拒绝,所以新开服务(比如以后跑个 3000 端口的应用)要记得回来加规则,不然从外面怎么都连不上,先查防火墙。
第 5 件:打开自动安全更新
漏洞补丁不装,等于门锁坏了不修。Ubuntu 用 unattended-upgrades 让安全更新自动装,业务软件别自动更(怕不兼容),只自动更安全补丁。
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades怎么验证:systemctl status unattended-upgrades 显示 active,/var/log/unattended-upgrades/ 里有日志。想知道它到底装了啥,跑 apt list --upgradable 看看还有多少可更新的——刚装完系统这个列表一般很长,第一次建议手动跑一遍 sudo apt update && sudo apt upgrade -y,把积压的更新清掉,之后再交给自动更新守着。
第 6 件:装 fail2ban,防 SSH 爆破
改了端口、禁了密码之后,爆破基本打不进来,但 fail2ban 还是装上:它发现某个 IP 短时间内失败太多次就直接封掉,日志也清净。默认的 SSH 规则开箱即用,不用折腾配置。
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban怎么验证:sudo fail2ban-client status sshd,能看到 jail 状态和当前封禁数(0 也正常,说明没人来搞你)。默认策略是 10 分钟内失败 5 次就封 10 分钟,对付扫描机器人够用了。万一把自己封了(比如密钥没配好连试了几次),用 sudo fail2ban-client set sshd unbanip 你的IP 解封,别去重启服务器。
第 7 件:时区设为上海
默认时区一般是 UTC,日志里的时间和你对不上,排查问题时换算到怀疑人生。一行命令设成 Asia/Shanghai,一劳永逸。
sudo timedatectl set-timezone Asia/Shanghai
date怎么验证:date 显示 CST,和北京时间一致。以后看日志不用再换算了。时间准不准也很重要,服务器时间一般通过 NTP 自动同步,跑 timedatectl status 看一眼 System clock synchronized 是不是 yes。如果是 no,装个 chrony(sudo apt install -y chrony),时间自己会对准,定时任务和证书验证都依赖准时。
第 8 件:设置 hostname
默认 hostname 一串随机字符,ssh 登录后分不清连的是哪台。起个名字,比如 blog-prod,以后管三五台机器时不会连错。
sudo hostnamectl set-hostname blog-prod怎么验证:hostname 显示 blog-prod;重新 ssh 登录,提示符前面变成你起的名字。还有个连带好处:之前没设 hostname 的机器,跑 sudo 时会报 unable to resolve host,设完这个警告就没了。
第 9 件:配好自动备份
这是 10 件里最重要的一件。配置丢了能重配,数据丢了就是真丢了。数据库每天自动 dump,网站目录打包,cron 每天凌晨跑,保留 7 天。备份文件别放本机——放另一台机器或对象存储,本机硬盘挂了备份还在。
# 每天凌晨 3 点备份数据库,保留 7 天(示例,按你的数据库改)
0 3 * * * pg_dump mydb | gzip > /backup/db-$(date +\%F).sql.gz
0 3 * * * find /backup -name "db-*.sql.gz" -mtime +7 -delete怎么验证:备份文件真实存在,大小不是 0。进阶验证:挑一个备份真的恢复一次,没演练过的备份等于没有备份。备份有个 3-2-1 原则可以记一下:至少 3 份拷贝,存 2 种介质,其中 1 份放异地。个人小站做不到这么重,但底线是备份别只放本机——硬盘挂了、机器被黑了,本机备份跟着一起没。对象存储、另一台机器、甚至家里的 NAS 都行。
第 10 件:装常用工具,打一张快照
curl、git、htop、tmux 这几个装上,后面部署排查天天用。tmux 专门提一句:它能在服务器上开一个不会因为 SSH 断开就没了的会话,长命令(比如传大文件、跑迁移)放里面跑,断网了回来还能接着看,快照打之前用它跑备份最省心。然后去云厂商控制台打一张系统快照——这是你这台机器的后悔药,改崩了能整个滚回去。注意快照和第 9 件的备份是两回事:快照是整机后悔药,恢复快但占空间大、一般只保留一两份;备份是数据细水长流,每天自动跑。两个都要有。
sudo apt install -y curl git htop tmux怎么验证:which curl git htop 都有路径;云厂商控制台的快照列表里躺着一张今天的快照。快照是按磁盘大小计费的,记得看一眼价格,有的厂商快照比磁盘还贵,打完记得删掉过期的,别让它悄悄吃掉你的余额。
10 件做完,这台服务器才算真正是你的。后面装网站走《Caddy 反代:5 分钟给网站加上 HTTPS》那篇,让服务挂了自己重启看《systemd 守护进程:服务挂了自己重启》。Shell 命令不熟的话,站里有 Shell 命令速查页(站内 /shell),40 条常用命令都能一键复制。最后留个习惯:以后每个月花 10 分钟做 4 件事——apt update 看看有没有安全更新、df -h 看眼磁盘、fail2ban-client status 看眼有没有异常爆破、备份目录看眼文件在不在。服务器是养出来的,不是一次配完就扔那儿的,这份清单可以收藏起来,每次开新机器照着走一遍,熟练了半小时搞定。