R$* $#error $: 553 ヘッダー欠落 --> [テスト用です。]

R$* $#error $: 553 ヘッダー欠落 --> [テスト用です。]

sendmailのmailertable構成では、次の構成を使用して内部ドメイン(@osp.com、@asp.comなど)のみを持つメールを外部の世界に中継するメールサーバーがあります。他のドメインに送信されたすべての電子メールは拒否されます。現在の要件は、「X-Test」などの特定のカスタムヘッダーが電子メールヘッダーにあり、他の電子メールドメイン(現在拒否されている)から送信された場合に電子メールを中継することです。

私はルールセットを使用しようとしましたが、最も近いリンクは下のリンクでしたが、うまくいかず、解決策を見つけるのではなく方向を探しています。これまで、私はルール/ルールセットの作成方法を理解しました(sendmailでは少し複雑ですが)。

osp.net           smtp:ms.osp.net
asp.net           smtp:ms.osp.net
.                 procmail:/etc/mail/reject-mail.proc

関連リンク: http://bradthemad.org/tech/notes/sendmail_header_filter.php

ベストアンサー1

「設定された場合にのみ許可」は、リンクされた「設定された場合は拒否」の例よりはるかに複雑です。 「設定された場合は拒否」は、ヘッダーに特定の値がある場合にメッセージを拒否します。 「設定された場合にのみ許可」は、そのメッセージを許可されているとマークする必要がありますが、他のすべてのメッセージも拒否する必要があります。 「設定された場合にのみ許可」のもう1つの複雑な問題は、システムメッセージ(cronのメッセージなど)も許可する必要があることです。この場合、包括的な拒否では十分ではありません。もう一つの質問は、システムがリモートリレーを許可するかどうかです。もしそうなら、ルールセットが正しく設計されていない場合は、問題のヘッダーフィールドを設定するすべての人のためにサーバーをオープンリレーに切り替えることができます。テストヘッダーをどこかから削除しないと、システムはメッセージを読むことができるすべての人に表示されるため、これはうまくいかない可能性があります。

1つのアプローチは、ヘッダーの最後にヘッダーX-Testが表示されていることを確認し、そうでない場合はメッセージを拒否することです。ヘッダーセットがないと、システムメッセージは失敗しますが、システムをオープンリレーに切り替えてはいけません。中継権限を決定するには、さまざまな他のルールセットを適用し続ける必要があるためです。したがって、sendmail.mc以下を追加してください。

LOCAL_RULESETS
Kstorage macro
HX-Test: $>CheckTestHeader

SCheckTestHeader
R$*                     $: $(storage {xtestsetp} $@ OK $) $1

Scheck_eoh
R$*                     $: < $&{xtestsetp} >
R$*                     $: $(storage {xtestsetp} $) $1
R< $+ >                 $@ OK
R$*                     $#error $: 553 Missing Header

テストヘッダの有無にかかわらず書き換えsendmail.cf、再起動、テストメッセージを送信します。sendmail

Sendmailは多くのスペースを強制する不幸なソフトウェアの1つなので、「多くのスペース」を実行するプログラムは1つ以上のタブに置き換える必要があります。

この例の詳細については、 op.pdfSendmail マニュアルのセクション 5.1.4.6 を参照してください。上記は多少盗用されました。

また、上記は必須ヘッダーのない受信メールを拒否するため、送信メールサーバー構成でのみ機能します。

おすすめ記事