1.
在开始配置前,确认操作系统(Ubuntu/CentOS)版本、云提供商快照功能、以及是否有远程备份目标(另一个 VPS、对象存储或本地机房)。备份当前配置:sudo tar czf /root/config-backup-$(date +%F).tgz /etc/ssh/sshd_config /etc/fail2ban /etc/rsyslog.conf /etc/logrotate.d
准备至少两个管理账号:一个用于日常运维(非root)、一个紧急使用;并准备好本地SSH私钥。
2.
安装并更新:Ubuntu: sudo apt update && sudo apt install -y openssh-server; CentOS: sudo yum install -y openssh-server
编辑 /etc/ssh/sshd_config,推荐更改项并示例:
PermitRootLogin no PasswordAuthentication no ChallengeResponseAuthentication no UsePAM yes Port 2222 AllowUsers opsadmin youruser
重启SSH并测试:sudo systemctl restart sshd,然后从另一个会话使用:ssh -p 2222 youruser@server_ip -i ~/.ssh/id_rsa,确认能登录后再关闭旧会话。
3.
创建管理员用户并加入wheel/sudo组:sudo adduser opsadmin; sudo usermod -aG sudo opsadmin(Ubuntu)或 sudo usermod -aG wheel opsadmin(CentOS)。
设置公钥登录:在本地执行 ssh-copy-id -p 2222 opsadmin@server_ip 或手动将公钥写入 /home/opsadmin/.ssh/authorized_keys,权限确保为700/.ssh 和 600/authorized_keys。
4.
推荐使用 ufw 或 firewalld。Ubuntu/ufw 示例:
sudo apt install -y ufw sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 2222/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable
CentOS/firewalld 示例:
sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
5.
安装并配置 fail2ban(Ubuntu/CentOS 均适用):sudo apt install -y fail2ban 或 sudo yum install -y fail2ban
/etc/fail2ban/jail.local 示例:
[sshd] enabled = true port = 2222 filter = sshd logpath = /var/log/auth.log maxretry = 5 bantime = 3600
启动并启用:sudo systemctl enable --now fail2ban,查看状态 sudo fail2ban-client status sshd。
6.
选择备份目标:推荐远端对象存储(S3兼容)或另一台VPS。安装rsync与cron:sudo apt install -y rsync
示例增量备份脚本 /usr/local/bin/backup-site.sh:
#!/bin/bash DEST=backupuser@backup.example.com:/backups/vn-server rsync -az --delete --exclude='/proc' --exclude='/sys' --exclude='/tmp' /etc /var/www /home ${DEST}
给脚本授权并写cron:sudo chmod +x /usr/local/bin/backup-site.sh,然后 crontab -e 添加每天凌晨2点执行:
0 2 * * * /usr/local/bin/backup-site.sh >> /var/log/backup.log 2>&1
对象存储示例(使用 rclone):配置 rclone remote,执行:rclone sync /var/www remote:bucket/vn-server --checksum --log-file=/var/log/rclone-sync.log
并测试恢复:从备份目标拉回到临时目录,校验文件完整性与应用可用性。
7.
使用云商(如越南本地或国际云)提供的磁盘快照功能:在做大型升级前创建快照。示例流程:暂停服务->创建快照->执行变更->测试->如果失败通过控制台回滚到快照并启动。
如果使用LVM,可做卷快照:sudo lvcreate -L1G -s -n root_snap /dev/vg/root && mount /dev/vg/root_snap /mnt/snap 并复制数据以供离线备份。
8.
安装 rsyslog 并启用远端日志收集:在服务器 /etc/rsyslog.d/50-default.conf 添加:*.* @@logserver.example.com:514(双@表示TCP)。重启 rsyslog。
配置 logrotate 确保日志轮转与压缩,例如 /etc/logrotate.d/custom:
/var/log/backup.log { daily rotate 14 compress missingok notifempty create 640 root adm }
若需审计关键命令,安装 auditd:sudo apt install -y auditd,示例规则添加到 /etc/audit/rules.d/audit.rules(记录 /etc 变更、登录事件等)。
9.
部署监控(Prometheus + node_exporter,或云商自带监控),并配置基于磁盘使用、CPU、ssh登录失败次数的告警。示例:Prometheus node_exporter 部署后在Alertmanager中设置阈值告警并绑定到钉钉/邮件/Telegram。
定期演练恢复流程、检查备份日志并验证备份可用性是关键。
10.
问:我是否必须把SSH端口改成非22并禁用密码登录?
答:强烈建议禁用root和密码登录并使用密钥认证;改端口可以降低自动化扫描噪声但不是替代措施,需配合防火墙和fail2ban一起使用。
11.
问:服务器文件与数据库应如何设定备份频率和保留策略?
答:静态配置文件每日备份、数据库建议每日全量+每小时增量(或binlog),保留策略示例:最近7天保留每日全量,30天内保留周备份,长期归档到冷存储或对象存储以节约成本。
12.
问:将日志发送到第三方(或跨境)存储是否有合规风险?
答:必须根据所在国家/业务类型遵守数据主权与隐私法规,敏感日志需脱敏或加密传输(使用TLS),并在存储端设置访问控制与留存策略;如有疑问咨询法务。