AWS-EC2服务器操作、日志与安全规范
服务器操作、日志与安全规范
包含服务器操作手册 (SOP)、操作日志记录规范以及 SSH 密钥和凭证管理守则。
文档、规范与日志
为了确保服务器的稳定运行和可维护性,建立清晰的文档、遵循标准的操作规范以及记录关键操作至关重要。
核心文档与信息
- 服务器配置文档 (
initialize-aws-ec2-based-server.mdx): 作为服务器配置和架构的核心指南,应保持最新状态。记录所有关键配置、安装的服务、使用的端口、管理员用户名 (devadmin) 等。建议使用版本控制系统 (如 Git) 管理此文档。 - 网络架构图: 绘制清晰的网络拓扑图,展示 EC2 实例、ALB、安全组、VPC、子网以及它们之间的流量路径和端口。
- 备份与恢复计划: 详细记录备份策略(包括备份内容、频率、保留期、存储位置)和详细的恢复步骤。定期测试恢复流程以确保其有效性。
- 应急联系人: 明确记录负责此服务器维护和处理紧急情况的人员及其联系方式。
服务器操作手册 (SOP)
制定标准操作流程 (Standard Operating Procedures) 以规范常见任务,减少错误并提高效率。
-
SSH 访问:
- 密钥获取: 新管理员加入时,需生成新的 ED25519 或 RSA 4096 密钥对。公钥需由现有管理员添加到
/home/devadmin/.ssh/authorized_keys文件中。 - 连接: 必须使用
-i指定私钥文件,并通过指定的非标准 SSH 端口 (<你的SSH端口>) 连接。ssh -i <你的私钥文件> -p <你的SSH端口> devadmin@<服务器IP> - SSH Tunnel 使用:
- 明确需要访问哪个内部服务 (如 MongoDB, Redis, UI)。
- 使用
-L <本地端口>:127.0.0.1:<远程服务端口>建立隧道。 - 仅在需要访问时保持隧道开启,完成后立即关闭 (
Ctrl+C)。 - 严禁通过隧道暴露不必要的服务或端口。
- 权限:
devadmin用户拥有sudo权限,操作时务必谨慎。非必要不切换到root用户。
- 密钥获取: 新管理员加入时,需生成新的 ED25519 或 RSA 4096 密钥对。公钥需由现有管理员添加到
-
服务部署与更新:
- 代码部署: 推荐使用 Git 进行版本控制。通过 SSH 将代码克隆或拉取到服务器指定目录。
- Docker 服务更新:
- 拉取新镜像:
docker pull <镜像名>:<标签> - 停止并移除旧容器:
docker compose -f <compose文件> down或docker stop <容器名> && docker rm <容器名> - 使用 Compose 启动:
docker compose -f <compose文件> up -d - 验证: 检查容器日志 (
docker logs <容器名>) 和服务状态。
- 拉取新镜像:
- 系统更新: 定期执行
sudo dnf update -y(或使用自动化脚本)。更新后注意检查核心服务是否正常运行。
-
日志查看与分析:
- 系统日志:
/var/log/messages,/var/log/secure(SSH 登录等安全事件)。 - 服务日志:
journalctl -u <服务名>(例如journalctl -u sshd,journalctl -u firewalld,journalctl -u fail2ban,journalctl -u docker)。 - Docker 容器日志:
docker logs <容器名或ID>。 - 应用日志: 根据应用配置查看,通常位于应用目录下或
/var/log/<应用名>。 - 自动化脚本日志:
/var/log/auto_update.log,/var/log/docker_cleanup.log等。
- 系统日志:
-
故障排查:
- 检查服务状态:
systemctl status <服务名>,docker ps -a。 - 检查网络连接:
ping,traceroute,ss -tulnp(查看监听端口)。 - 检查防火墙规则:
sudo firewall-cmd --list-all(Firewalld), AWS 控制台安全组规则。 - 检查资源使用:
top,htop,df -h(磁盘空间),free -h(内存)。 - 分析相关日志: 根据故障现象定位并分析相关日志文件。
- 检查服务状态:
-
安全事件响应:
- 发现异常: 监控系统告警、检查 Fail2Ban 状态 (
sudo fail2ban-client status sshd)、审查安全日志。 - 隔离: 如有必要,修改安全组规则,暂时阻止可疑 IP 的访问。
- 分析: 确定攻击来源、方式和影响范围。
- 修复: 修复漏洞、清除恶意软件、修改受影响的凭证。
- 记录: 详细记录事件过程、分析结果和处理措施。
- 发现异常: 监控系统告警、检查 Fail2Ban 状态 (
操作日志 (Change & Action Log)
维护一份清晰的操作日志对于追踪变更、审计和故障排查至关重要。
-
记录内容:
- 时间: 操作发生的精确时间 (UTC 或服务器本地时间,需注明)。
- 操作人: 执行操作的管理员 (
devadmin)。 - 操作类型: 例如:配置变更、软件安装/更新、服务启动/停止、用户管理、安全事件处理、故障排查。
- 操作详情: 具体执行的命令、修改的文件、变更的内容摘要。
- 变更原因: 为什么进行此操作(例如:部署新功能、修复 Bug、安全加固、响应告警)。
- 影响范围: 变更可能影响的服务或系统组件。
- 回滚计划 (如适用): 如果操作失败,如何恢复到之前的状态。
- 结果: 操作是否成功,是否有预期之外的影响。
-
记录方式:
- 专用日志文件: 在服务器上维护一个文本文件 (例如
/var/log/admin_actions.log),严格控制访问权限。# 示例记录 echo "$(date '+%Y-%m-%d %H:%M:%S %Z') - devadmin - 配置变更 - 修改 /etc/ssh/sshd_config,将 ClientAliveInterval 改为 600 - 原因: 延长 SSH 空闲超时 - 影响: SSH 服务 - 回滚: 修改回 300 并重启 sshd - 结果: 成功" | sudo tee -a /var/log/admin_actions.log - 版本控制系统 (Git): 如果服务器配置 (如
/etc下的文件, Docker Compose 文件等) 通过 Git 管理,可以将操作详情记录在 Commit Message 中。 - 项目管理工具/Wiki: 对于复杂的变更或项目,可以在 JIRA, Confluence 或类似工具中记录。
- 专用日志文件: 在服务器上维护一个文本文件 (例如
-
频率: 所有对系统配置、关键服务、安全设置、用户权限的非自动化更改都应记录。日常的、自动化的任务(如 Cron 执行的脚本)只需记录其初始配置和重大修改。
密钥管理守则
SSH 密钥是访问服务器的主要凭证,必须严格管理。
-
密钥生成:
- 推荐算法: 使用
ED25519或RSA 4096。ssh-keygen -t ed25519 -C "your_email@example.com" # 或者 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" - 密码保护: 强烈建议为私钥设置强密码 (passphrase)。
- 推荐算法: 使用
-
私钥存储与保护 (本地):
- 存储位置: 通常存储在本地用户的
~/.ssh/目录下。 - 权限: 私钥文件权限必须设置为
600或400(chmod 600 ~/.ssh/id_ed25519)。 - 物理安全: 保护存储私钥的设备安全,防止丢失或被盗。
- 禁止共享: 绝对禁止与他人共享私钥文件或将其上传到任何公共或共享存储(包括代码仓库)。
- 存储位置: 通常存储在本地用户的
-
公钥管理 (服务器端):
- 文件: 公钥存储在服务器的
/home/devadmin/.ssh/authorized_keys文件中。 - 权限:
.ssh目录权限为700,authorized_keys文件权限为600。所有权必须是devadmin:devadmin。 - 添加: 新增公钥时,仔细核对,确保没有多余空格或换行。
- 移除: 当管理员离开或不再需要访问权限时,立即从
authorized_keys文件中移除其公钥。
- 文件: 公钥存储在服务器的
-
密钥轮换:
- 定期 (例如每年) 生成新的密钥对,并将新的公钥添加到服务器,移除旧的公钥。虽然 SSH 密钥本身不易被破解,但轮换有助于降低因私钥意外泄露带来的长期风险。
-
凭证管理工具:
- 对于其他服务密码 (如数据库密码、API 密钥等),应使用安全的密码管理器 (如 KeePassXC, 1Password, Bitwarden) 或 AWS Secrets Manager / Parameter Store 进行存储和管理。
- 严禁在代码、配置文件、文档或操作日志中硬编码或明文存储任何密码或私钥。