web-dev-qa-db-ja.com

複数のIPを使用した送信メールの負荷分散

複数のIPを介してアウトバウンドメールの負荷を分散したいのですが、組み込みツールや、postfix、sendmail、eximでそれを行う簡単な方法はありますか?たとえば、電子メールサーバーに3つのIPを割り当て、電子メールがすべてのIPを介して1つずつ送信される場合です。

2
Toqeer

単一のメールサーバーから異なるIPからメールを送信したい場合は、単一のホスト上の複数のインスタンスを後置することを検討する必要があります。また、インスタンスごとに異なるIPアドレスを割り当てることができ、nullインスタンスはインスタンスごとにメールを送信します。詳細については、これらのリンクを参照してください。これは、IPとすべてを割り当てる方法についてです http://souptonuts.sourceforge.net/postfix_sbr.html これは、作成方法とインスタンスの動作に関するすべての基本情報についてです。 http://www.postfix.org/MULTI_INSTANCE_README.html

3
user128296

Postfix 2.7以降では、非常に簡単です。

まず、次のように、master.cfのIPごとに1つのエントリを作成します。

out1  unix -       -       n       -       -       smtp
      -o syslog_name=postfix-out1
      -o smtp_helo_name=out1.yourdomain.tld
      -o smtp_bind_address=a.b.c.1
out2  unix -       -       n       -       -       smtp
      -o syslog_name=postfix-out2
      -o smtp_helo_name=out2.yourdomain.tld
      -o smtp_bind_address=a.b.c.2
[...]
outN  unix -       -       n       -       -       smtp
      -o syslog_name=postfix-outN
      -o smtp_helo_name=outN.yourdomain.tld
      -o smtp_bind_address=a.b.c.N

次に、次のように、main.cfに送信者に依存するトランスポートマップを作成します。

sender_dependent_default_transport_maps = mysql:/etc/postfix/config/transport_roundrobin.cf

Main.cf内の他のすべてのtransport_mapsを次のようにコメントアウトします。

#transport_maps = ...

ここにトリックがあります。このトランスポートテーブルはRand()を使用して、master.cfにリストされているすべてのout [1..n]トランスポートの使用をランダム化します。

/etc/postfix/config/transport_roundrobin.cfに次のように記述します。

user = dbuser
password = dbpass
dbname = dbname
hosts = dbhost
query = SELECT transport FROM transport_roundrobin ORDER BY Rand() LIMIT 1

最後に、「dbhost」で実行されている「dbname」に「transport_roundrobin」というテーブルを作成し、トランスポートごとに1つの行を挿入します。

CREATE TABLE transport_roundrobin (transport varchar(40) not null)
INSERT INTO transport_roundrobin (transport) VALUES ('out1');
INSERT INTO transport_roundrobin (transport) VALUES ('out2');
[...]
INSERT INTO transport_roundrobin (transport) VALUES ('outN');

Postfixは、transport_roundrobin mysqlテーブルからランダムな行を選択し、取得した値を使用して、master.cfで対応するトランスポートを選択します。 -o smtp_bind_addressに従って、各トランスポートは異なるIPアドレスを使用します

6
Luca Gibelli

接尾辞3を使用している場合は、このソリューションを確認してください。randmapを使用しているため、mysqlのRand()関数は必要ありません。 https://shami.blog/2016/04/randomize-source-ip-addresses-with-postfix/

すでに提案されているmaster.cf構成を実行し、次のmain.cfを追加できます(master.cfに3つのエントリがあると仮定します)。

sender_dependent_default_transport_maps = randmap:{out1,out2,out3}
smtp_connection_cache_on_demand=no
2
upteryx