跳转到内容

VPS 安全进阶:超越 Fail2ban 的加固方案

VPS Server Security

在之前的文章中,我们介绍了如何使用 Fail2ban 自动封禁暴力破解 IP。然而,安全是一个多层级的防御体系,Fail2ban 只是“事后补救”式的防御。

如果黑客拥有极高效率的爆破手段,或者你刚好使用了一个弱密码,Fail2ban 可能在封禁 IP 之前就让攻击者得逞。真正的“堡垒级”防御,应该从减少攻击面和增强身份验证入手。

本文将带你完成 VPS 的深层加固,确保即使你的 IP 暴露,攻击者也无从下手。


一、 SSH 密钥登录:彻底告别“爆破”

核心思想: 用“长达数千位的复杂字符串(密钥)”代替“人脑能记住的简单字符串(密码)”。

即使攻击者有再强大的算力,也无法在有限的时间内破解 4096 位的 RSA 密钥或 Ed25519 密钥。

1. 在本地生成密钥对

在你的本地电脑(Windows 使用 PowerShell/CMD,macOS/Linux 使用终端)执行:

bash
ssh-keygen -t ed25519 -C "your_email@example.com"

提示:Ed25519 是目前公认最安全且性能最好的算法。

2. 将公钥上传至服务器

你可以手动复制,也可以使用快捷命令:

bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@你的服务器IP

3. 测试密钥登录

确保不需要输入密码即可直接进入服务器:

bash
ssh root@你的服务器IP

二、 禁用密码认证:关闭那扇“虚掩的门”

只要服务器还允许密码登录,爆破就不会停止。一旦密钥登录配置成功,你应该果断禁用密码认证。

修改 SSH 配置文件

bash
nano /etc/ssh/sshd_config

找到并修改以下关键项:

ini
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no  # 如果你打算使用 2FA,此项需保持为 yes,详见下文

保存并重启 SSH 服务:

bash
systemctl restart ssh

⚠️ 警告: 在重启服务前,请务必保持当前的 SSH 连接不要断开,并开启另一个终端窗口测试是否仍能通过密钥登录。否则一旦配置错误且无法密码登录,你将被锁在服务器之外!


三、 启用双因子认证 (2FA):双重保险

如果你觉得“密钥”还不够保险,可以再加一把锁:手机验证码。即使密钥被盗(虽然概率极低),没有你手机上的 Google Authenticator 动态验证码,攻击者依然进不去。

1. 安装 Google Authenticator 模块

bash
apt install libpam-google-authenticator -y

2. 初始化配置

在终端输入:

bash
google-authenticator

你会看到一个巨大的二维码。用手机上的 Google Authenticator 扫描它,并务必保存好那几个紧急恢复代码(Emergency Scratch Codes)

3. 配置 PAM 模块

bash
nano /etc/pam.d/sshd

在文件顶部添加:

ini
auth required pam_google_authenticator.so

4. 修改 SSH 配置以支持 2FA

bash
nano /etc/ssh/sshd_config

修改或确认以下项:

ini
KbdInteractiveAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

这表示登录时需要“公钥”+“键盘交互(验证码)”双重验证。


四、 UFW 防火墙最佳实践:只开必要的窗

很多新手安装完 VPS 后不开启防火墙,或者开启后全端口放行。这非常危险。

1. 初始化 UFW

bash
# 默认拒绝所有入站,允许所有出站
ufw default deny incoming
ufw default allow outgoing

# 允许必要的端口(以 SSH 22, HTTP 80, HTTPS 443 为例)
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp

# 开启防火墙
ufw enable

2. 进阶:限制 SSH 访问频率

即使没有 Fail2ban,UFW 也能实现基础的限流:

bash
ufw limit 22/tcp

这会在 IP 尝试连接频率过高时自动封锁一段时间。


五、 定期自动更新:修补未知的洞

安全不是一次性的工作。Linux 内核和软件漏洞随时可能出现。

安装无人值守更新 (Unattended-Upgrades)

bash
apt install unattended-upgrades -y
dpkg-reconfigure --priority=low unattended-upgrades

这会让你的 Debian/Ubuntu 系统每天自动安装安全补丁,确保即使你没时间登录服务器,它也能自我修复。


🛡️ 总结:你的安全清单

为了达到极致的 VPS 安全,请检查你是否完成了以下动作:

安全是一个动态的过程。定期查看日志,保持软件更新,才是真正的长治久安。


延伸阅读

免责声明

本文仅供技术交流和学习参考。涉及第三方服务的链接可能包含 sponsored 标记,请自行核实服务条款、价格和可用性,并遵守当地法律法规。