服务器安全加固全攻略:从系统到应用
零散的安全技巧看了一堆,还是不知道从哪下手?小够把 VPS 安全加固整理成一张完整地图:系统层、SSH 层、网络层、应用层、数据层,每层做什么、做到什么程度算够,一篇讲透,照着打勾就行。
我是小够。这个月讲了很多单项:sshd_config、fail2ban、UFW、密钥管理。有读者问:能不能给个全貌?今天这篇就是全貌——把 VPS 安全加固分成五层,每层列出要做的事和"够用"的标准。你可以把它当检查表,逐项打勾。
第一层:系统层——地基
- 系统保持更新,打开自动安全更新(unattended-upgrades),别让已知漏洞躺着。
- 只装需要的软件。每个多装的服务都是多一个攻击面,“用不到就别装"是最便宜的安全措施。
- 时区、主机名设置正确,日志时间对了,出问题才查得明白。
- 新建 sudo 用户,日常不用 root。这是所有加固的前提。
够用标准:apt list --upgradable 经常是空的;systemctl list-units --type=service --state=running 里没有你不认识的服务。
第二层:SSH 层——大门
- 密钥登录,禁用密码登录(先确认密钥可用再关密码)。
- 禁用 root 远程登录(
PermitRootLogin no)。 - 换掉 22 默认端口,减少扫描噪音。
MaxAuthTries 3、AllowUsers白名单,按需配置。- fail2ban 盯着 sshd,3 次失败封禁;recidive 对付累犯。
够用标准:/var/log/auth.log 里看不到成串的爆破记录;你自己登录一次成功,不折腾。
第三层:网络层——院墙
- UFW 默认拒绝入站,只放行 SSH 和业务端口。
- 规则顺序检查:拒绝在前、放行在后。
- 数据库、面板后台等只监听内网或走 SSH 隧道,不直接暴露公网。
- 大厂云(Vultr、DigitalOcean、Linode 等)有云防火墙/安全组的,可以再加一层——云防火墙在流量到你机器之前就拦掉了。
够用标准:从外网 nmap 扫你的 IP,只看到你想让人看到的端口。
第四层:应用层——房间
- Web 服务(Nginx/Apache)保持更新,反向代理配置检查一遍,别把内网服务意外暴露。
- 建站程序(WordPress 等)及时更新,后台登录加固,插件只装必要的。
- Docker 容器别用 root 跑,能用普通用户就用普通用户;镜像用官方或可信源。
- 面板(宝塔/1Panel)改默认端口、开登录告警、面板本身及时更新——面板一旦被拿下,等于整台机器被拿下。
够用标准:每个应用都知道"它在监听哪个端口、谁能访问”,没有"我也不知道开了啥"的东西。
以 WordPress 为例,应用层加固清单:核心/主题/插件保持更新;后台登录 URL 可以改(减少被扫);登录失败限制(插件或 fail2ban 自定义 jail);文件权限 wp-config.php 设 600;数据库用户只给必要的库权限,别用 root 连库。每一项都不难,难的是"记得做"。
第五层:数据层——保险柜
- 备份,321 原则:3 份拷贝、2 种介质、1 份异地。备份是安全的最后一道防线,勒索和误删都靠它救命。
- 备份要定期验证能恢复——没验证过的备份等于没有备份。
- 敏感配置(数据库密码、API 密钥)别写进代码仓库,用环境变量或配置文件,加好权限。
够用标准:你能说出"我的备份在哪、多久一次、上次验证恢复是什么时候"。
加固后的验证:别配完就不管
五层都配完,花 15 分钟做一次验收,从攻击者视角看自己:
- 外网 nmap 扫一遍:只看到业务端口,SSH 端口要么换了、要么只对你的 IP 开放。
- 试一次密码登录:
ssh -o PreferredAuthentications=password 用户@IP,应该直接被拒绝——证明密码通道真的关了。 - 试一次 root 登录:应该被拒绝——证明
PermitRootLogin no生效了。 - 看 fail2ban 状态:
sudo fail2ban-client status,jail 都在运行,故意输错 3 次密码(用测试账户),确认 IP 被封。 - 检查更新状态:
apt list --upgradable应该是空的,unattended-upgrades的日志里有最近的运行记录。
5 项全过,加固才算落地。配了但没验证的加固,等于没配——这是小够见过最多的"自我安慰型安全"。
加固的节奏
别想一天全做完。建议顺序:新机器到手先做系统层 + SSH 层(30 分钟);业务上线前做网络层 + 应用层;第一个周末做数据层(备份)。之后每月花 20 分钟过一遍巡检清单(本站另有文章讲)。
小够的观点:安全加固不是"一次做到 100 分",而是"每一层都不缺"。很多被黑的案例,缺的都是最基础的那一项:没更新、密码登录、端口全开。把五层都做到"够用",个人和小团队的 VPS 已经比大多数机器安全了。剩下的,是保持习惯。
加固的常见误区
最后说三个小够见得最多的误区,帮你避坑:
- “我装了面板,面板会帮我搞定安全。” 面板帮你搞定的是"方便",不是"安全"。面板默认配置通常偏向"能用",而不是"安全"——端口、密码、更新,该你做的还是你做。
- “我把 SSH 端口改了,就安全了。” 改端口只是降噪,真正的门锁是密钥 + 防火墙。把改端口当成加固的全部,等于锁了纱窗没锁门。
- “等业务做大了再加固。” 攻击者不看你业务大小,扫描器扫的是 IP 段。而且业务做大后再加固,要停机、要改配置,成本更高。加固要趁早,越早越便宜。
常见问题
Q:五层都要做吗?我是个人博客,有必要吗? A:有必要,但可以按"够用"标准来,不用做到企业级。个人博客最常见的被黑原因是:弱密码 SSH + 未更新的建站程序。把这两项做好,就挡掉了绝大多数自动化攻击。
Q:云防火墙和 UFW 都要开吗?会不会冲突? A:都要开,不冲突。云防火墙在机房入口处过滤,UFW 在系统层面过滤,是纵深防御。规则保持一致就行:云防火墙放行的,UFW 也放行;云防火墙拒绝的,到不了 UFW。
Q:加固会影响网站性能吗? A:基本不影响。防火墙规则匹配、fail2ban、密钥认证的开销都微乎其微。唯一可能感知到的是:改了 SSH 端口后,旧书签/脚本要更新;fail2ban 误封自己时要解封。按本文流程走,这些都有预案。
Q:已经运行了一段时间的服务器,现在加固来得及吗? A:来得及,但先做一件事:检查有没有已经被入侵的迹象(看 auth.log 异常登录、看不明进程和定时任务)。确认干净后,再按五层逐项加固。顺序别反——在已经被黑的机器上加固等于给贼换锁。
Q:有没有一键加固脚本可以用? A:有不少开源脚本,但小够不推荐盲目跑。原因:每个人的系统版本、业务端口不一样,一键脚本可能关掉你需要的东西。建议按本文清单手动做一遍,理解每一项在干什么;理解之后,自己写个脚本固化下来,比用别人的更靠谱。