确认目标云主机系统(常见为Ubuntu/CentOS),取得root或有sudo权限的账户;准备一台管理主机用于运维;记录云厂商控制台API Key(如需自动化快照/创建实例)。
小分段:检查系统版本:lsb_release -a 或 cat /etc/os-release;更新系统:sudo apt update && sudo apt upgrade -y(Ubuntu),sudo yum update -y(CentOS)。
步骤1:禁止root直连并创建非root管理用户:adduser deploy && usermod -aG sudo deploy。步骤2:使用SSHKey登录:ssh-keygen -t ed25519;将公钥追加到~/.ssh/authorized_keys。
小分段:编辑 /etc/ssh/sshd_config 做出如下修改并重启sshd:PermitRootLogin no;PasswordAuthentication no;UsePAM yes;PubkeyAuthentication yes;Port 2222(可选自定义端口),sudo systemctl restart sshd。
使用ufw或iptables/ firewalld:示例(Ubuntu + ufw):sudo ufw default deny incoming;sudo ufw default allow outgoing;sudo ufw allow 2222/tcp;sudo ufw allow 80,443/tcp;sudo ufw enable。
小分段:若使用iptables,保存规则:iptables-save > /etc/iptables.rules,并在网络启动脚本中恢复。对管理IP做白名单:sudo ufw allow from x.x.x.x to any port 2222。
安装并配置fail2ban:sudo apt install fail2ban;在 /etc/fail2ban/jail.local 添加 sshd 规则,设置 bantime、maxretry、findtime。重启fail2ban:sudo systemctl restart fail2ban。
小分段:可启用双因素(Google Authenticator):sudo apt install libpam-google-authenticator;为deploy用户运行 google-authenticator,并在 /etc/pam.d/sshd 添加相应行,sshd_config 中 ChallengeResponseAuthentication yes。
Nginx最佳实践:关闭server_tokens(隐藏版本)、启用HTTPS并强制HSTS。示例:在 /etc/nginx/nginx.conf http {} 中加入 server_tokens off;,使用certbot获取证书:sudo certbot --nginx。
小分段:限制上传大小 client_max_body_size 10M;配置访问日志与错误日志轮转;为PHP-FPM设置独立用户、限制进程数并开启open_basedir。
集中化日志:安装rsyslog或fluentd,将关键日志(nginx、auth、syslog)推送到集中日志服务器或SaaS(ELK/Graylog)。设置Logrotate:/etc/logrotate.d自定义周期与压缩。
小分段:部署AIDE或OSSEC做文件完整性检测;设置Prometheus+Grafana监控主机指标并配置告警(磁盘、CPU、内存、异常流量)。
制定3-2-1规则:至少保留3份副本、2种介质、1份异地。工具可选restic/borg/rsync+tar或云快照。推荐restic(自带加密)或Borg(去重)。
小分段:示例restic初始化及备份:export RESTIC_REPOSITORY=sftp:backup@backup-host:/repo;export RESTIC_PASSWORD_FILE=/root/.restic_pw;restic init;restic backup /var/www /etc --tag siteA。
用cron或systemd timer自动化:示例每天凌晨2点备份restic:echo "0 2 * * * root /usr/bin/restic backup /var/www --tag siteA >/var/log/restic.log 2>&1" > /etc/cron.d/restic-siteA。并定期执行restic forget --prune保留策略。
小分段:每周做一次恢复演练(restore to temporary path)并验证网站完整性:restic restore latest --target /tmp/restore-siteA;验证数据库连接与文件权限。
发生事故时的标准操作:1)隔离受感染实例(断网或调整防火墙)2)从最新可信备份在新实例上恢复网站文件与数据库3)更新DNS TTL(提前降低TTL可加速切换)。
小分段:恢复示例(restic + MySQL):restic restore latest --target /var/www;导入数据库:mysql -u root -p dbname < /tmp/restore-db.sql;校验并重建缓存/队列服务,最后切换负载均衡流量到恢复实例。
问:针对高频更新的站群,备份频率如何设定才合理?
答:以站点变更频率和可接受数据丢失(RPO)为准。比如电商类建议数据库实时或每5分钟增量(使用binlog、wal或实时同步);文件类每日全量+每小时增量;日志可按天保留并异地压缩。对站群可分级:生产核心站RPO=5分钟,次级站RPO=1小时,静态站RPO=1天。
问:若某单站点被入侵,如何快速恢复到线上最小化影响?
答:事先准备金丝雀环境:预配置好标准镜像(OS+应用),并定期刷新镜像;发生时从最近可信快照/备份在新实例上恢复并修改数据库密码/应用密钥;通过负载均衡或DNS权重将流量切回新实例。快速恢复步骤要写成Playbook(Ansible/Chef)以实现分钟级恢复。
问:站群备份放到异地时如何做加密与合规控制?
答:在源端进行加密并仅传输密文,使用客户端加密工具(restic/borg/rebex)或rclone with --crypt;密钥管理采用KMS或离线密钥库,不将明文密钥放在备份节点。对台湾业务注意本地法规,若需在境外存储敏感数据,应评估数据主权、加密强度与访问日志并保留审计记录。