⚡ 快速结论
新开通的VPS相当于"门窗敞开的房子"——公网上每天有数千到数万次自动化扫描和暴力破解尝试。按照本教程完成12步基础加固,只需要30分钟,就能把VPS被攻破的概率降低99%以上。
本教程适用于 Ubuntu 20.04/22.04/24.04 LTS、Debian 11/12,所有命令均经过实际测试,可直接复制使用。如果你用的是LuckVM,默认已开启基础DDoS防护,加固后更加安全。
为什么VPS安全如此重要?
很多人买了VPS第一件事就是装面板、部署网站,完全忽略安全配置。根据Verizon《2026年数据泄露调查报告》(DBIR):
- 勒索软件攻击涉及48%的确认数据泄露事件,且比例持续上升
- 82%的入侵利用了弱口令或默认凭据(如root直接密码登录)
- 未打补丁的已知漏洞是排名第一的入侵入口
- 一台暴露在公网的VPS,开通后几小时内就会开始被扫描和暴力破解
被黑的VPS可能被用于发送垃圾邮件、挖矿、发动DDoS攻击——不但数据丢失、服务中断,还可能被VPS厂商封禁账号甚至追究法律责任。

▲ 公网VPS每天面临的四类主要安全威胁
核心思路:五层防御体系
VPS安全不是靠某一个工具,而是多层防御叠加。即使一层被突破,还有下一层拦截。这是安全领域经典的"纵深防御"原则:

▲ VPS安全五层防御体系:从外到内层层拦截
- DDoS防护层(网络层):在流量到达服务器之前清洗恶意流量,需要VPS厂商支持
- 防火墙层(端口层):只开放必需端口,关闭所有其他入口
- 暴力破解防护层(行为层):Fail2ban自动封禁可疑IP
- 访问控制层(身份层):SSH密钥+最小权限,杜绝密码被猜
- 备份层(恢复层):即使前面全被突破,数据可以恢复——这是最后防线
12步安全加固实操
建议按顺序操作,每步完成后验证再进行下一步。
未打补丁的已知漏洞是最常见的入侵入口。登录VPS后第一件事就是更新所有软件包:
# Ubuntu/Debian 更新软件包列表并升级所有软件
sudo apt update && sudo apt upgrade -y
# 清理不需要的旧包
sudo apt autoremove -y && sudo apt autoclean
建议在升级完成后重启服务器,以加载新内核:
sudo reboot
root是Linux的超级管理员账户,权限最大,也是黑客第一个尝试暴力破解的目标。日常操作应该使用普通用户,需要管理员权限时通过sudo临时提升。
# 创建新用户(把 yourname 替换成你想要的用户名)
adduser yourname
# 将用户加入sudo组,获得管理员权限
usermod -aG sudo yourname
创建时会要求设置密码并填写一些信息(全填也行,直接回车跳过也行)。设置一个强密码(虽然后面会禁用密码登录,但sudo操作时还需要它)。
创建完成后,保持当前root会话不要断开,新开一个终端窗口用新用户登录测试:
ssh yourname@你的服务器IP
能登录并执行 sudo -v 不报错再继续下一步。
密码登录是最大的安全隐患——8位字母数字密码理论上几小时就能被暴力破解,而SSH密钥(尤其是Ed25519)几乎不可能被破解。
3.1 在本地电脑生成密钥对
在你的本地电脑(不是VPS上)执行:
# 生成Ed25519密钥(比传统RSA更安全更快速)
ssh-keygen -t ed25519 -C "your_email@example.com"
按提示操作,建议给私钥设置一个passphrase(密钥密码)以增加一层保护。生成后会得到两个文件:
~/.ssh/id_ed25519—— 私钥,保存在本地,绝不泄露给任何人~/.ssh/id_ed25519.pub—— 公钥,需要上传到VPS
3.2 上传公钥到VPS
最简单的方式:
# 在本地电脑执行,自动上传公钥
ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP
如果没有ssh-copy-id,可以手动操作:
# 在VPS上(用刚创建的yourname用户)执行
mkdir -p ~/.ssh && chmod 700 ~/.ssh
# 然后把本地公钥内容粘贴到 ~/.ssh/authorized_keys
nano ~/.ssh/authorized_keys
# 设置正确权限(非常重要,权限不对密钥登录会失败)
chmod 600 ~/.ssh/authorized_keys
3.3 测试密钥登录
新开终端窗口,不用输入密码就应该能直接登录:
ssh yourname@你的服务器IP
确认密钥登录没问题后,再修改SSH配置禁用密码登录和root登录。
# 备份原始配置(好习惯)
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 编辑SSH配置
sudo nano /etc/ssh/sshd_config
找到并修改以下配置项(如果不存在就添加):
# 禁用root用户直接登录
PermitRootLogin no
# 禁用密码认证(密钥登录确认正常后再开启!)
PasswordAuthentication no
# 禁用空密码
PermitEmptyPasswords no
# 只允许我们创建的用户登录(可选但推荐)
AllowUsers yourname
# 修改SSH默认端口(可选但推荐,减少90%暴力破解)
# 建议选10000-65535之间的端口,如 22222
Port 22222
# 限制最大认证尝试次数
MaxAuthTries 3
# 断开空闲会话(10分钟无操作自动断开)
ClientAliveInterval 600
ClientAliveCountMax 0
# 使用更安全的KexAlgorithms和MACs(可选,进一步加固)
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
保存退出后,先测试配置语法是否正确:
sudo sshd -t
没有输出说明配置正确。重启SSH服务:
sudo systemctl restart sshd
ssh -p 22222 yourname@服务器IP。确认能登录成功再关闭旧会话!UFW(Uncomplicated Firewall)是Ubuntu/Debian官方推荐的防火墙前端,简单易用。核心原则是:默认拒绝所有入站连接,只开放明确需要的端口。
# 安装UFW(通常已预装)
sudo apt install ufw -y
# 设置默认策略:拒绝所有入站,允许所有出站
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 放行SSH端口(注意要和你上一步设置的端口一致!)
sudo ufw allow 22222/tcp
# 放行HTTP和HTTPS(做网站需要)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 如果你需要其他服务(如FTP、邮件等),按需放行
# sudo ufw allow 25/tcp # SMTP邮件
# sudo ufw allow 3306/tcp # MySQL(不建议对外开放!)
# 启用防火墙
sudo ufw enable
# 查看状态确认规则
sudo ufw status verbose
关于IPv6:确认 /etc/default/ufw 中 IPV6=yes,否则IPv6端口不受防火墙保护。
Fail2ban监控系统日志,发现同一IP多次登录失败等异常行为时,自动调用防火墙封禁该IP一段时间。它是UFW静态规则的有力补充。
# 安装Fail2ban
sudo apt install fail2ban -y
# 创建本地配置(不要直接改jail.conf,更新会被覆盖)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 编辑SSH防护配置
sudo nano /etc/fail2ban/jail.d/sshd.local
写入以下内容(根据你的SSH端口修改port):
[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 10m
bantime = 1h
banaction = ufw
参数解释:
- maxretry = 3:10分钟内失败3次就封禁
- bantime = 1h:封禁1小时(生产环境可以设更长,如24h)
- banaction = ufw:通过UFW执行封禁
# 启动Fail2ban并设置开机自启
sudo systemctl enable fail2ban
sudo systemctl restart fail2ban
# 查看状态确认SSH jail已激活
sudo fail2ban-client status sshd
还可以配置针对Nginx登录、WordPress xmlrpc攻击等的防护规则,进阶配置请参考Fail2ban官方文档。
很多入侵利用的是已经发布补丁但管理员没有及时更新的漏洞。开启自动安全更新可以让系统第一时间安装安全补丁。
# 安装自动更新工具
sudo apt install unattended-upgrades apt-listchanges -y
# 启用自动安全更新
sudo dpkg-reconfigure -plow unattended-upgrades
选择"Yes"即可。默认配置会自动安装安全更新(security源),不会自动安装普通功能更新,非常安全。
可以编辑 /etc/apt/apt.conf.d/50unattended-upgrades 配置更详细的策略,比如自动重启、邮件通知等。
系统默认可能开启了一些你用不到的服务,每个运行的服务都是潜在的攻击面。
# 查看当前正在监听的端口
sudo ss -tulpn
# 查看所有已启用的系统服务
sudo systemctl list-unit-files --state=enabled
对于确认不需要的服务,禁用并停止:
# 禁用不需要的服务(根据实际情况选择)
# sudo systemctl disable --now rpcbind # RPC服务,不需要NFS就关掉
# sudo systemctl disable --now avahi-daemon # mDNS发现服务,VPS一般用不到
重要原则:数据库(MySQL/PostgreSQL/Redis)不要监听0.0.0.0,只绑定127.0.0.1,通过本地Socket或SSH隧道访问。检查配置文件中的bind-address设置。
时间不准确会导致日志错乱、TLS证书验证失败、计划任务错位等一系列问题。
# 设置时区为中国时区(根据需要调整)
sudo timedatectl set-timezone Asia/Shanghai
# 启用systemd时间同步(Ubuntu 20.04+默认已启用)
sudo timedatectl set-ntp true
# 验证时间同步状态
timedatectl status
不管防护做得多好,备份都是最后一道防线。没有做过还原测试的备份等于没有备份。
最简单的方案是用cron定时备份数据库和网站文件到异地(不要只备份在同一台VPS上!):
# 每天凌晨3点自动备份数据库(以MySQL/MariaDB为例)
# 先编辑crontab
sudo crontab -e
# 添加以下行(根据你的数据库密码和路径修改)
0 3 * * * mysqldump -u用户名 -p'密码' 数据库名 | gzip > /backup/wp_$(date +\%Y\%m\%d).sql.gz
# 保留最近30天备份,删除更早的
0 4 * * * find /backup -name "wp_*.sql.gz" -mtime +30 -delete
如果VPS上跑了网站,Web服务器本身也需要加固:
- 安装SSL证书:用Let's Encrypt免费证书,强制HTTPS跳转
- 隐藏版本号:在Nginx配置中加
server_tokens off; - 配置请求限流:防止CC攻击和暴力爬虫
- 禁用危险HTTP方法:只允许GET/POST/HEAD
- 设置安全响应头:HSTS、X-Frame-Options、X-Content-Type-Options等
- 配置fail2ban额外jail:监控Nginx 401/403/404异常频率
快速配置Let's Encrypt免费SSL证书(用Certbot):
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
# Certbot会自动配置HTTPS和自动续期
安全配置不是一次性工作,需要定期检查:
# 查看最近的SSH登录成功/失败记录
sudo lastb # 失败登录
sudo last # 成功登录
# 查看Fail2ban封禁记录
sudo fail2ban-client status sshd
sudo zgrep "Ban" /var/log/fail2ban.log*
# 查看UFW最近拦截的连接
sudo journalctl -u ufw -n 50
# 定期扫描rootkit(可选)
sudo apt install rkhunter -y
sudo rkhunter --check
建议每季度做一次完整的安全检查:检查用户列表、计划任务、开放端口、日志中有无异常活动。

▲ 完成以上12步,你的VPS安全加固就基本到位了
加固完成后快速验证清单
| 检查项 | 验证方法 | 期望结果 |
|---|---|---|
| root登录禁用 | ssh root@IP -p 端口 |
Permission denied |
| 密码登录禁用 | 用密码尝试SSH | Permission denied (publickey only) |
| 防火墙运行中 | sudo ufw status |
Status: active |
| Fail2ban运行中 | sudo systemctl status fail2ban |
active (running) |
| 无用端口已关闭 | sudo ss -tulpn |
只看到SSH/80/443等必要端口 |
| 自动更新启用 | apt-config dump APT::Periodic::Unattended-Upgrade |
"1" |
| 数据库不对外 | telnet IP 3306 从外网 | 连接超时/拒绝 |
| 备份正常运行 | 检查/backup目录是否有新备份 | 有最新日期的备份文件 |
常见错误和避坑提醒
坑1:改了SSH端口/禁用密码但没开防火墙新端口就重启——直接被锁在外面。解决:改任何SSH配置前保留一个会话,测试后再关闭。
坑2:私钥文件泄露到GitHub——很多人不小心把id_ed25519上传到公开仓库,几分钟内就会被黑客扫描利用。私钥永远不要上传任何地方。
坑3:只配置IPv4防火墙忘记IPv6——很多UFW规则默认IPv4生效,IPv6仍然全开放。确认 IPV6=yes 并检查 ufw status 包含v6规则。
坑4:数据库/Redis监听0.0.0.0——Redis、Elasticsearch等默认不设密码,一旦暴露在公网几小时内就会被黑客勒索。务必绑定127.0.0.1或设强密码。
坑5:密码写在脚本里明文存储——数据库密码、API密钥不要硬编码在脚本里提交到代码仓库。
选择一个本身安全的VPS很重要
安全加固是在操作系统层面的防护,但如果VPS厂商本身网络不安全(没有DDoS防护、宿主机漏洞、同租户攻击),加固再完善也可能受影响。
选择VPS时要关注厂商的安全能力:
- 是否提供免费DDoS基础防护(小流量攻击直接清洗,不用你自己折腾)
- 是否提供快照备份功能(一键回滚,被黑了快速恢复)
- 是否支持控制台/VNC登录(SSH被锁时可以救命)
- 是否提供防火墙安全组(在VPS外面再加一层防护)
LuckVM VPS —— 默认就考虑了安全的云主机 推荐
LuckVM所有节点(香港CN2 GIA、日本软银、韩国KT、新加坡、美国洛杉矶等40+全球节点)默认免费提供基础DDoS防护,开通即用。搭配本文的12步加固方案,可以构建从网络层到应用层的完整防护。
FAQ 常见问题
拿到新VPS后,最重要的安全设置依次是:1)更新系统软件包;2)创建非root普通用户并赋予sudo权限;3)配置SSH密钥登录并禁用密码登录、禁用root直接登录;4)修改SSH默认端口;5)配置UFW防火墙,只开放必需端口;6)安装Fail2ban防止暴力破解;7)启用自动安全更新。这七步完成后,服务器的安全性可以提升90%以上。
非常正常。暴露在公网上的VPS,22端口每天会收到数千到数万次暴力破解尝试,这是互联网上的自动化扫描工具在批量尝试,不是针对你个人。但这不意味着可以置之不理——一旦你的密码是弱密码,几分钟内就可能被攻破。正确做法是禁用密码登录改用SSH密钥、修改默认端口、安装Fail2ban自动封禁异常IP。
SSH密钥认证比密码登录安全得多(Ed25519密钥几乎不可能暴力破解),但不是绝对安全。你还需要:禁用密码登录、禁用root直接登录、保护好私钥文件(不要泄露、设置passphrase)、限制可登录用户。另外还要配合防火墙、Fail2ban、定期更新系统等多层防御。
基础安全加固(SSH密钥、防火墙、Fail2ban、自动更新)对性能影响可以忽略不计,占用CPU和内存都在1%以下。Fail2ban只是一个日志分析守护进程,非常轻量。真正可能影响性能的是WAF、入侵检测系统(IDS)等高级安全工具,个人站点一般不需要。
对于只跑Web服务的Linux VPS,一般不需要传统意义上的杀毒软件。Linux桌面病毒极少,服务器端威胁主要来自漏洞利用、弱口令、Web应用漏洞,这些靠加固和更新就能防御。如果是存放敏感数据的企业服务器,可以考虑rkhunter/chkrootkit等rootkit检测工具定期扫描。
DDoS防御不是在服务器上装软件就能解决的,需要在上游网络层清洗流量。建议:1)选择自带DDoS防护的VPS厂商(如LuckVM所有节点免费提供基础DDoS防护);2)使用Cloudflare等CDN隐藏源站IP;3)配置Nginx限流;4)大流量攻击时联系VPS厂商进行流量清洗或升级高防。
这是新手最常犯的错误。改SSH端口前务必:1)保留一个已登录的SSH会话不要断开;2)新开一个终端窗口测试新端口能登录后再关掉旧会话;3)确认防火墙放行了新端口。如果还是锁死了,可以通过VPS厂商提供的VNC控制台登录修复。
建议:1)系统安全更新设置为自动安装(每天检查);2)Fail2ban和防火墙配置一次后基本不用动;3)日志检查和备份恢复演练每季度做一次;4)重大漏洞预警(如CVE高危漏洞)出现时24小时内打补丁;5)每次新安装软件后检查有没有额外开放端口。
两者功能不同,都建议安装:UFW是静态防火墙,决定哪些端口对哪些IP开放(相当于房子哪些门可以进);Fail2ban是动态防御,监控日志发现异常行为(如连续5次SSH登录失败)就临时封禁该IP(相当于保安监控发现可疑人员就关起来)。两者配合使用效果最佳。
只开启安全更新(unattended-upgrades默认只装security源更新)是非常安全的,几乎不会导致服务中断。而不更新带来的被黑风险远远大于更新出问题的概率。对于特别重要的生产服务器,可以设置只通知不自动安装,然后定期在维护窗口手动更新并验证服务。
总结
VPS安全没有一劳永逸的银弹,但也没有想象中复杂。完成本文的12步基础加固,配合一个提供DDoS防护的可靠VPS厂商,已经可以抵御互联网上99%的自动化攻击。安全是一个持续的过程:保持系统更新、定期检查日志、做好备份、不使用弱密码——养成这些好习惯,你的服务器就会非常安全。
如果你还没有VPS,或者想换一个更安全、线路更好的服务商,可以试试 LuckVM Cloud VPS,香港CN2 GIA / 日本软银 / 韩国KT / 美国CN2等优质线路,月付仅$8.80起,自带免费DDoS防护和快照备份。





