低配VPS生存指南:1核1G跑5年没崩的秘密
一台1.5GB内存、5Mbps带宽、34GB SSD的香港VPS,跑了五年。
没崩过、没被黑过、没被墙过。
不是运气,是一套刻意维持的纪律。这篇文章就把这套纪律写出来——从选机器、加固、日常运维到应急,每个环节都有一个原则:低配机器不是让你省配置钱然后花时间折腾的,是让你学会在限制下做对的取舍。
选机器:承认你不需要那么好的配置
我选这台机器的逻辑很简单:
- 地点:香港。对大陆延迟低(30-50ms),对中国出海服务友好,没有备案问题。
- 配置:2核E5-2699 v4、1.5GB RAM、34GB SSD。相当于2015年主流笔记本的水平。
- 带宽:5Mbps。够一个人用SSH、跑博客、做代理。
- 价格:一个月几十块人民币,一年下来不如一顿饭钱。
选低配机器的核心判断是:你先想清楚你在这个VPS上要跑什么,再决定买多大。 绝大多数个人用途——翻墙代理、个人博客、测试环境、文件中转——1核1G绰绰有余。你买的不是算力,是公网IP和独立控制权。
我见过太多人买4核8G的机器,最后只跑了一个Nginx和一个SSH。他的问题不是机器不够,是不知道自己要什么。
第一步:SSH加固——99%的攻击在第一步就被挡了
VPS上线后的第一件事不是装面板、不是配环境,是堵SSH的门。
别看什么Webmin、宝塔面板,那些是给不想学运维的人用的。真正的运维从SSH加固开始。我按优先级列出:
1. 改端口(最简单、最有效)
默认端口22,全世界每秒钟有几千个bot在扫描。改成 50000 之后,扫描日志从每天几千条降到个位数。
Port 50000
就这么一行。改了之后 auth.log 直接安静了。
2. 禁止密码登录
密码认证是SSH最大的漏洞。再复杂的密码也扛不住字典攻击和中间人。用密钥对,关闭 PasswordAuthentication:
PasswordAuthentication no
3. 禁止root直接登录
PermitRootLogin prohibit-password
prohibit-password 的意思是:root可以用密钥登录,但不能用密码。这样即使有人拿到了你的密钥文件,也只能用普通用户登录,还得再想办法提权——多了一层。
4. 限制最大认证次数
MaxAuthTries 2
认证失败两次就断掉。这配合 fail2ban 用效果更好——fail2ban 在系统层面封IP,MaxAuthTries 在SSH层面提前断连。
5. 保持连接检测
ClientAliveInterval 300
ClientAliveCountMax 2
每5分钟发一次心跳检测,连续2次无响应就断开。防止SSH进程被僵尸连接耗尽。
6. fail2ban——自动封IP
装了fail2ban,配置sshd jail:
[sshd]
enabled = true
maxretry = 2
bantime = 10d
两次认证失败就封IP,封10天。误封的概率极低——正常用户不会连续输错两次密码。
fail2ban 的后端用 ufw,而不是 iptables。理由:ufw 规则清晰,ufw status 一看就懂,iptables 那堆规则看五分钟就晕了。
配置好这些之后,你的SSH基本就是铁板一块了。剩下的攻击面不在SSH了——在你的应用层。
第二步:系统层面——低配机器的生存法则
内存管理:Swap设多少?
1.5GB内存的机器,需要Swap。但Swap不能太大——因为SSD写入寿命有限。
我的规则:Swap = 内存的50%,放在SSD上,swappiness设为10。
swapoff -a
dd if=/dev/zero of=/swapfile bs=1M count=768
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
vm.swappiness=10 的意思是:只有内存用到90%以上才动用Swap。默认值60意味着内存用到40%就开始换出——这对低配机器是灾难。
不要装不需要的服务
低配机器的第一原则:任何你没显式安装的服务,就是潜在的风险和资源消耗。
- 不需要MySQL?不要装。
- 不需要Postfix?不要装。
- 不需要snapd?禁用它。
- 不需要cloud-init?第一次启动后就可以删了。
我在这台机器上只装了:nginx(博客)、Zola(静态站点生成)、fail2ban(安全)、ufw(防火墙)、mosh(备用SSH)。
systemctl list-units --type=service --state=running 一行命令看一眼,如果超过10个服务在跑,你多半多装了东西。
日志管理:别让日志吃满你的硬盘
低配机器最容易被忽略的死法:日志把磁盘写满了,服务挂了,你登录不了因为SSH也写不了日志。
解决方案:logrotate + journald 限制。
# /etc/systemd/journald.conf
SystemMaxUse=200M
MaxFileSec=1week
再加一个cron脚本每周检查磁盘:
#!/bin/bash
USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $USAGE -gt 85 ]; then
journalctl --vacuum-time=3d
apt autoremove --purge -y
fi
第三步:日常运维——少折腾就是最好的运维
更新策略
每月一次 apt update && apt upgrade。不在周五晚上升级。不在有重要服务运行时升级。
更新前看一眼 ChangeLog:apt list --upgradable。如果内核更新了,确认要重启,选在没人用的时候。
备份策略
博客是静态站点,备份成本极低。我的备份链:
- Zola源码 → git push 到私有仓库
- Nginx配置 → 每隔一周用手动 scp 拉到本地
- 系统配置(sshd_config、fail2ban配置)→ 直接记在这篇文章里(最强的备份是文档化)
不需要什么自动化备份脚本。一台低配机器和一篇文档就够了。重要的不是备份工具,是你的配置被文档化了,重搭只要30分钟。
监控策略
不需要Prometheus、Grafana这些东西。一台低配机器能承受的监控开销是:
uptime看一眼负载free -h看一眼内存df -h看一眼磁盘tail -50 /var/log/syslog看一眼异常
我每周上去看一眼,5分钟。如果没问题就下线。很多运维事故是监Control 出来的——你装了监控就要配置告警,配了告警就要处理告警,处理了告警就忍不住去做优化,做了优化就搞崩了。 少就是多。
第四步:应急——你知道该做什么就不慌
VPS被黑怎么办?
如果你的机器被入侵了,不要试图修复,直接重装。
你不可能保证在已经沦陷的系统上清理干净。攻击者可能留了rootkit、后门、计划任务。你排查三天不如重装一小时。
重装后的操作:
- 安装系统(大概率没变)
- scp 你的 SSH 公钥上去
- 执行加固脚本(上面那套)
- 恢复数据(从备份git拉源码)
nginx -t && systemctl reload nginx- 上线
从被黑到恢复上线,30分钟。
被墙/被限速怎么办?
香港VPS有个风险:如果被GFW探测到做代理用途,会被限速甚至阻断。
两个应对:
-
端口敲门:SSH端口不直接暴露,用 knockd 做端口敲门。先敲几个指定端口,防火墙才打开SSH端口。扫描器碰不到你的SSH。
-
备用方案:如果你是做SOCKS代理,备一个 mosh 或 WireGuard,在SSH被封后还有后路。
磁盘写满怎么办?
先别想着删东西。先查是什么在吃:
du -sh /* 2>/dev/null | sort -rh | head -10
大概率是 /var/log/ 或 /tmp/。journalctl 清理 + apt 清理 + 删掉不需要的内核镜像,能找回30%-50%的空间。
总结:低配机器的哲学
我这台机器跑了五年,它教会我的不是技术,是态度:
- 知道自己要什么。不知道要什么的人,才会买4核8G跑一个Hello World。
- 简化就是安全。每多一个服务就多一个攻击面。少装东西比多配防火墙更安全。
- 文档化你的配置。最好的备份不是脚本,是你写下来的时候发现哪里错了。
- 服务器不是宠物是牲口。被黑了就重装,别想着救。没有什么是30分钟恢复不了的。
- 少折腾。绝大多数事故是你半夜手贱升级搞出来的。服务器不是你的玩具。
最后送一句话给所有买低配VPS的人:
低配机器逼你做对的取舍。高配机器容忍你所有的错误。
你的第一台服务器不需要多好。它需要久。