1.
初始检查与系统更新(先决条件)
- 登录:以管理员账号SSH登录(ssh user@your-server-ip),建议在台湾数据中心测试网络延迟。
- 更新系统:Debian/Ubuntu: sudo apt update && sudo apt -y upgrade;CentOS/RHEL: sudo yum update -y。
- 确认时间同步:sudo timedatectl set-ntp true;检查时区:timedatectl status。
2.
SSH 安全加固(步骤详解)
- 生成密钥:本地执行 ssh-keygen -t ed25519 -C "admin@domain"。
- 禁用密码登录:编辑 /etc/ssh/sshd_config,设置 PasswordAuthentication no、PermitRootLogin no、PubkeyAuthentication yes。保存后 sudo systemctl restart sshd。
- 更改默认端口(可选):在同文件修改 Port 2222 并更新防火墙规则;注意不要同时锁死自己。
3.
防火墙配置(iptables/ufw/firewalld)
- Ubuntu 推荐 ufw:sudo ufw default deny incoming; sudo ufw allow 2222/tcp; sudo ufw allow 80,443/tcp; sudo ufw enable。
- CentOS 使用 firewalld:sudo firewall-cmd --permanent --add-port=2222/tcp; sudo firewall-cmd --reload。
- 对外服务最小化,只开放必要端口,记录变更并纳入配置管理。
4.
入侵防护与自动封禁(fail2ban)
- 安装 fail2ban:Ubuntu: sudo apt install -y fail2ban;CentOS: sudo yum install -y epel-release && sudo yum install -y fail2ban。
- 配置:复制 /etc/fail2ban/jail.conf 到 /etc/fail2ban/jail.local,启用 sshd,调整 bantime、findtime、maxretry。重启:sudo systemctl restart fail2ban。
- 日志监控:sudo fail2ban-client status sshd,定期查看 /var/log/auth.log 或 /var/log/secure。
5.
最小权限与用户管理
- 创建管理用户:sudo adduser deploy && sudo usermod -aG sudo deploy。
- 限制 sudo:编辑 /etc/sudoers.d/deploy,只允许必要命令,避免 NOPASSWD unless required。
- 移除不必要账户与服务:sudo apt purge --auto-remove package;检查 systemctl list-unit-files | grep enabled。
6.
服务与应用层加固(Web/DB)
- Web(Nginx):启用 TLS,使用 Let's Encrypt:sudo apt install certbot python3-certbot-nginx;sudo certbot --nginx -d example.tw。
- 强制 HTTPS 并启用 HSTS、OCSP Stapling;在 nginx 配置设置 ssl_protocols TLSv1.2 TLSv1.3 且禁用弱 ciphers。
- 数据库(MySQL/MariaDB):绑定到内网 (bind-address = 127.0.0.1),为每个应用创建专用用户并严格赋权;定期执行 mysql_upgrade。
7.
强化内核与文件系统安全
- sysctl 调优:在 /etc/sysctl.d/99-hardening.conf 添加 net.ipv4.ip_forward=0、net.ipv4.conf.all.rp_filter=1 等,sudo sysctl --system。
- 启用 SELinux(CentOS)或 AppArmor(Ubuntu),检查并启用相关 profiles:sudo setenforce 1 或 sudo aa-enforce /etc/apparmor.d/*。
- 磁盘加密:对敏感数据使用 LUKS 或加密卷,记录恢复密钥并安全存放。
8.
日志管理与监控(集中化与告警)
- 安装并配置 rsyslog 或 filebeat,将日志发送到集中日志服务器或 ELK/EFK。
- 部署监控:Prometheus + Node Exporter 或 Zabbix,设置 CPU/IO/磁盘空间/网络阈值告警。
- 定期审计:建立每周日志审查并保存至少 90 天的关键日志。
9.
备份策略设计(5-3-2 原则示例)
- 原则:至少保留 5 份备份、3 个不同媒介、2 个地理位置(本地快照 + 台湾同区云快照 + 异地加密备份)。
- 频率:数据库每日全量/每小时增量;应用代码按部署打包;配置文件每日快照。
- 工具建议:数据库使用 mysqldump 或 Percona XtraBackup;文件/镜像使用 restic 或 borg;云卷使用提供商快照 API(如阿里云、腾讯云在台湾节点或可用区)。
10.
备份实现示例脚本(restic)
- 初始化仓库(远端 SFTP):export RESTIC_REPOSITORY=sftp:user@backup.example.tw:/path && export RESTIC_PASSWORD=YourPass && restic init。
- 备份脚本 /usr/local/bin/backup.sh:#!/bin/bash; restic -r $RESTIC_REPOSITORY backup /var/www /etc --tag webserver --verbose;并在 crontab 中每天 02:00 运行。
- 验证:restic -r $RESTIC_REPOSITORY snapshots;restic -r $RESTIC_REPOSITORY check。
11.
恢复演练与版本化恢复步骤
- 恢复步骤(文件示例):restic -r $RESTIC_REPOSITORY restore latest --target /restore-test,然后验证权限与服务。
- 数据库恢复示例:停止应用写入;mysql -u root -p < dump.sql;启动并核对数据一致性。
- 定期演练:每季度至少做一次完整恢复,记录耗时与问题,改进脚本与流程。
12.
审核与合规(台湾地区注意事项)
- 合规检查:根据个人资料保护法、公司内部政策审视敏感数据存放与传输加密。
- 访问记录:保存访问日志,启用多因素认证(MFA)用于控制台与备份管理账户。
- 文档化:将所有操作步骤、密钥保管流程、恢复 SOP 写入内部 Wiki 并定期更新。
13.
常见问:如何选择本地快照与对象存储备份的组合?
- 答:本地快照(云卷快照)恢复速度快,适合快速回滚;对象存储(S3/兼容)适合长期、异地与版本化备份。组合建议:保留 7 天本地快照 + 90 天对象存储版本,关键数据加密后上传。
14.
常见问:如何确保备份数据安全且可在灾难时恢复?
- 答:备份加密(restic/borg 内建),多地点存储,定期校验(checksum/restic check),并建立恢复演练记录。备份凭证与密钥离线保存,定期轮换密码。
15.
常见问:在台湾云主机上快速启动一次完整恢复演练的步骤?
- 答:1) 在测试环境部署干净实例;2) 从对象存储或快照恢复最近备份(restic restore / cloud snapshot create->attach->mount);3) 恢复数据库并启动服务;4) 验证应用功能与数据一致,记录问题并回写 SOP。
来源:台湾建服务器云主机安全加固与备份恢复策略操作手册