web-dev-qa-db-ja.com

Sendmail:すべてのドメインのキャッチオール

すべてのメール(つまり、すべてのユーザーとすべてのドメイン、ローカル以外のドメインも含む)を受け入れ、単一のローカルキャッチオールメールボックスに配置するテスト環境用のメールサーバー構成を設定する必要があります。

私が持っているのは、SENDmail(8.14)を備えたSLES 11で、/ etc/mail/virtusertableを次のように変更しようとしました。

@ catchall

または好き

@* catchall

しかし、役に立たない-宛先メールアドレス(例: "[email protected]")はcatchall @に書き換えられないため、適切なMXへの配信が試行されます。

# sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,0 [email protected]
canonify           input: santa @ northpole . org
Canonify2          input: santa < @ northpole . org >
Canonify2        returns: santa < @ northpole . org . >
canonify         returns: santa < @ northpole . org . >
parse              input: santa < @ northpole . org . >
Parse0             input: santa < @ northpole . org . >
Parse0           returns: santa < @ northpole . org . >
ParseLocal         input: santa < @ northpole . org . >
ParseLocal       returns: santa < @ northpole . org . >
Parse1             input: santa < @ northpole . org . >
MailerToTriple     input: < > santa < @ northpole . org . >
MailerToTriple   returns: santa < @ northpole . org . >
Parse1           returns: $# esmtp $@ northpole . org . $: santa < @ northpole . org . >
parse            returns: $# esmtp $@ northpole . org . $: santa < @ northpole . org . >

ルックアップテーブルのソースドメイン部分ではワイルドカードがサポートされていないようです。

Sendmailでこれをどのように実装しますか?

編集:Andrzejのコメント のメーラー可能なエントリを試しました

. local:catch-all-outgoing

と同様

.. local:catch-all-outgoing

どちらの場合も、sendmail -bvに対して同じ出力を受け取りました。

# sendmail -d60.5 -bv [email protected]
map_lookup(dequote, root, %0=root) => NOT FOUND (0)
map_lookup(Host, example.net, %0=example.net) => example.net. (0)
[email protected]... deliverable: mailer esmtp, Host example.net., user [email protected]

はい、root、sendmailは非rootとして実行できないようです

編集:マクロファイルでメーラーテーブル機能が有効になっていないため、sendmail.cfに適切な書き換えルールが含まれていませんでした作業。

2
the-wabbit

ここで発生していること:/etc/mail/virtusertableアウトバウンドではなく、インバウンドメールのみに制限されていると思います。

MailertableまたはSMART_Hostのデフォルトルートを使用して、すべての非ローカルメッセージを1つのローカルメールボックス/エイリアスに配信できます。

mailertable entry:
. local:catch-all-outgoing

aliases:
catch-all-outgoing: some-local-account

ドットで始まらないLHSエントリは、示された完全なホスト名と一致します。ドットで始まるLHSエントリは、そのドメイン名で終わるもの(先頭のドットを含む)と一致します。つまり、空でない文字シーケンスの先頭に「。+」正規表現パターンがあると考えることができます。

RHSは、常に「mailer:Host」のペアである必要があります。メーラーは、メーラーの構成名です(つまり、sendmail.cfファイルのM行)。 「ホスト」は、そのメーラーに渡されるホスト名になります。

(参照: sendmail readme 、 "USING MAILERTABLES"セクション)

だから次のようなもの:

/ etc/mail/mailertable内の. local:catch-all-outgoingAdrzejのコメント のように1つのドット)により、domain.tldはsendmail.cfで定義されたローカルメーラー構成にリダイレクトされます。エイリアスがcatch-all-outgoingのホスト名をキャッチし、それをローカルの電子メールアドレスにします。

メーラーテーブルを機能させるには、構成で有効にする必要があります。追加

FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl

構成を生成するm4マクロファイルにそれを処理する必要があります。

sendmailサイトのヘルプファイルからも:

MAILERTABLE:

特定のドメイン(クラス{w}にない、つまりローカルホスト名)のルーティングをオーバーライドするために使用できる「メーラーテーブル」を含めます。 FEATUREの引数が重要な定義である可能性があります。何も指定されていない場合、使用される定義は次のとおりです。

ハッシュ/ etc/mail/mailertable

このデータベースのキーは、完全修飾ドメイン名またはドットが前に付いた部分ドメインです(たとえば、「vangogh.CS.Berkeley.EDU」または「.CS.Berkeley.EDU」)。 後者の特殊なケースとして、「。」他のキーでカバーされていないドメインと一致します。値は次の形式である必要があります:mailer:domain

ここで、「mailer」は内部メーラー名であり、「domain」はメッセージの送信先です。これらのマップはメッセージヘッダーに反映されません。 特別な場合として、次の形式:local:userは、ローカルメーラーを使用して指定されたユーザーに転送します

2
TheCleaner

Sendmail:ローカルおよび非ローカルアドレスのキャッチオール

非ローカルドメインにはSMART_Hostを定義し、ローカルメールドメインにはMAIl_HUBを定義できます。

sendmail.mc:

define(`SMART_Host',`local:some_existing_user')dnl
define(`MAIL_HUB',`local:some_existing_user')dnl
dnl optional part to list local users/mailboxes excluded from the redirect
dnl in /etc/mail/direct-users file (one user per line)
LOCAL_CONFIG
FL/etc/mail/direct-users
divert(0)

P.S.

echo '$=w' | sendmail -btを使用して、ローカルの電子メールドメインのリストを取得します。 Sendmailはデフォルトで自動的にそれを埋めます。

mailertableを使用して、一部の外部ドメインをリダイレクトから除外できます

example.net %0
1
AnFi