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.pdf
Sendmail マニュアルのセクション 5.1.4.6 を参照してください。上記は多少盗用されました。
また、上記は必須ヘッダーのない受信メールを拒否するため、送信メールサーバー構成でのみ機能します。
答え2
@thrig アドバイスありがとうございます。ルールがどのように書かれたのか理解しなければならなかったので、時間がかかりました。停止するのではなくヘッダーを許可する必要があるため、指定されたルールセットを変更してsendmail.mcに次の行を追加して目的の結果を得ました。まだ事前作成ファームでこれをテストしていませんが、今後の方法についての洞察を得ることができます。
私は必要なヘッダーを生成して送信するのに役立つ小さなPythonスクリプトを作成しました。以下のルールセットは、私のメーリングテーブルが以前にリストされたドメインに基づく他の電子メールを拒否するため、私の要件である「X-Test」ヘッダを許可します。フィードバックに足りない点があれば感謝の気持ちを表現してください。
LOCAL_RULESETS Kstorage マクロ HX-Test: $>CheckTestHeader
SCheckTestHeader R$* $: $(storage{xtestsetp} $@ OK $) $1 R< $+ > $@ OK