如果你已经完成了VPS搭建,网站也能正常访问,那你大概率会进入一个阶段:服务器先放着,等有空再说。但我想提醒你一句,我们在帮用户做安全排查时发现,真正出问题的,往往就是这些“先放着”的默认设置。
很多新手会把精力放在程序和插件上,却忽略了最底层的入口。对服务器来说,SSH就是你家的正门,防火墙就是围墙。门没换锁、墙没围好,里面放什么都不安全。
最常见的风险包括:
- SSH默认22端口长期暴露,被自动化工具全天扫描
- root账号允许直接登录,一旦密码泄露就是最高权限
- 仍然使用密码登录,持续遭遇爆破
- 防火墙未启用,所有端口默认对公网开放
这些问题单看不吓人,但叠加在一起,就很容易出事。
在动SSH和防火墙前,我通常会先做这几件事
在正式开始前,我强烈建议你先做一个小准备。这一步看起来多余,但它能在关键时刻救你一命。
我自己在操作时,通常会:
- 同时打开两个SSH会话窗口,一个负责修改,一个专门用来测试是否还能连
- 确认有一个可用的普通用户并具备sudo权限,后面我们会禁用root登录
- 养成每次修改SSH配置后先校验的习惯,避免语法错误直接重载服务
从这一节开始,你做的每一步,都有可能让你暂时连不上服务器。只要你保持“改一小步,立刻验证”,风险会低很多。
强化SSH安全
这部分我会按“风险从高到低”的顺序来写,你可以照着一步一步来,不建议跳过。
修改默认SSH端口
修改端口并不是为了“防黑客”,而是为了减少无意义的扫描和爆破尝试。22端口几乎是被写死在扫描器里的,换一个不常见的端口,日志立刻会干净很多。
我的做法通常是:先让SSH同时监听旧端口和新端口,确认新端口没问题后,再关闭22。
你可以编辑SSH配置文件:
sudo nano /etc/ssh/sshd_config
加入或修改为:
Port 22 Port 2222
然后先校验,再重载:
sudo sshd -t sudo systemctl reload sshd
这一步完成后,立刻用另一个窗口测试新端口能否登录:
ssh -p 2222 youruser@your_server_ip
提醒一下:不要一上来就删掉22端口。只要新端口还没验证成功,你就别急着关旧门。
禁止root用户直接登录
这是我认为性价比极高的一步。root这个账号名对攻击者来说太“确定”了,一旦允许远程登录,对方只需要猜密码。
更安全、也更常见的做法是:
- 禁止root直接SSH登录
- 使用普通用户登录后,通过sudo提权
配置方式很简单,在同一个文件里找到或新增:
PermitRootLogin no
校验并重载后,立刻确认:
- 普通用户还能登录
- sudo权限正常使用
如果你现在还只有root账号,那就先别急着做这一步,先创建好替代入口再说。
使用SSH密钥对登录,并关闭密码认证
如果你问我,SSH安全里哪一步最值得做,我会毫不犹豫选这个。
密码再复杂,本质上还是可以被不断尝试的。而SSH密钥登录是基于非对称加密的,只要私钥不泄露,服务器本身是没有“可猜”的东西的。
在你的本地电脑生成密钥:
ssh-keygen -t ed25519 -a 64
生成后,把公钥复制到服务器:
ssh-copy-id -p 2222 youruser@your_server_ip
接下来非常重要的一步是:
先测试密钥登录是否成功。
只有当你确认可以用密钥正常登录后,才去关闭密码登录。
在SSH配置中设置:
PasswordAuthentication no PubkeyAuthentication yes
再次校验并重载。
这里我一定要强调一句:
千万不要在没验证密钥可用之前,就关掉密码登录
这是新手最容易把自己锁在门外的地方。
配置防火墙:只放行真正需要的端口
SSH加固完成后,你已经把“钥匙”换成了更安全的版本。接下来这一步,是把“院门”关好。
核心原则只有一句话:
你用不到的端口,就不该对公网开放。
使用UFW实现最小放行
如果你用的是Ubuntu或Debian系系统,UFW是非常合适的选择,简单、不容易出错。
基本流程是:
- 先放行你正在用的SSH端口
- 再放行80和443
- 最后设置默认拒绝所有入站连接
示例命令:
sudo ufw allow 2222/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw enable
启用后,立刻测试:
- SSH是否还能连
- 网站是否还能访问
很多人出问题,都是因为顺序反了。记住一句话:先放行,再启用。
使用iptables的进阶思路
iptables更灵活,但也更容易“手滑”。如果你对规则还不熟,我一般不建议你一上来就用它。
如果你确实需要,用一个“逐步收紧”的思路:
- 先允许已建立连接
- 再放行SSH新端口和Web端口
- 最后才设置默认DROP
并且,强烈建议你在应用规则时,始终保持第二个会话窗口在线。
如果你真的把自己锁在外面了
说句实在话,几乎每个做过服务器的人,都经历过至少一次“连不上”的瞬间。
这也是为什么我一直建议:
选择提供后台控制面板和快照备份的VPS服务商。
一旦你在改SSH或防火墙时误操作,有控制台或快照,往往几分钟就能恢复,而不是整台重装。
快速自检清单
你可以用下面这份清单,快速确认自己的VPS是否已经达标:
- SSH已不使用22端口
- root账号无法直接远程登录
- SSH已启用密钥登录,密码登录关闭
- 防火墙仅放行80、443和SSH端口
- 你清楚误操作后的恢复方式
FAQ
Q:改了SSH端口是不是就安全了?
不是。端口只是辅助措施,真正的核心是密钥、防火墙和权限控制。
Q:为什么密钥比密码安全?
因为服务器不保存私钥,也不存在“可被尝试”的验证信息。
Q:新手更适合UFW还是iptables?
大多数情况下,UFW已经足够,而且出错概率更低。
Q:只跑一个网站,需要开放哪些端口?
通常就是80、443,加上你自己的SSH端口。
写在最后
VPS安全并不是一次性任务,而是一套可以复用的习惯流程。
每次大改前先做快照,每一步改动立刻验证,这会让你走得更远、也更稳。
如果你在配置过程中遇到问题,欢迎在评论区交流,或者把你的思路和卡点分享出来。
很多时候,你的问题,正好也是下一位新手最需要看到的答案。
如果这篇文章对你有帮助,也欢迎点赞、收藏或转发,让更多正在折腾VPS的人少踩几个坑。