欢迎光临
我们一直在努力

VPS安全加固实战指南:从零搭建企业级防护体系

VPS(Virtual Private Server)是众多开发者、站长和企业部署服务的首选。然而,购买VPS后,如果仅保持默认配置就上线,无异于将服务器大门敞开。根据Shodan和Censys的扫描数据,互联网上平均每分钟有超过2000次针对22端口的扫描尝试。本文将手把手教你从零开始,搭建一套企业级的VPS安全防护体系,覆盖防火墙、SSH加固、入侵检测、日志审计、内核参数优化等核心环节。

网络安全概念图

一、SSH远程连接安全加固

SSH是VPS管理的生命线,也是最常被暴力破解的攻击面。以下措施能极大提升SSH的安全性。

1.1 修改默认端口与禁用root登录

将SSH默认的22端口改为高位端口(如2222、10022),可以过滤掉绝大多数自动化扫描攻击。同时禁用root直接登录,使用普通用户+sudo方式管理。

# 编辑SSH配置文件
sudo vim /etc/ssh/sshd_config

# 修改以下配置项
Port 2222
PermitRootLogin no
PasswordAuthentication yes  # 如使用密钥认证可设为no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

# 重启SSH服务
sudo systemctl restart sshd

# 注意:修改端口后需同步放行防火墙,否则会被锁在门外!

1.2 配置SSH密钥认证

密钥认证比密码认证安全得多,2048位以上的RSA/Ed25519密钥几乎无法被暴力破解。

# 在本地机器生成密钥对(不要设置密码短语可免密登录,但建议设置)
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/vps_key

# 将公钥上传到VPS
ssh-copy-id -i ~/.ssh/vps_key.pub -p 2222 user@your-vps-ip

# 测试密钥登录
ssh -i ~/.ssh/vps_key -p 2222 user@your-vps-ip

# 确认密钥登录正常后,关闭密码登录
# 在 /etc/ssh/sshd_config 中设置:
PasswordAuthentication no
ChallengeResponseAuthentication no

1.3 安装Fail2ban阻止暴力破解

Fail2ban通过分析日志文件,发现多次认证失败后自动将来源IP加入防火墙黑名单,能有效阻止暴力破解和字典攻击。

# 安装Fail2ban
dnf install -y epel-release   # CentOS/RHEL
sudo apt install fail2ban -y  # Debian/Ubuntu

# 配置Fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local

# 添加SSH规则(如果修改了端口要同步更改)
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600

# 启动并设置开机自启
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# 查看封禁状态
sudo fail2ban-client status sshd

实战说明:bantime=3600表示封禁1小时,maxretry=5表示5次失败即触发封禁。对于生产环境,建议初始设置为24小时(86400秒),后续可根据实际威胁情况调整。

防火墙安全

二、iptables/nftables防火墙策略

防火墙是服务器的第一道防线。现代Linux系统推荐使用nftables,但iptables仍被广泛支持。我们以nftables为例配置精细化访问控制策略。

2.1 安装与基础配置

# 检查nftables是否已安装
sudo nft list ruleset

# 如未安装
sudo apt install nftables -y

# 编写防火墙规则脚本
sudo vim /etc/nftables.conf
#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;

        # 允许已建立和相关的连接
        ct state established,related accept

        # 允许环回接口
        iif lo accept

        # 允许ICMP(ping)
        ip protocol icmp accept
        ip6 protocol icmpv6 accept

        # SSH(修改为你的端口)
        tcp dport 2222 accept

        # HTTP/HTTPS(Web服务器)
        tcp dport {80, 443} accept

        # DNS
        udp dport 53 accept

        # 限制SSH连接频率(每分钟最多5个新连接)
        tcp dport 2222 meter ssh-meter { ip saddr limit rate 5/minute } accept

        # 记录并丢弃其他所有入站流量
        log prefix "NFTABLES-DROP: " limit rate 3/minute
        reject
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}

# 应用规则
sudo nft -f /etc/nftables.conf

# 启用开机自启
sudo systemctl enable nftables

2.2 防止DDoS攻击的基本规则

在nftables中添加连接跟踪和速率限制,可以减轻DDoS攻击的影响:

# 添加SYN洪水防护
tcp flags syn tcp option maxseg size 1-536 drop

# 限制同一IP的并发连接数
tcp dport 80 meter http-meter { ip saddr ct count over 100 } reject

# 限制每个IP的新建连接速率
tcp dport 80 meter http-rate { ip saddr limit rate 30/second burst 50 } accept
攻击类型 防护策略 效果
SYN Flood synproxy + 速率限制 有效防御95%以上
UDP Flood 按端口限制速率 降低80%影响
HTTP Flood 连接数限制 + WAF 需多层配合
端口扫描 端口敲门 + 隐藏端口 完全屏蔽扫描

三、系统级安全加固

3.1 内核参数优化

通过调整sysctl参数可以增强网络栈的安全性:

# 编辑 /etc/sysctl.conf 或 /etc/sysctl.d/99-security.conf

# 禁用IP转发(如果不需要路由功能)
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0

# 防止SYN洪水攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2

# 减少TIME_WAIT连接数
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1

# 忽略ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

# 忽略源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0

# 开启反向路径过滤(防IP欺骗)
net.ipv4.conf.all.rp_filter = 1

# 记录马丁攻击
net.ipv4.conf.all.log_martians = 1

# 应用配置
sudo sysctl -p /etc/sysctl.conf

3.2 文件和目录权限管理

严格限制敏感文件的访问权限是安全基线的一部分:

# SSH相关
sudo chmod 700 ~/.ssh
sudo chmod 600 ~/.ssh/authorized_keys
sudo chmod 644 ~/.ssh/known_hosts

# 系统关键文件
sudo chmod 640 /etc/shadow
sudo chmod 644 /etc/passwd
sudo chmod 600 /etc/ssh/sshd_config

# 日志文件权限
sudo chmod 640 /var/log/auth.log
sudo chmod 640 /var/log/syslog

# 使用AIDE做文件完整性检查(可选)
sudo apt install aide -y
sudo aideinit
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# 每日检查
sudo crontab -e
# 添加:0 6 * * * /usr/bin/aide --check | mail -s "AIDE Report" admin@example.com

服务器安全锁

四、入侵检测与日志审计

4.1 安装Lynis安全审计工具

Lynis是开源的安全审计工具,可以扫描系统中的安全漏洞并给出修复建议:

# 安装Lynis
wget https://downloads.cisofy.com/lynis/lynis-3.1.1.tar.gz
tar xzf lynis-3.1.1.tar.gz
cd lynis

# 执行审计(不需要root也能运行,但root权限能检测更多项目)
sudo ./lynis audit system

# 查看结果汇总
sudo ./lynis audit system --quick

# Lynis会输出 Hardening Index 分数,目标是70分以上

4.2 安装osquery实现实时监控

osquery将操作系统视为数据库,可以用SQL查询系统状态,非常适合做安全监控:

# 安装osquery
curl -L https://osquery.io/downloads/official/5.12.0/osquery-5.12.0_1.linux_x86_64.tar.gz | tar xz
sudo mv osquery-5.12.0 /usr/local/osquery

# 配置自动监控
sudo vim /etc/osquery/osquery.conf

{
  "options": {
    "pidfile": "/var/osquery/osquery.pid",
    "database_path": "/var/osquery/osquery.db"
  },
  "schedule": {
    "process_events": {
      "query": "SELECT pid, name, path, cmdline FROM processes;",
      "interval": 300
    },
    "listening_ports": {
      "query": "SELECT pid, port, address, protocol FROM listening_ports;",
      "interval": 600
    },
    "suspicious_cron": {
      "query": "SELECT * FROM crontab WHERE command LIKE '%wget%' OR command LIKE '%curl%' OR command LIKE '%chmod +x%';",
      "interval": 3600
    }
  },
  "file_paths": {
    "ssh_keys": ["/root/.ssh/authorized_keys", "/home/%/.ssh/authorized_keys"],
    "web_config": ["/etc/nginx/nginx.conf", "/etc/apache2/apache2.conf"]
  }
}

4.3 日志集中管理

分散的日志难以审计,建议使用rsyslog将日志发送到集中日志服务器,或使用logwatch生成每日摘要:

# 安装logwatch生成每日安全报告
sudo apt install logwatch -y

# 配置每天凌晨发送报告
sudo vim /etc/cron.daily/00logwatch

#!/bin/bash
/usr/sbin/logwatch --output mail --mailto admin@example.com --detail high --service All --range today

# 手动测试
sudo logwatch --detail high --service All --range today

五、自动化安全运维脚本

将以上安全措施整合为一个自动部署脚本,方便批量部署到多台VPS:

#!/bin/bash
# VPS安全一键加固脚本
# 用法:bash vps_harden.sh [SSH_PORT]

SSH_PORT=${1:-2222}

# 1. 更新系统
apt update && apt upgrade -y

# 2. 创建普通用户
if ! id deploy &>/dev/null; then
    useradd -m -s /bin/bash deploy
    echo "deploy ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
    mkdir -p /home/deploy/.ssh
    chmod 700 /home/deploy/.ssh
fi

# 3. SSH安全加固
sed -i "s/^#Port 22/Port $SSH_PORT/" /etc/ssh/sshd_config
sed -i "s/^PermitRootLogin yes/PermitRootLogin no/" /etc/ssh/sshd_config
sed -i "s/^#PasswordAuthentication yes/PasswordAuthentication no/" /etc/ssh/sshd_config
systemctl restart sshd

# 4. 安装Fail2ban
apt install fail2ban -y
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sed -i "s/^port = ssh/port = $SSH_PORT/" /etc/fail2ban/jail.local
systemctl enable fail2ban && systemctl start fail2ban

# 5. 配置nftables
apt install nftables -y
nft -f /etc/nftables.conf
systemctl enable nftables

# 6. 内核安全参数
echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf
sysctl -p

# 7. 自动安全更新
apt install unattended-upgrades -y
dpkg-reconfigure --priority=low unattended-upgrades

echo "✅ VPS安全加固完成!"
echo "⚠️  请将本地公钥添加到 /home/deploy/.ssh/authorized_keys"
echo "⚠️  使用 ssh deploy@IP -p $SSH_PORT 登录"

六、持续安全运维要点

  1. 定期更新:设置unattended-upgrades自动安装安全补丁,每周手动检查一次完整更新
  2. 端口管理:只开放必要的端口,定期用nmap扫描检查暴露面
  3. 备份策略:采用3-2-1备份原则(3份副本,2种介质,1份异地),使用rclone同步到对象存储
  4. 监控报警:配置Prometheus + Grafana或Netdata监控系统指标,超出阈值时通过Telegram/邮件报警
  5. 定期渗透:每季度使用Lynis和OpenVAS进行安全扫描,修补发现的风险
  6. 最小权限:应用服务使用独立用户运行,不给予不必要的权限
  7. WAF防护:如搭建Web服务,建议前置Nginx + ModSecurity或Cloudflare WAF

总结

VPS安全不是一次性配置就能一劳永逸的,而是一个持续演进的过程。本文从SSH加固、防火墙策略、系统内核优化、入侵检测、日志审计到自动化部署,覆盖了VPS安全的主要环节。按照本文步骤操作后,你的VPS将具备抵御绝大多数自动化攻击的能力,安全等级可以达到中等偏上的水平。

在实际运维中,请记住:安全配置越严格,使用越不便,需要在安全性和便利性之间找到平衡点。建议先在测试机上验证所有配置,确认无误后再应用到生产环境。如果首次配置时被锁在门外,可以通过VPS厂商的VNC/控制台面板进入恢复模式修复配置。

最后,推荐大家关注CVE漏洞公告(https://cve.mitre.org)和所在发行版的安全公告。网络安全是一场持久的攻防战,保持学习和警惕是最好的防御策略。

【本站文章皆为原创,未经允许不得转载】:汤不热吧 » VPS安全加固实战指南:从零搭建企业级防护体系
分享到: 更多 (0)