ディスポーザブル(使い捨て)メールドメインリストプロジェクト「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クラスを実装
- 通知連携: 大量追加時に管理者へメール通知
- 監査テーブル作成: 追加日時・ソース・件数を記録する別ファイルを生成
本プロジェクトのアーキテクチャは、簡潔ながら堅牢な変更追跡を実現しており、セキュリティ対策の基盤として有用です。