使用多个 IP 进行出站电子邮件负载平衡

使用多个 IP 进行出站电子邮件负载平衡

我想通过多个 IP 对出站电子邮件进行负载平衡,是否有任何内置工具或一些使用 postfix、sendmail 或 exim 的简单方法来实现?例如,如果我为电子邮件服务器分配三个 IP,然后通过所有 IP 逐一发送电子邮件。

答案1

如果您想从单个邮件服务器发送来自不同 IP 的邮件,那么您应该考虑在单个主机上使用 Postfix 多个实例。您可以为每个实例分配不同的 IP 地址,然后您的空实例将为每个实例提交邮件。有关更多详细信息,您可以参考这些链接,了解如何分配 IP 和所有http://souptonuts.sourceforge.net/postfix_sbr.html 这是有关我们如何创建以及实例如何工作的所有基本信息http://www.postfix.org/MULTI_INSTANCE_README.html

答案2

使用 Postfix 2.7 或更高版本非常容易。

首先在 master.cf 中为每个 IP 创建一个条目,如下所示:

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”的表,并为每个传输插入一行:

CREATE TABLE transport_roundrobin (transport varchar(40) not null); -- don't forget semicolon
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 地址

答案3

如果使用后缀 3,请检查此解决方案,它使用随机图,所以你不需要mysql的RAND()功能。 https://shami.blog/2016/04/randomize-source-ip-addresses-with-postfix/

您可以执行master.cf已经建议的配置,并添加以下内容main.cf(假设您在中有 3 个条目master.cf):

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

相关内容