OVEROUTESOVEROUTES
首页
阅读须知
  • 总览
  • 选购要点
  • 协议详解
  • 客户端使用
  • 总览
  • 商家推荐
  • IP与线路科普
  • 选型与线路
  • 基础部署
  • 安全加固
主站
配置
首页
阅读须知
  • 总览
  • 选购要点
  • 协议详解
  • 客户端使用
  • 总览
  • 商家推荐
  • IP与线路科普
  • 选型与线路
  • 基础部署
  • 安全加固
主站
配置
  • VPS

    • VPS 总览
    • VPS 选购参考
    • IP 质量与线路入门
    • VPS 选型与线路
    • VPS 基础部署
    • VPS 安全加固

VPS 安全加固

安全加固是 VPS 运维中最容易被忽视但最重要的环节之一。一台暴露在公网上的服务器,从上线的那一刻起就会面临来自全球的扫描和攻击。本文将系统性地介绍 VPS 安全加固的核心实践。

威胁模型概述

了解你面对的威胁,才能有针对性地防御。一台普通 VPS 通常面临以下类型的攻击:

攻击类型说明严重程度
SSH 暴力破解自动化脚本不断尝试登录你的服务器高
端口扫描扫描开放端口,寻找可利用的服务中
DDoS 攻击大量流量淹没你的服务器,导致服务不可用高
应用层漏洞利用利用你部署的服务中的安全漏洞入侵高
供应链攻击通过被篡改的软件包或脚本植入后门中
社会工程通过钓鱼、欺骗等手段获取你的服务器访问权限中

SSH 深度加固

基础部署 中已经介绍了 SSH 的基本加固。这里进一步深入:

使用证书认证(高级)

除了传统的 SSH Key 认证,还可以使用 SSH 证书进行更精细的访问控制:

# 生成 CA 密钥对
ssh-keygen -t ed25519 -f /etc/ssh/ca_key -C "SSH CA"

# 用 CA 签发用户证书(有效期 30 天)
ssh-keygen -s /etc/ssh/ca_key -I user_name -n yourname -V +30d id_ed25519.pub

在 SSH 配置中启用证书认证:

# /etc/ssh/sshd_config
TrustedUserCAKeys /etc/ssh/ca_key.pub

端口敲门(Port Knocking)

端口敲门可以隐藏 SSH 端口,只有在"敲"了正确序列的端口后,SSH 端口才会开放:

# 安装 knockd
sudo apt install -y knockd

# 配置 /etc/knockd.conf
[options]
    UseSyslog

[openSSH]
    sequence    = 7000,8000,9000
    seq_timeout = 5
    command     = /usr/sbin/ufw allow from %IP% to any port 2222
    tcpflags    = syn

[closeSSH]
    sequence    = 9000,8000,7000
    seq_timeout = 5
    command     = /usr/sbin/ufw delete allow from %IP% to any port 2222
    tcpflags    = syn

使用时,先"敲门"再连接:

knock 你的服务器IP 7000 8000 9000
ssh yourname@你的服务器IP -p 2222

内核安全参数

通过内核参数增强网络安全性:

sudo vim /etc/sysctl.d/99-security.conf

添加以下内容:

# 防止 IP 欺骗
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 忽略 ICMP 广播请求(防止 Smurf 攻击)
net.ipv4.icmp_echo_ignore_broadcasts = 1

# 禁用 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# 启用 TCP SYN Cookie(防止 SYN Flood)
net.ipv4.tcp_syncookies = 1

# 禁用 IP 转发(如果不做路由器用途)
# 注意:如果你需要运行代理服务或 Docker,可能需要启用 IP 转发
# net.ipv4.ip_forward = 0

# 记录可疑的数据包
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

# 增强 TIME-WAIT 回收
net.ipv4.tcp_tw_reuse = 1

# IPv6 安全设置(如果不使用 IPv6,可以禁用)
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0

使配置生效:

sudo sysctl -p /etc/sysctl.d/99-security.conf

入侵检测

文件完整性监控

使用 AIDE(Advanced Intrusion Detection Environment)监控关键文件的变化:

# 安装 AIDE
sudo apt install -y aide

# 初始化数据库
sudo aideinit

# 复制数据库
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 手动检查
sudo aide --check

设置定时任务自动检查:

# 每天凌晨 3 点检查一次
echo "0 3 * * * root /usr/bin/aide --check | mail -s 'AIDE Report' your_email@example.com" | sudo tee /etc/cron.d/aide-check

实时日志监控

使用 logwatch 自动分析日志并发送报告:

sudo apt install -y logwatch

# 测试运行
sudo logwatch --detail High --mailto your_email@example.com --range today

应用安全

使用 Docker 隔离服务

将服务容器化可以有效限制攻击面:

# Docker 安全最佳实践
# 1. 不要使用 root 用户运行容器
# 2. 限制容器资源
# 3. 使用只读文件系统

docker run -d \
  --name my-service \
  --user 1000:1000 \
  --memory="256m" \
  --cpus="0.5" \
  --read-only \
  --restart=always \
  my-image

HTTPS 与 TLS 配置

所有对外暴露的 Web 服务都应使用 HTTPS:

# 使用 Certbot 自动获取 Let's Encrypt 证书
sudo apt install -y certbot
sudo certbot certonly --standalone -d yourdomain.com

# 设置自动续签
sudo systemctl enable certbot.timer

应急响应

如果你怀疑服务器已经被入侵,立即执行以下步骤:

  1. 不要恐慌——冷静地收集证据
  2. 检查登录记录:last 和 lastb 查看登录历史
  3. 检查异常进程:ps aux 和 top 查找可疑进程
  4. 检查网络连接:ss -tulnp 或 netstat -tulnp 查看异常连接
  5. 检查定时任务:crontab -l 和 /etc/cron*/ 目录
  6. 检查 SSH 密钥:确认 ~/.ssh/authorized_keys 中没有未知的公钥
  7. 检查系统用户:cat /etc/passwd 查找异常用户
  8. 保存日志:将 /var/log/ 下的关键日志备份到本地

如果确认被入侵:

  • 立即更改所有密码和 SSH Key
  • 从干净的镜像重新部署(不要在被入侵的系统上做修复)
  • 分析入侵途径,修补安全漏洞
  • 检查是否有数据泄露

安全检查清单

定期(建议每月一次)进行以下安全检查:

  • [ ] 系统和软件包已更新到最新版本
  • [ ] 没有异常的用户账号
  • [ ] SSH 配置没有被修改
  • [ ] 防火墙规则符合预期
  • [ ] Fail2Ban 正常运行
  • [ ] 没有异常的定时任务
  • [ ] 磁盘使用量正常
  • [ ] 网络流量没有异常
  • [ ] TLS 证书未过期
  • [ ] 备份正常执行
最近更新: 2026/4/8 09:50
Prev
VPS 基础部署