Skip to content

アーキテクチャ設計 ​

SirrMesh は、柔軟で拡張可能なメールサーバーソリューションを提供するために、モジュラーアーキテクチャを採用しています。

全体アーキテクチャ ​

┌─────────────────────────────────────────────┐
│           クライアント層                     │
│  (Thunderbird, Outlook, モバイルアプリ)      │
└──────────────┬──────────────────────────────┘
               │
               ▼
┌─────────────────────────────────────────────┐
│           プロトコル層                       │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐    │
│  │  SMTP   │  │  IMAP   │  │Submission│    │
│  └─────────┘  └─────────┘  └─────────┘    │
└──────────────┬──────────────────────────────┘
               │
               ▼
┌─────────────────────────────────────────────┐
│           認証層                            │
│  ┌──────────┐  ┌─────┐  ┌─────┐  ┌──────┐ │
│  │Blockchain│  │LDAP │  │ PAM │  │Custom│ │
│  └──────────┘  └─────┘  └─────┘  └──────┘ │
└──────────────┬──────────────────────────────┘
               │
               ▼
┌─────────────────────────────────────────────┐
│           処理層                            │
│  ┌─────────┐  ┌──────┐  ┌─────────┐       │
│  │ フィルタ │  │ 変更 │  │ チェック │       │
│  │  (Sieve)│  │(DKIM)│  │(SPF/etc)│       │
│  └─────────┘  └──────┘  └─────────┘       │
└──────────────┬──────────────────────────────┘
               │
               ▼
┌─────────────────────────────────────────────┐
│           ストレージ層                       │
│  ┌──────────┐  ┌────────────┐             │
│  │データベース│  │ ストレージ  │             │
│  │(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 モジュールをサポート

メッセージ処理パイプライン ​

受信メール → スパムチェック → ウイルススキャン → フィルタールール
    ↓
DB に保存 ← DKIM 署名 ← コンテンツ変更 ← ユーザールール

ストレージシステム ​

データベース層 ​

  • ユーザーデータ: アカウント情報、クォータ、設定
  • メールメタデータ: 送信者、受信者、件名、タイムスタンプ
  • インデックス: 高速検索と取得

ファイルストレージ ​

  • Maildir フォーマット: メールごとに1つのファイル
  • 圧縮: 古いメールの自動圧縮
  • 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
}

パフォーマンス最適化 ​

並行モデル ​

  • Goroutine プール: 並行接続を処理
  • 非同期 I/O: ノンブロッキングネットワーク操作
  • バッチ処理: データベースバッチ操作

キャッシュ戦略 ​

  • 認証キャッシュ: ブロックチェーン RPC 呼び出しを削減
  • ユーザーデータキャッシュ: 頻繁に使用されるデータをメモリキャッシュ
  • DNS キャッシュ: DNS クエリを削減

コネクションプール ​

  • データベース接続プール: データベース接続を再利用
  • RPC 接続プール: ブロックチェーンノード接続の再利用

セキュリティ設計 ​

多層保護 ​

  1. ネットワーク層: TLS 暗号化
  2. 認証層: 多要素認証サポート
  3. アプリケーション層: 入力検証、SQL インジェクション保護
  4. データ層: 保存時の暗号化

レート制限 ​

  • 接続レート: 接続濫用を防止
  • 送信レート: スパムを防止
  • 認証試行: ブルートフォース攻撃を防止

スケーラビリティ ​

水平スケーリング ​

           ┌─────────────┐
           │ロードバランサ│
           └──────┬──────┘
                  │
        ┌─────────┼─────────┐
        ▼         ▼         ▼
    ┌──────┐  ┌──────┐  ┌──────┐
    │ノード│  │ノード│  │ノード│
    │  1   │  │  2   │  │  3   │
    └───┬──┘  └───┬──┘  └───┬──┘
        │         │         │
        └─────────┼─────────┘
                  ▼
         ┌────────────────┐
         │ 共有ストレージ  │
         │ (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.