搬瓦工VPS开通后暴露在公网上,立即会面临自动化扫描和攻击。安全加固不是可选项,而是必做的第一步。本文提供一套系统化的VPS安全加固方案,涵盖从SSH到应用层的全方位防护。
Tip: 安全加固应在部署业务之前完成。按照本文顺序逐步执行,每步完成后验证不影响正常使用。
安全加固的第一步是确保系统软件包都是最新版本:
# Ubuntu/Debian
apt update && apt upgrade -y
# CentOS
dnf update -y
# 配置自动安全更新
apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades
配置自动安全更新策略:
# 编辑 /etc/apt/apt.conf.d/50unattended-upgrades
# 确保以下行未被注释:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
# 可选:自动重启(如果安全更新需要)
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
SSH是VPS最常被攻击的入口,必须严格加固:
# /etc/ssh/sshd_config 关键配置
# 修改默认端口
Port 2222
# 仅使用SSH协议2
Protocol 2
# 禁用密码登录,使用密钥认证
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
# 限制登录
MaxAuthTries 3
LoginGraceTime 30
MaxSessions 3
# 禁用不需要的功能
X11Forwarding no
PermitEmptyPasswords no
AllowTcpForwarding no
# 应用配置
systemctl restart sshd
详细的SSH密钥配置请参考SSH密钥登录教程。
使用UFW配置基本防火墙规则:
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp # SSH(修改后的端口)
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw limit 2222/tcp # SSH限速
ufw enable
详细的防火墙配置请参考UFW/iptables配置教程。
apt install fail2ban -y
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 86400
EOF
systemctl restart fail2ban
systemctl enable fail2ban
详细配置请参考Fail2ban安装教程。
日常操作不应使用root账户,创建一个具有sudo权限的普通用户:
# 创建用户
adduser deploy
# 添加到sudo组
usermod -aG sudo deploy
# 为新用户配置SSH密钥
mkdir -p /home/deploy/.ssh
cp /root/.ssh/authorized_keys /home/deploy/.ssh/
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys
# 测试新用户登录成功后,可以在sshd_config中限制允许登录的用户
# AllowUsers deploy
定期扫描系统是否被植入Rootkit或恶意程序:
# 安装rkhunter(Rootkit Hunter)
apt install rkhunter -y
# 更新数据库
rkhunter --update
# 执行扫描
rkhunter --check --skip-keypress
# 安装chkrootkit
apt install chkrootkit -y
# 执行扫描
chkrootkit
# 安装ClamAV杀毒
apt install clamav clamav-daemon -y
freshclam # 更新病毒库
clamscan -r /var/www/ # 扫描网站目录
clamscan -r --remove /tmp/ # 扫描并删除恶意文件
设置每周自动扫描:
# 添加到crontab
crontab -e
0 3 * * 0 /usr/bin/rkhunter --check --skip-keypress --report-warnings-only | mail -s "rkhunter weekly scan" admin@example.com
使用AIDE(Advanced Intrusion Detection Environment)监控关键文件变化:
# 安装AIDE
apt install aide -y
# 初始化数据库
aideinit
cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# 手动检查文件变化
aide --check
# 设置每日自动检查
crontab -e
0 5 * * * /usr/bin/aide --check
定期查看关键日志发现异常:
# SSH登录日志
tail -100 /var/log/auth.log | grep -i "failed\|accepted\|invalid"
# 查看最近成功登录的IP
last -20
# 查看当前登录用户
w
who
# 系统日志
journalctl -p err -b # 当前启动后的错误日志
journalctl --since "1 hour ago"
# 检查可疑的crontab任务
crontab -l
ls -la /etc/cron.d/
cat /etc/crontab
# 检查异常的监听端口
ss -tlnp
# 对比预期的服务端口,发现意外开放的端口
# 检查异常进程
ps aux --sort=-%cpu | head -20
ps aux --sort=-%mem | head -20
VPS安全加固的完整检查清单:
相关教程:SSH密钥登录 | 防火墙配置 | Fail2ban安装 | 自动备份方案
Tip: 更多教程请查看新手教程。