大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
综合练习:网络与邮件运维实战
本课串联本 track 全部能力:SSH 登录 → 编辑配置 → Git 管理 → 脚本自动化 → SMTP/IMAP 测试 → DNS 认证验证。建议在 staging 虚拟机完成;涉及 networking-essentials、linux-essentials、git-essentials、dns-essentials 的对应课时作为前置。
学习目标
- 独立完成 「部署可发可信邮件的应用环境」 最小闭环
- 用分层思维(OSI)排障一次真实的邮件投递失败
- 输出可交付的 运维 runbook(Markdown,进 Git)
实验环境
| 组件 | 建议 |
|---|---|
| 虚拟机 | 1 台 Linux(Ubuntu 22.04+),公网 IP 或端口转发 |
| 域名 | staging.example.com 子域,DNS 可控 |
| 工具 | SSH 密钥、Git、swaks、dig、Vim/Nano |
| 可选 | SendGrid/SES 免费 tier 作 relay |
你的电脑 ──SSH:22──► staging 服务器
├── Postfix :587
├── Dovecot :993
└── Nginx :443(反向代理 / 健康页)
任务一:SSH 与基础加固(dnm-ssh)
- 生成 ED25519 密钥,
ssh-copy-id免密登录 - 禁用密码登录、禁止 root SSH(保留备用会话)
- 配置
~/.ssh/configHost 别名staging
验收:ssh staging 一键登录;/etc/ssh/sshd_config 中 PasswordAuthentication no。
任务二:配置版本化(dnm-vcs + dnm-editors)
- 创建
infra-stagingGit 仓库 - 纳入
postfix/main.cf、scripts/check-mail-ports.sh - 用 Vim 或 Nano 修改配置,commit 信息符合 git-essentials 规范
验收:git log --oneline 至少 3 条有意义 commit;git diff 可追踪配置变更。
任务三:邮件协议与认证(dnm-smtp / dnm-imap / dnm-auth-mail)
- 安装 Postfix + Dovecot,配置 relay 或本地发信
- DNS 添加 MX、SPF、DKIM、DMARC(dns-essentials)
-
swaks发测试信;openssl s_client测 IMAP 993 - mail-tester.com 得分 ≥ 8/10
验收:外域邮箱(Gmail/QQ)收件箱收到测试信,非垃圾箱。
任务四:脚本与定时任务(dnm-programming)
- 编写
check-mail-ports.sh(25/587/993,失败 exit 1) - 编写
check-dns-mail.sh(dig SPF + DMARC) - 添加 cron:每日备份 Postfix 配置与 Maildir
# 示例 cron
0 3 * * * /opt/infra/scripts/backup-mail.sh
*/10 * * * * /opt/infra/scripts/check-mail-ports.sh || logger "MAIL PORT CHECK FAILED"
验收:故意停 dovecot,脚本应失败;恢复后通过。
任务五:分层排障(dnm-osi)
模拟故障:邮件发不出。按 OSI 自下而上排查并记录:
# L3
ping mail.staging.example.com
# L4
nc -zv localhost 587
# L6
openssl s_client -connect localhost:587 -starttls smtp
# L7
swaks --to test@example.com --server localhost:587 --tls
# DNS
dig MX staging.example.com +short
dig TXT staging.example.com +short
# 日志
journalctl -u postfix --since "10 min ago"
交付:runbook 中「邮件发不出」章节,含 5 步 checklist 与常见根因。
Runbook 模板
# staging 邮件运维 Runbook
## 架构
(贴架构图)
## 日常巡检
- [ ] mailq 为空或 < 10
- [ ] check-mail-ports.sh
- [ ] 证书 expiry > 30 天
## 故障:发信失败
1. ...
2. ...
## 回滚
git checkout <tag> && ./scripts/deploy.sh
提交到 infra-staging 仓库 docs/runbook.md。
扩展挑战(可选)
- SFTP 部署静态页到 Nginx,HTTPS 用 Let's Encrypt
- 用 Python 写 SMTP 探测并接入 cron 告警邮件
- 对比 FTP vs SFTP 传 deploy 包,写 200 字选型说明(dnm-ftp)
小结
综合练习 = SSH 加固 + Git 管配置 + 邮件栈 + DNS 认证 + 脚本巡检 + 分层排障 runbook。 完成后你具备 DevOps 网络与邮件方向的 staging 级落地能力。回顾本 track:dnm-intro 能力地图。