带有多个IP的出站电子邮件负载平衡

我想通过多个IP负载均衡出站电子邮件,是否有任何内置的工具或一些简单的方法来做到这一点与Postfix的,sendmail或进出口? 例如,如果我将三个IP分配给电子邮件服务器,并通过所有ips逐一发送电子邮件。

如果你想从一台邮件服务器发送来自不同Ip的邮件,你应该考虑在单个主机上的postfix多个实例。 您可以为每个实例分配一个不同的IP地址,您的空实例将为每个实例提交邮件。 更详细的你可以参考这些链接这一个如何分配IP和所有的http://souptonuts.sourceforge.net/postfix_sbr.html和这个所有的基本信息,我们如何创build和如何实例http&#xFF1A://www.postfix .ORG / MULTI_INSTANCE_README.html

使用Postfix 2.7或更高版本,这非常简单。

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

out1 unix - - n - - smtp -o syslog_name=postfix-out1 -o smtp_helo_name=out1.yourdomain.tld -o smtp_bind_address=abc1 out2 unix - - n - - smtp -o syslog_name=postfix-out2 -o smtp_helo_name=out2.yourdomain.tld -o smtp_bind_address=abc2 [...] outN unix - - n - - smtp -o syslog_name=postfix-outN -o smtp_helo_name=outN.yourdomain.tld -o smtp_bind_address=abcN 

然后在main.cf中创build一个依赖于发件人的传输地图,如下所示:

 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'上运行的db'dbname'上创build一个名为'transport_roundrobin'的表,并为每个传输插入一行:

 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表中select一个随机行,然后使用获得的值在master.cf中select相应的传输。 根据-o smtp_bind_address,每个传输将使用不同的IP地址

如果使用postfix 3检查这个解决scheme,它使用randmap ,所以你不需要mysql的RAND()函数。 https://shami.blog/2016/04/randomize-source-ip-addresses-with-postfix/

你可以做一下build议的master.cfconfiguration,并添加下面的main.cf (假设你在master.cf有3个条目):

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