disposable-email-domainsのイベントソーシングアーキテクチャ:変更履歴と監査追跡

ディスポーザブル(使い捨て)メールドメインリストプロジェクト「disposable-email-domains」は、イベントソーシングアーキテクチャを採用し、ドメインリストの変更履歴と監査追跡を実現しています。本稿ではその仕組みと活用方法を解説します。

プロジェクトの概要

disposable-email-domainsは、一時的なメールアドレスに使用されるドメインを収集・管理するオープンソースプロジェクトです。主な構成ファイルは以下の通りです。

  • disposable_email_blocklist.conf: 検出されたディスポーザブルメールドメインのリスト
  • allowlist.conf: 除外対象のドメインリスト
  • fetch_domains.py: 外部ソースから新規ドメインを取得するスクリプト
  • maintain.sh: リスト管理・整形用シェルスクリプト

イベントソーシングの要素

プロジェクトのイベントソーシング的側面は、以下のコンポーネントで構成されています。

1. ドメイン収集機構

複数のFetcherクラスが各ソースからドメインを収集します。以下は登録例です。

FETCHERS = [
    YopmailFetcher(),
    TmailFetcher(),
    NoopmailFetcher(),
    YoursToolsFetcher(),
]

2. 差分更新と変更記録

fetch_domains.pyは既存リストと新規収集ドメインを比較し、差分のみを追加します。

existing = load_existing_domains(filename)
missing = new_domains - existing

実行時には以下のような変更詳細が出力されます。

Found 5 new domains to add from Yopmail:
  + temp1.com
  + discard2.net
  + throw3.org

3. リスト整形と監査

maintain.shがリストを小文字化、ソート、重複除去、allowlist除外処理します。

cat disposable_email_blocklist.conf | tr '[:upper:]' '[:lower:]' | sort -f | uniq -i > $TMPFILE
comm -23 $TMPFILE allowlist.conf > disposable_email_blocklist.conf

ドメイン検証フロー

新規ドメイン追加前に、以下の検証が行われます。

if is_valid_level_domain(dd, psl, psl_local) and not is_public_suffix(dd, psl, psl_local):
    filtered_domains.add(dd)

これにより、有効なセカンドレベルドメインのみが保持され、パブリックサフィックスやサブドメインが除外されます。

監査追跡の実践方法

以下の手法で変更履歴を監査できます。

  • Git管理: disposable_email_blocklist.confをGitで追跡し、コミット履歴で変更を可視化
  • ログ保存: fetch_domains.pyの出力ログを保持し、各実行時の追加ドメインを確認
  • 定期的なmaintain.sh実行: allowlist.confと組み合わせてリスト品質を維持

運用拡張案

  • cronによる定期実行: fetch_domains.pyを定期的に自動実行
  • カスタムFetcher追加: 新たなソースに対応するFetcherクラスを実装
  • 通知連携: 大量追加時に管理者へメール通知
  • 監査テーブル作成: 追加日時・ソース・件数を記録する別ファイルを生成

本プロジェクトのアーキテクチャは、簡潔ながら堅牢な変更追跡を実現しており、セキュリティ対策の基盤として有用です。

タグ: イベントソーシング disposable-email-domains メールセキュリティ Python シェルスクリプト

5月31日 09:33 投稿