mcpField
P
Parse-DMARC MCP Server

Parse-DMARC MCP Server

ローカル
github.comセキュリティ223今日更新

Parse-DMARC MCP Server について

Parse DMARCは、DMARC集計レポートを監視するチーム向けのセルフホスト型ダッシュボードです。レポートを取得してSQLiteに保存し、コンプライアンスを表示するほか、MCP経由の照会にも対応します。

主な機能

  1. 01IMAPとMaildirからのレポート取得
  2. 02gzip、zip、XMLの解析
  3. 03SQLiteへのレポート保存
  4. 04コンプライアンス表示とレポート詳細
  5. 05PrometheusメトリクスとGrafanaダッシュボード
  6. 06DMARCレコードの生成

活用シーン

  1. 01送信元とSPF・DKIMの結果確認
  2. 02集計レポートによるドメイン準拠状況の追跡
  3. 03AIアシスタントからのレポート照会

MCP 対応

MCPサーバーは、統計情報やレポート解析を含む9種類のツールをAIアシスタントに公開します。stdioとHTTPに対応し、OAuth2も任意で利用できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"meysam81-parse-dmarc": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/meysam81/parse-dmarc:v1.4.7"
]
}
}
}
起動コマンドdocker run -i --rm ghcr.io/meysam81/parse-dmarc:v1.4.7

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/meysam81/parse-dmarc:v1.4.7

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

DMARC の解析

CI Release License Stars Docker pulls old Docker pulls new Image size

DMARC 集計レポートをひとつのダッシュボードで確認できます。Go のバイナリは 1 つ、SQLite を使用し、Elasticsearch は不要です。

Parse DMARC は、ホスト型 DMARC 監視サービス DMARCguard を提供するチームが開発・保守しています。両者はコードを共有しておらず、このリポジトリ全体は Apache-2.0 ライセンスのままです。

合格率、メッセージ量、送信元上位を表示する Parse DMARC ダッシュボード

できること

DMARC レコードに rua= アドレスを設定すると、Google、Microsoft、Yahoo などのメール受信サーバーから集計レポートが届きます。gzip または zip 形式の XML 添付ファイルで、通常は 1 日に 1 回送信されます。レポートには、自社ドメインを名乗ってメールを送信したすべての IP アドレスと、SPF および DKIM の認証結果が記載されています(RFC 7489 section 7.2。その内容は RFC 9990 に引き継がれています)。これを手作業で読む人はいません。Parse DMARC が次の処理を行います。

  • IMAP 経由で任意のメールボックスからレポートを取得します。メールサーバーが同じホスト上にある場合は、ローカルの Maildir からも取得できます(MAILDIR_PATH。詳しくは設定を参照)。Exchange または Outlook が message/rfc822 添付ファイルとして転送したレポートも展開します。
  • gzip、zip、未圧縮の XML を解析します。レポートごとの展開サイズ上限は 16 MB です。
  • すべてのデータを 1 つの SQLite ファイルに保存します。データベースサーバーも JVM も不要です。
  • 合格率、メッセージ量、送信元上位を表示し、個々のレポートを生データのレコードまで確認できます。
  • フォームから _dmarc TXT レコードを生成します。
  • 28 個の Prometheus メトリクスを公開し、Grafana ダッシュボードを提供します。
  • MCP サーバーを提供するため、AI アシスタントがレポートを問い合わせることができます。
  • ダークモードに対応しています。最小構成のコンテナーイメージに、静的バイナリを 1 つ収録しています。

読み取り対象は集計(RUA)レポートのみです。失敗レポート(RUF)、TLS-RPT、アラート、ログイン、複数メールボックスからの取り込みには対応していません。詳しくはロードマップと貢献を参照してください。

実行する

データベース用の名前付きボリュームを指定して Docker を使います。

docker run -d --name parse-dmarc -p 8080:8080 \
  -e IMAP_HOST=imap.gmail.com \
  -e IMAP_PORT=993 \
  -e [email protected] \
  -e IMAP_PASSWORD='your-app-password' \
  -v parse-dmarc:/data \
  dmarcguard/parse-dmarc

macOS または Linux では Homebrew を使います。

brew install dmarcguardhq/tap/parse-dmarc
parse-dmarc --gen-config          # writes a config.json template
parse-dmarc --config config.json

Nix では、NUR スタイルのリポジトリを使います。

nix profile install github:dmarcguardhq/nur#parse-dmarc   # or: nix run github:dmarcguardhq/nur#parse-dmarc

または、リリースページからリリースアーカイブ parse-dmarc_<os>_<arch>.tar.gz(Windows では .zip)をダウンロードします。

http://localhost:8080 を開きます。Gmail にはアカウントのパスワードではなく、アプリ パスワードが必要です。同じイメージは Docker Hub では meysam81/parse-dmarc として公開されています。どちらの名前も同じビルドを参照しており、v1 や v1.6.0 などのタグを指定すると、リリースを固定できます。

レポートを受信する

受信側がレポートを送信するのは、DMARC レコードで送信を要求している場合のみです。独自のドメインとメールボックスを使い、_dmarc.example.com に次の TXT レコードを公開します。

v=DMARC1; p=none; rua=mailto:[email protected]
  • p=none は、受信側に通常どおり配信し、レポートのみを送信するよう要求します。レポート内の正規の送信者がすべて認証に合格したら、p=quarantine、次に p=reject へ移行します(RFC 9989 section 5.1)。
  • rua= は Parse DMARC が読み取るメールボックスです。最初のレポートが届く前に、メールボックスを作成し、メールを受信できる状態にしておく必要があります。
  • dig +short TXT _dmarc.example.com でレコードを確認します。レポートは通常、24~48 時間以内に届き始めます。

Cloudflare、Route 53 をはじめ、どの DNS ホストでも同じ 3 つの項目を指定します。名前は _dmarc、タイプは TXT、値は上記のとおりです。SPF と DKIM は事前に設定する必要はありません。レポートを使って、それらがどのように機能しているかを確認できます。

どこにでもデプロイ

プラットフォームにワンクリックでデプロイするか、すでに実行しているセルフホスト型 PaaS 用のテンプレートを使います。どの方法でも、Configuration の IMAP 設定が必要です。

Platform as a Service(PaaS)
プロバイダーデプロイ備考
RailwayDeploy on Railway初心者におすすめ
RenderDeploy to Render無料プランを利用可能
KoyebDeploy to Koyebグローバルエッジにデプロイできます。/data を手動でボリュームとしてマウントしてください。
ZeaburDeploy on Zeaburアジア太平洋地域に最適化
NorthflankDeploy to Northflank開発者向け
セルフホスト型 PaaS
プロバイダーデプロイ備考
CapRoverCapRover にデプロイセルフホスト型 PaaS
CoolifyCoolify にデプロイオープンソースの Heroku 代替サービス
DokployDokploy にデプロイセルフホスト型デプロイプラットフォーム
DockerDockerどこでも実行できます
インフラストラクチャ
プロバイダーデプロイ備考
DigitalOcean DropletDigitalOcean にデプロイPacker イメージを使用した VM

設定

この表にある各設定は、環境変数または config.json 内のキーです。環境変数が最初に読み込まれ、その値はファイルの設定で上書きされます。後述のコマンドラインフラグでは環境変数を指定できますが、config.json のキーは指定できません。

設定環境変数デフォルト
IMAP ホストとポートIMAP_HOST、IMAP_PORT必須、993
IMAP ユーザー名とパスワードIMAP_USERNAME、IMAP_PASSWORD必須
読み取るメールボックスIMAP_MAILBOXINBOX
暗黙的な TLSIMAP_USE_TLStrue
平文ポートでの STARTTLSIMAP_STARTTLSfalse
内部 CA バンドル、PEMIMAP_TLS_CA_FILE未設定
証明書の検証をスキップIMAP_TLS_SKIP_VERIFYfalse
取得したメールを既読にするIMAP_MARK_AS_SEENtrue
処理済みメールの移動先IMAP_PROCESSED_MAILBOX未設定
IMAP の代わりに使用する MaildirMAILDIR_PATH未設定
Maildir のデッドレターメールボックスIMAP_DEADLETTER_BOXDEADLETTER
データベースファイルDATABASE_PATH~/.parse-dmarc/db.sqlite、Docker では /data/parse-dmarc.db
HTTP リッスンSERVER_HOST、SERVER_PORT127.0.0.1、8080、Docker では 0.0.0.0
取得の間隔(秒)FETCH_INTERVAL300
ログレベルLOG_LEVELinfo

ダッシュボードは、SERVER_HOST で別の設定を指定しない限り、ループバックでリッスンします。別のホストからアクセスするには、SERVER_HOST=0.0.0.0 を設定してください。Docker では、ポートをコンテナのループバックではなくインターフェースに転送するため、コンテナイメージですでにこの設定がされています。設定ファイルの server.host は SERVER_HOST より優先されるため、サンプル設定ではこのキーを省略しています。

プロバイダー:Gmail は imap.gmail.com のポート 993 で、アプリパスワードを使用します。Microsoft 365 は outlook.office365.com のポート 993 です。それ以外は、ドキュメントに別の記載がない限り、ポート 993 と TLS を使用します。

独自 CA で署名された証明書を使う IMAP サーバーでは、x509: certificate signed by unknown authority エラーが発生します。CA バンドルをマウントし、IMAP_TLS_CA_FILE にそのパスを指定してください。検証は有効のままです。IMAP_TLS_SKIP_VERIFY=true でも接続できますが、その場合セッションを傍受される可能性があるため、最後の手段としてのみ使用してください。IMAP_STARTTLS=true にすると、平文(通常はポート 143)で接続してから TLS に切り替えます。この設定は IMAP_USE_TLS より優先されます。TLS を完全に無効にすると平文 IMAP になり、ほとんどのサーバーはその接続での LOGIN を拒否します。

レポートをすでに受信しているホストでは、MAILDIR_PATH に Maildir(例:/var/mail/dmarc/Maildir)を指定すれば、IMAP の設定は不要です。取得のたびに <MAILDIR_PATH>/new のすべてのメッセージが読み取られ、解析後に各メッセージが <MAILDIR_PATH>/cur に移動されます。メッセージは、Postfix や Courier が配信するのとまったく同じ形式で、メール全体として読み取られます。レポートを読み取れないメッセージや、レポートを解析できないメッセージは、代わりに <MAILDIR_PATH>/DEADLETTER(IMAP_DEADLETTER_BOX)に移動されるため、オペレーターはパーサーが処理できなかった内容を確認できます。

フラグ動作
--fetch-once取得、解析、保存して終了します。cron 用です。
--serve-only取得せずにダッシュボードを配信します。
--fetch-interval 600取得サイクル間の秒数です。
--metrics=false/metrics を無効にします。
--gen-configconfig.json のテンプレートを書き出して終了します。
--mcp, --mcp-http :8081フェッチャーの代わりに、stdio または HTTP 経由で MCP サーバーを実行します。docs/MCP.mdを参照してください。

メトリクス、Grafana、MCP

/metrics はデフォルトで有効です。取得サイクル、IMAP 接続、解析と保存のエラー、全体およびドメインごとのコンプライアンス率、SPF と DKIM の結果数、HTTP レイテンシを対象とする28個のメトリクスがあります。grafana/dashboard.json は、それらをすぐに利用できるダッシュボードです。全リスト、Prometheus Operator の ServiceMonitor、アラートルール、Prometheus と Grafana を含む compose スタックは、docs/METRICS.mdにあります。

parse-dmarc --mcp を使うと、Model Context Protocol 経由で AI アシスタントから同じデータを利用できます。get_statistics から parse_dmarc_report までの9個のツールを、stdio またはオプションの OAuth2 を使用した HTTP 経由で利用できます。セットアップ方法とツール一覧はdocs/MCP.mdにあります。

ダッシュボードの背後にある HTTP API は、4つの GET ルートで構成されています。/api/statistics、/api/reports、/api/reports/{id}、/api/top-sources です。いずれも認証がないため、ポートはリバースプロキシまたは VPN の内側に置いてください。

ダッシュボードを https://example.com/dmarc/ のようなパスで配信するには、転送前にプロキシでプレフィックスを削除します。たとえば、nginx の location /dmarc/ { proxy_pass http://127.0.0.1:8080/; } のように設定します(完全な例)。ダッシュボードはページを基準にアセットと API を読み込むため、個別の設定は不要です。

Parse DMARC と DMARCguard のどちらを選ぶべきですか?

同じ開発元による 2 つの製品ですが、コードベースは別々です。Parse DMARC はこのリポジトリのすべてで、エンタープライズ向けディレクトリも、ロック解除が必要な機能もありません。DMARCguard はホスト型のプロプライエタリサービスで、レポートを読み取り、変更すべき内容をお知らせします。

Parse DMARCDMARCguard
実行するのは誰かご自身:バイナリまたはコンテナー、メールボックス、ボリューム当社
読み取るものDMARC 集計レポートDMARC 集計レポート、TLS-RPT レポート、Pro では失敗レポート、および 9 つのプロトコル(DMARC、SPF、DKIM、BIMI、MTA-STS、TLS-RPT、ARC、DANE、ARF)の DNS チェック(Free では 7 つ)
送信元IP アドレス名前付き送信元 170 種。IP アドレスではなく Mailchimp や SendGrid などで識別し、それぞれの問題を修正する DNS 変更も提示します
アラートご自身で作成する Prometheus ルールFree ではメール、Pro では Slack、Teams、Discord、ウェブフック
保持期間ディスクの容量次第Free では 30 日、Pro では 1 年
アクセス制御なし。プロキシの背後で運用してくださいアカウントと 2FA。Pro では SAML SSO
サポートGitHub の Issueメール
価格$0、Apache-2.02 ドメインまで無料、クレジットカード不要。Pro は 2 ドメイン込みで月額 $29

データをご自身のディスクに保存し、監視するメールボックスが 1 つあればよい場合は、Parse DMARC を実行してください。レポートの読み取りを任せたい場合や、夜の作業時間で対応できないほど多くのドメインがある場合は、DMARCguard をご利用ください。

Parse DMARC を最初に作ったのは 2025 年後半です。DMARCguard は、その次に人々から寄せられた要望、つまり送信元を IP ではなく名前で表示することと、アラートごとに変更すべき正確なレコードを提示することから生まれました。DMARCguard の利用料が、このリポジトリに費やす時間を支えています。そして、今後も Apache-2.0 のままです。

Meysam

2 ドメインまで無料で始める(クレジットカード不要)

ロードマップとコントリビューション

要望が特に多い追加機能は、要望の多い順に、TLS-RPT レポート(#154)と送信元の whois(#143)です。その他の要望は、Issue を作成してください。CONTRIBUTING.md ではツールチェーンを説明しています。just build、just dev、およびサンプルレポートを登録したローカルの Dovecot を起動する docker compose up をご利用ください。

ライセンス

このリポジトリ内のすべてのものに Apache-2.0 を適用しています。ee/ ディレクトリはなく、キーが必要な機能もありません。


Parse DMARC が役に立った場合は、スターを付けると、次の人が見つけやすくなります。レポートを代わりに読んでもらいたい場合は、同じチームが提供するホステッド製品の DMARCguard をご利用ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。