#pMtaFilters
Milter (Sendmail milter プロトコル) と MTA フック (SMTP ステージごとの HTTP)
既存のフィルターを SMTP ダイアログに直接組み込めます: Milter は Sendmail Milter プロトコル バージョン 6 を使用します (Milter プロキシ経由の Rspamd、ClamAV-milter、OpenDKIM、DLP 製品)。MTA フックは、ステージ (CONNECT、EHLO、MAIL FROM、RCPT TO、DATA) ごとに JSON ドキュメントを受け取って判定を返すシンプルな HTTP サービスです。どちらも受信メール (ポート 25) に対して動作し、任意で送信 (465/587) にも適用できます。Milter と MTA フック (#pMtaFilters) で構成し、各エントリにはテスト ボタンがあります。
既定のアクションは慎重に選択してください: "accept" (フェイル オープン) はフィルターが停止していてもメールの流れを維持し、"tempfail" (Postfix の milter_default_action = tempfail と同様) はフィルターが復旧するまで送信者に後で再試行させます。ウイルス スキャナーには tempfail のほうが安全で、スコアリング サービスには accept が適しています。検疫では受信メールが迷惑メール フォルダーに入ります。送信 (submission) 時には、メッセージは 550 で拒否されます。
MTA フック応答 (Stalwart 互換)
リクエスト: コンテキスト (stage、client、sasl、tls、server、queue、protocol)、エンベロープ (from、to)、DATA 時にはメッセージ (headers、contents、size)。X-Nextxch-Signature ヘッダーの署名: sha256=本文に対する HMAC。
POST https://dlp.internal/hook (X-Nextxch-Hook-Stage: data)
{
"action": "accept",
"modifications": [
{ "type": "addHeader", "name": "X-DLP-Status", "value": "clean" },
{ "type": "changeHeader", "index": 1, "name": "Subject", "value": "[external] Offer" },
{ "type": "deleteHeader", "index": 1, "name": "X-Internal-Route" }
]
}
{ "action": "reject", "response": { "status": 550, "enhancedStatus": "5.7.1", "message": "Confidential data detected" } }
{ "action": "tempfail", "response": { "status": 451, "message": "Please try again later" } }
{ "action": "quarantine" } { "action": "discard" }
設定、既定値 & ベスト プラクティス
| 設定 / 場所 | 説明 | 既定値 | 本番環境のベスト プラクティス |
|---|---|---|---|
Milter-Adresse |
milter の TCP または Unix ソケット: inet:host:port、inet:port@host (Sendmail 表記)、host:port または unix:/path。 | - |
Rspamd: inet:127.0.0.1:11332 (milter = yes のプロキシ ワーカー)。ClamAV-milter: unix:/run/clamav/clamav-milter.ctl または inet:127.0.0.1:7357。 |
Phasen und Aktionen (Milter) |
オプション ネゴシエーション v6、マクロ (j、{client_addr}、i、{auth_authen}、{mail_addr}、{rcpt_addr})、connect、helo、mail、rcpt、data、header、eoh、body、eom。応答: accept、continue、reject、tempfail、discard、reply code、quarantine。変更: ヘッダーの追加・挿入・変更、本文の置換、受信者の追加/削除、送信者の変更。 | alle angeboten |
Milter が無効にしたステージ (SMFIP_NO*) は送信されず、応答なしのステージ (SMFIP_NR_*) は応答を待ちません。 |
Zeitlimits |
接続時、コマンドごと、コンテンツ / メッセージ終了時のそれぞれに個別に設定します。進行状況の応答によりコンテンツのタイムアウトが延長されます。 | 5 s / 10 s / 60 s |
大きな添付ファイルを扱うウイルス スキャナーでは、コンテンツのタイムアウトを 120-300 秒に引き上げてください。 |
MTA-Hook Phasen und Sicherheit |
フックごと: connect、ehlo、mail、rcpt、data。任意の認証ヘッダー (例: Authorization: Bearer ...) と HMAC-SHA256 署名。いずれも暗号化して保存され、表示されることはありません。 | data |
必要なステージのみを有効にしてください: 呼び出しごとに、フックの応答時間が SMTP ダイアログに加算されます。フックは 1 秒未満で応答する必要があります。 |
Reihenfolge |
Milter とフックは order フィールドの順に実行され、最初の拒否でチェーンが終了します。DATA 時には、各フィルターは前のフィルターによる変更が反映されたメッセージを参照します。 | Milter 100, Hooks 200 |
高速で安価なチェック (例: レピュテーション) を、高コストなチェック (ウイルス スキャン) の前に配置します。 |