一台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。如果内核更新了,确认要重启,选在没人用的时候。

备份策略

博客是静态站点,备份成本极低。我的备份链:

  1. Zola源码 → git push 到私有仓库
  2. Nginx配置 → 每隔一周用手动 scp 拉到本地
  3. 系统配置(sshd_config、fail2ban配置)→ 直接记在这篇文章里(最强的备份是文档化)

不需要什么自动化备份脚本。一台低配机器和一篇文档就够了。重要的不是备份工具,是你的配置被文档化了,重搭只要30分钟

监控策略

不需要Prometheus、Grafana这些东西。一台低配机器能承受的监控开销是:

  • uptime 看一眼负载
  • free -h 看一眼内存
  • df -h 看一眼磁盘
  • tail -50 /var/log/syslog 看一眼异常

我每周上去看一眼,5分钟。如果没问题就下线。很多运维事故是监Control 出来的——你装了监控就要配置告警,配了告警就要处理告警,处理了告警就忍不住去做优化,做了优化就搞崩了。 少就是多。

第四步:应急——你知道该做什么就不慌

VPS被黑怎么办?

如果你的机器被入侵了,不要试图修复,直接重装

你不可能保证在已经沦陷的系统上清理干净。攻击者可能留了rootkit、后门、计划任务。你排查三天不如重装一小时。

重装后的操作:

  1. 安装系统(大概率没变)
  2. scp 你的 SSH 公钥上去
  3. 执行加固脚本(上面那套)
  4. 恢复数据(从备份git拉源码)
  5. nginx -t && systemctl reload nginx
  6. 上线

从被黑到恢复上线,30分钟。

被墙/被限速怎么办?

香港VPS有个风险:如果被GFW探测到做代理用途,会被限速甚至阻断。

两个应对:

  1. 端口敲门:SSH端口不直接暴露,用 knockd 做端口敲门。先敲几个指定端口,防火墙才打开SSH端口。扫描器碰不到你的SSH。

  2. 备用方案:如果你是做SOCKS代理,备一个 mosh 或 WireGuard,在SSH被封后还有后路。

磁盘写满怎么办?

先别想着删东西。先查是什么在吃:

du -sh /* 2>/dev/null | sort -rh | head -10

大概率是 /var/log//tmp/。journalctl 清理 + apt 清理 + 删掉不需要的内核镜像,能找回30%-50%的空间。

总结:低配机器的哲学

我这台机器跑了五年,它教会我的不是技术,是态度:

  1. 知道自己要什么。不知道要什么的人,才会买4核8G跑一个Hello World。
  2. 简化就是安全。每多一个服务就多一个攻击面。少装东西比多配防火墙更安全。
  3. 文档化你的配置。最好的备份不是脚本,是你写下来的时候发现哪里错了。
  4. 服务器不是宠物是牲口。被黑了就重装,别想着救。没有什么是30分钟恢复不了的。
  5. 少折腾。绝大多数事故是你半夜手贱升级搞出来的。服务器不是你的玩具。

最后送一句话给所有买低配VPS的人:

低配机器逼你做对的取舍。高配机器容忍你所有的错误。

你的第一台服务器不需要多好。它需要久。