修正:特定のユーザーがメールを送信できるレートを制限する


13

Webサイトと電子メールサーバーをホストするCentOSサーバーセットアップがあります(POSTFIXを使用)。VirtualminとWebminをそれぞれ使用してシステムを管理します。

通常、セットアップするすべてのサイトについて、システム上のメールアカウントをお客様に提供します。特にある顧客は、文字通り何千ものメールを一括して送信することをお勧めしています。これが発生すると、メールサーバーは応答しなくなり、キューが処理されている間、他の顧客宛のメールは停止します。

全員ではなくシステムの特定の1人のユーザーに送信される電子メールのレートを制限する方法はありますか?また、ユーザーが何もできないためにメールサーバーが他のユーザーに対して失敗するように変更する必要がある設定もありますか?

ありがとう

回答:



23

この古い質問に対する他のすべての回答はリンクのみであると思います。そこで、この仕事に私のお気に入りのソリューションを実装する方法を簡単に説明します。

リンクその84104 @は非常に有用ではあるが、適切に送信者ごとの割合を実装するために使用することができない、示唆しています。smtpd_client制限はトラフィック制御のためではなく、クライアントソフトウェアを支援するためのものです。「接続が多すぎるクライアントに対する対策」。1は、このような勧告を見つけることができますが1、それは確かに役立つことがあります。@Eとして Yaziciが示唆したように、置用のアドオンが必要です。個人的には、@ Janne Pikkarainenが推奨しているようにポリシーが設定されていると思いますが、それは標準と考えられています。

私のお気に入りのアドオンは、軽量で簡単なのでpostfwdです。Pleskの複雑な設定ファイルセットに影響を与えることなく、これがPleskまたはその他の類似物で非常に簡単に機能することにも注意してください。Pleskのメールレート制限はバージョン12でのみ実装されていますが、それでもポリシー機能は制限されています。

まず、上記のサイトから最新のアドオンをダウンロードします。UbuntuやDebianとは対照的に、CentOSにはrpmはありません。それでも、最新バージョンを使用することをお勧めします。より具体的には、バージョン1.32(Ubuntu 14.04LTSリポジトリなどにあります)には、適切に機能するのを妨げる厄介なバグがあります。バージョン1.35はこれを整理します。

これらの PERLモジュールが存在することを確認してください。DebianまたはUbuntuを使用している場合は、リポジトリからインストールして、すべての依存関係を自動的に整理してから/usr/sbin/postfwd最新バージョンに置き換えることができます。

次に、ルールセットを作成します。/etc/postfwd.cfまたはなどのファイルを作成し、/etc/postfix/postfwd.cf追加します。

id=R001; sender=~/.*/; action=rate(sender/100/86400/REJECT only 100 messages per day for $$sender)
id=R002; sender=~/.*/; action=rate(sender/50/3600/REJECT only 50 messages per hour for $$sender)

上記のルールセットには、すべての送信者に対して評価される2つのルールがあります。rateアクションの構文は次のとおりです。

rate (<item>/<max>/<time in sec>/<action>)

他の料金の例については、こちらをご覧ください。構文の参照については、ドキュメントを参照してください。ここで同様の議論を見つけることができます。SASLが実装されている場合(例えばdovecotの)あなたが安全に交換することができsendersasl_username。次の-Cオプションを使用して、ルールセットの有効性をテストできます。

postfwd -f /etc/postfwd.cf -C

その後、postfwdpostfwdを実行して起動する専用のユーザーとグループをオプションで作成できます。

postfwd --daemon -f /etc/postfwd.cf -u postfwd -g postfwd 

apt(Debian、Ubuntuなど)からインストールする場合は、設定ファイルも下/etc/default/postfwdにある必要があり、サービスを適切に開始できます(例:)sudo service postfwd start

次に、ログを見て、postfwdがリッスンしていることを確認します。Postfwdは、postfixと同じログ(/var/log/mailまたは/usr/local/psa/var/log/maillogなど)と適切な行を使用しますpostfwd 1.35 ready for input

次に、postfwdを使用することをpostfixに知らせます。postfix confファイルを編集し(通常は/etc/postfix/main.cf)、次の行で:

smtpd_recipient_restrictions = permit_mynetworks,...

を追加しcheck_policy_service inet:127.0.0.1:10040ます。これを配置する順序smtpd_recipient_restrictionsは非常に重要であり、何が間違っているのかを診断するのに多くの時間を費やすことになります。この質問で説明したように、1つのチェックがOKまたはREJECTを返す場合、postfixは次のチェックに進まないため、おそらくこれを高く設定する必要があります。

最後に、これが機能することを確認するには、1などの非常に小さな制限を指定するか、ルールをとして追加しid=DEFAULT; action=dunnoます。とにかく、ルールのヒットは記録されます。また、送信者ごとのレート制限は、単一の受信者を含む複数の電子メールと複数の受信者を含む単一の電子メールを区別しないことに注意してください。

次に、そのサーバーのアカウントからメールを送信して、ログを確認します。

grep "RULES" /var/log/mail

他のリンク:postfwdクイックスタート


1
この質問の過去からの爆発!よく考えられた答えを提供してくれてありがとう。私は感銘を受けて!
WarpKid

1
smtpd_recipient_restrictionsスペースのあるエントリにあるpostfix barfsのバージョンなので、/ etc / postfix / main.cfで定義しpostfwd_ratelimit = check_policy_service inet:127.0.0.1:10040、/ etc / postfix / master.cf で次のように参照する必要がありましたsmtpd_recipient_restrictions=...,$postfwd_ratelimit,...
Tom McClure

Ubuntuでpostfixを再起動するには:sudo postfwd -f /etc/postfix/postfwd.cf --pidfile=/var/run/postfwd.pid --reload
Wtower

少なくともUbuntu 16.04を使用して、ルールが存在しないフィールドと一致しないように、ルールのワイルドカードを変更して(少なくとも0).+ではなく.*(少なくとも1)を使用する必要があることがわかりました。
トミーピーナッツ

4

必要なのは、Postfix用のポリシーアドオンです。Postfixには多数のポリシーアドオンがあり、それらの一部にはレート制限機能があります。Postfixポリシーアドオンのリストはこちらにあります



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.