Skip to content

架构设计 ​

SirrMesh 采用模块化架构,提供灵活、可扩展的邮件服务器解决方案。

整体架构 ​

┌─────────────────────────────────────────────┐
│           客户端层                          │
│  (Thunderbird, Outlook, 移动应用)           │
└──────────────┬──────────────────────────────┘
               │
               ▼
┌─────────────────────────────────────────────┐
│           协议层                            │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐    │
│  │  SMTP   │  │  IMAP   │  │Submission│    │
│  └─────────┘  └─────────┘  └─────────┘    │
└──────────────┬──────────────────────────────┘
               │
               ▼
┌─────────────────────────────────────────────┐
│           认证层                            │
│  ┌──────────┐  ┌─────┐  ┌─────┐  ┌──────┐ │
│  │Blockchain│  │LDAP │  │ PAM │  │Custom│ │
│  └──────────┘  └─────┘  └─────┘  └──────┘ │
└──────────────┬──────────────────────────────┘
               │
               ▼
┌─────────────────────────────────────────────┐
│           处理层                            │
│  ┌─────────┐  ┌──────┐  ┌─────────┐       │
│  │  Filter │  │Modify│  │  Check  │       │
│  │  (Sieve)│  │(DKIM)│  │(SPF/etc)│       │
│  └─────────┘  └──────┘  └─────────┘       │
└──────────────┬──────────────────────────────┘
               │
               ▼
┌─────────────────────────────────────────────┐
│           存储层                            │
│  ┌──────────┐  ┌────────────┐             │
│  │ Database │  │  Storage   │             │
│  │(PG/MySQL)│  │(Local/S3)  │             │
│  └──────────┘  └────────────┘             │
└─────────────────────────────────────────────┘

核心组件 ​

协议处理器 ​

SMTP 服务器 ​

  • 接收和发送邮件
  • 支持 STARTTLS 加密
  • 实现速率限制和反垃圾邮件措施

IMAP 服务器 ​

  • 邮件存储和检索
  • 文件夹管理
  • 邮件搜索功能
  • 支持 IDLE 推送通知

Submission 服务器 ​

  • 邮件提交(端口 587)
  • 强制认证
  • 自动 DKIM 签名

认证模块 ​

区块链认证 ​

go
type BlockchainAuth struct {
    networks map[string]RPCClient
    cache    *AuthCache
}

func (b *BlockchainAuth) Verify(address, signature, message string) bool {
    // 1. 恢复签名者地址
    // 2. 验证地址匹配
    // 3. 检查时间戳有效性
    return verified
}

LDAP 认证 ​

  • 支持 Active Directory
  • 组织单元(OU)映射
  • 属性同步

PAM 认证 ​

  • 系统账户集成
  • 支持各种 PAM 模块

消息处理流水线 ​

收到邮件 → 反垃圾检查 → 病毒扫描 → 过滤规则
    ↓
存储到数据库 ← DKIM签名 ← 内容修改 ← 用户规则

存储系统 ​

数据库层 ​

  • 用户数据: 账户信息、配额、设置
  • 邮件元数据: 发件人、收件人、主题、时间
  • 索引: 快速搜索和检索

文件存储 ​

  • Maildir格式: 每封邮件一个文件
  • 压缩: 自动压缩旧邮件
  • S3兼容: 可扩展到云存储

数据流 ​

发送邮件流程 ​

1. 客户端连接 (SMTP/Submission)
   ↓
2. 认证验证
   ↓
3. 接收邮件内容
   ↓
4. 验证收件人
   ↓
5. 应用过滤规则
   ↓
6. DKIM 签名
   ↓
7. 队列处理
   ↓
8. 发送到目标服务器

接收邮件流程 ​

1. 外部服务器连接
   ↓
2. SPF/DKIM/DMARC 检查
   ↓
3. 反垃圾邮件检查
   ↓
4. 应用用户规则(Sieve)
   ↓
5. 存储到数据库
   ↓
6. 保存邮件文件
   ↓
7. 通知客户端(IMAP IDLE)

模块系统 ​

核心模块 ​

  • auth: 认证提供商
  • storage: 存储后端
  • filter: 邮件过滤
  • modify: 内容修改
  • check: 验证检查

扩展点 ​

go
type Module interface {
    Name() string
    Init(config Config) error
    Process(ctx Context, msg *Message) error
}

性能优化 ​

并发模型 ​

  • 协程池: 处理并发连接
  • 异步IO: 非阻塞网络操作
  • 批量处理: 数据库批量操作

缓存策略 ​

  • 认证缓存: 减少区块链 RPC 调用
  • 用户数据缓存: 常用数据内存缓存
  • DNS缓存: 减少 DNS 查询

连接池 ​

  • 数据库连接池: 复用数据库连接
  • RPC连接池: 区块链节点连接复用

安全设计 ​

多层防护 ​

  1. 网络层: TLS 加密
  2. 认证层: 多因素认证支持
  3. 应用层: 输入验证、SQL注入防护
  4. 数据层: 静态数据加密

速率限制 ​

  • 连接速率: 防止连接滥用
  • 发送速率: 防止垃圾邮件
  • 认证尝试: 防止暴力破解

可扩展性 ​

水平扩展 ​

           ┌─────────────┐
           │Load Balancer│
           └──────┬──────┘
                  │
        ┌─────────┼─────────┐
        ▼         ▼         ▼
    ┌──────┐  ┌──────┐  ┌──────┐
    │ Node │  │ Node │  │ Node │
    │  1   │  │  2   │  │  3   │
    └───┬──┘  └───┬──┘  └───┬──┘
        │         │         │
        └─────────┼─────────┘
                  ▼
         ┌────────────────┐
         │  Shared Storage│
         │  (Database/S3) │
         └────────────────┘

组件分离 ​

  • 独立部署: SMTP、IMAP 可单独扩展
  • 共享存储: 多实例共享数据
  • 负载均衡: 智能流量分配

监控和日志 ​

指标收集 ​

  • 系统指标: CPU、内存、磁盘
  • 应用指标: 邮件吞吐量、延迟
  • 业务指标: 用户活跃度、存储使用

日志系统 ​

应用日志 → 结构化输出 → 日志聚合 → 分析平台
                         (ELK/Loki)

高可用性 ​

故障转移 ​

  • 主从复制: 数据库主从配置
  • 自动切换: 健康检查和自动故障转移
  • 数据备份: 定期备份和恢复测试

健康检查 ​

go
type HealthCheck struct {
    Database  bool
    SMTP      bool
    IMAP      bool
    Storage   bool
}

更多技术细节:

Released under the GPL 3.0 License.