web-dev-qa-db-ja.com

Postfixの添付ファイルのサイズを動的に制限する

私が現在取り組んでいるプロジェクトでは、「動的な」メール添付ファイルのサイズ制限の要件を受け取りました。 postfix(現在使用している)の場合、これはmessage_size_limit構成オプションを使用して簡単に実装できます。ただし、これにより、ユーザーは添付ファイル付きの電子メールを送信できなくなります。私たちのユースケースでは、2つの異なる制限が必要です。場合によっては下限が適用されますが、これはユーザーに対して透過的である必要があります。それでも、最大制限よりもサイズが小さい添付ファイル付きの電子メールを送信できるはずです。

そのため、「メッセージが大きすぎる」拒否メールを防止したいのですが、代わりにメッセージをキューに入れて、後で配信を再試行します。したがって、添付ファイルのサイズ制限が再び増加しても、メールは引き続き受信者に配信されます。

バックグラウンド

この機能は、低速の衛星アップリンクに接続できる場合もあれば、高速のアップリンクに接続できる場合もある船舶に必要です。高速アップリンクの場合、大きな添付ファイル(<20MB)はそれほど問題にはなりませんが、非常に低帯域幅の衛星接続の場合、これが問題になるため、添付ファイルのサイズを制限する必要があります。ただし、ユーザーは現在のアップリンクタイプについての知識がないため、これはユーザーには表示されないはずです。

3
marabunta2048

ここでは、サーバーのアップリンクステータスを監視するメカニズムがあると仮定します。アップリンクが変更された場合は、以下に説明するスクリプトを実行する必要があります。

Postfixは、メッセージ自体をキューに入れる前に、メッセージサイズのみをチェックします。アクションは、200 acceptまたは5XX requireのいずれかでした。 「高速アップリンクに接続するまで、この大きなメッセージを後置してください」のようなカスタムアクションはありません。

だから、ここに仲間が必要です。 postfwd を使用して、メッセージサイズのチェックを行うことができます。メッセージがpostfwdからの制限を超えた場合、[〜#〜] hold [〜#〜]アクションのようなカスタムアクションを定義できます。 man 5 access によると、メッセージにHOLDアクションが適用されると

[〜#〜] hold [〜#〜]オプションのテキスト..

メッセージを保留キューに置きます。保留キューでは、誰かがメッセージを削除するか、配信のために解放するまでメッセージが置かれます。指定されている場合はオプションのテキストをログに記録し、そうでない場合は一般的なメッセージをログに記録します。

だからここにアイデア:

  • 低速アップリンクに接続している場合は、postfwdに下限を設定します。ユーザーが送信するメッセージが下限を超えると、postfixはそれを保持します。それはキューにとどまり、接尾辞はそれを配信することを気にしません。
  • 高速アップリンクに接続している場合、スクリプトはpostfwdに上限を設定します。次に、スクリプトはrootとして postsuper コマンドを発行して、電子メールをHOLDキューから解放する必要があります。

    postsuper -H ALL
    

    この場合、postfwdの制限はpostfixのmessage_size_limitより大きくなければならないことに注意してください。それ以外の場合、接尾辞は大きなメッセージを拒否せず、保持します。

  • 再び低速アップリンクに接続する場合、postfwdに下限を設定します。

Postfwdのルール例は次のとおりです。

# replace 192.168.1.0/24 with your local network and 12345 with limit size
id=RULE001
    client_address=192.168.1.0/24
    size=12345
    action=HOLD exceed slow link limit

インストール とその ルール についてpostfwdドキュメントを参照してください。この答えはそれをカバーしません。

4
masegaloeh