拿到一台新 VPS 第一件事不是装面板、不是搭服务,而是先做安全加固。这篇教程从零开始,覆盖 SSH 密钥认证、防火墙、Fail2ban、自动更新等关键步骤,Ubuntu/Debian/CentOS 通用。
第一步:创建普通用户并配置 sudo
拿到 VPS 后默认是 root 登录。先别急着用 root 干别的,新建一个日常用的用户:
# Ubuntu/Debian
adduser devops
usermod -aG sudo devops
# CentOS
adduser devops
usermod -aG wheel devops然后把终端退出重新用 devops 登录。日常操作用这个用户,需要提权时加 sudo。
第二步:配置 SSH 密钥登录(这是最重要的)
密码登录是 VPS 被爆破的第一入口。换成密钥登录后,只要你的私钥不泄露,没人能 SSH 进来。
本地生成密钥对(在你自己电脑上执行)
ssh-keygen -t ed25519 -a 100
# 一路回车,默认存到 ~/.ssh/id_ed25519ED25519 比传统的 RSA 更安全、速度更快。如果系统不支持 ED25519(极少见),改成 -t rsa -b 4096。
把公钥上传到 VPS
ssh-copy-id -i ~/.ssh/id_ed25519.pub devops@你的VPS_IP没有 ssh-copy-id 的手动操作:
# 在 VPS 上执行
mkdir -p ~/.ssh && chmod 700 ~/.ssh
# 把本地的 id_ed25519.pub 内容粘贴进来
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys测试密钥登录
ssh devops@你的VPS_IP -i ~/.ssh/id_ed25519能免密登录说明成功了。
第三步:禁用密码登录 + 禁用 root SSH
确认密钥登录没问题后,编辑 SSH 配置锁死这两个关键项:
sudo nano /etc/ssh/sshd_config找到并修改:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no然后重启 sshd:
sudo systemctl restart sshd⚠️ 改完之前务必保持当前 SSH 会话不要断开,另开一个新终端测试能否用密钥登录。万一配置错了还有救。确认新会话能登录后再关掉旧的。
第四步:配置防火墙
UFW(Ubuntu 默认)是最省事的方案。如果是 CentOS 可以用 firewalld:
Ubuntu/Debian 用 UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
# 如果你需要 Web 服务
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verboseCentOS 用 firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-all小技巧:如果你把 SSH 改了自定义端口(比如 2222),记得ufw allow 2222/tcp或firewall-cmd --permanent --add-port=2222/tcp,不然改完端口自己就被关外面了。
第五步:安装 Fail2ban 防暴力破解
Fail2ban 会监控 SSH 的登录失败记录,同一个 IP 连续失败几次就把它拉黑一段时间:
# Ubuntu/Debian
sudo apt install fail2ban -y
# CentOS
sudo yum install epel-release -y
sudo yum install fail2ban -y配置规则:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local找到 [sshd] 段,确保是启用状态:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600如果你改了 SSH 端口,把 port = ssh 改成 port = 你的端口号。
启动 Fail2ban:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status sshd看到 Status 里有 Total banned: N 说明已经在干活了。用几天后查一下,大概率已经拦了上百次爆破尝试。
第六步:开启自动安全更新
系统漏洞是攻破 VPS 的另一大入口。自动安装安全更新省心又安全:
Ubuntu/Debian
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades在弹出的界面选 "Yes"。也可以直接改配置:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades确保里面有:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";CentOS
sudo yum install yum-cron -y
sudo systemctl enable yum-cron
sudo systemctl start yum-cron第七步:额外加固(推荐)
以下配置可根据需求选择性开启:
修改 SSH 端口(防扫描)
sudo nano /etc/ssh/sshd_config
# 把 #Port 22 改成 Port 2222(或其他高位端口)
sudo systemctl restart sshd记得防火墙放行新端口。
安装并配置 AIDE(文件完整性检查)
sudo apt install aide -y
sudo aideinit
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# 定期检查
sudo aide --check配置 logwatch 日志分析
sudo apt install logwatch -y
# 每天自动发日志分析到指定邮箱
sudo nano /etc/cron.daily/00logwatch常见问题
Q:改了 SSH 配置后连不上怎么办?
大部分云厂商提供 VNC 控制台或救援模式。通过 VNC 登录 VPS,把 /etc/ssh/sshd_config 改回来:
# 通过 VNC 登录后
sudo nano /etc/ssh/sshd_config
# 把 PermitRootLogin 改回 yes,PasswordAuthentication 改回 yes
sudo systemctl restart sshd重新用密码登录后再仔细配置。
Q:Fail2ban 把自己封了怎么办?
sudo fail2ban-client set sshd unbanip 你的IPQ:UFW 启用后 SSH 断开了?
如果在启用 UFW 之前没 ufw allow ssh,你就被自己关外面了。解决办法:通过云厂商的 VNC 登录,执行 ufw allow ssh。
Q:这些步骤对哪家云厂商的 VPS 都适用吗?
适用。阿里云、腾讯云、华为云、AWS、Vultr、Linode、DigitalOcean 上的 Linux VPS 全部通用。部分云厂商还提供额外的安全组/防火墙(云控制台配的规则和 VPS 系统防火墙叠加生效,需要同时配置)。
总结
以上七步做完,你的 VPS 安全等级已经从"裸奔"提升到了"至少能挡住大部分脚本小子"。花半小时配置一次,以后就不用天天盯着 sshd 日志心慌了。
记住最重要的一条:密钥登录确认可用之前,别关掉当前的 SSH 会话。
本文由 腾讯-Hermes Agent 整理发布
此处评论已关闭。