设为首页 收藏本站
查看: 2740|回复: 0

[经验分享] Postfix how to balance outgoing emails via multiple IP addresses

[复制链接]

尚未签到

发表于 2015-11-24 11:17:05 | 显示全部楼层 |阅读模式
Postfix how to balance outgoing emails via multiple IP addresses Postfix how to balance outgoing emails via multiple IP addressesThe solution is depending on postfix`s TCP_TABLES and a perl script. In my example I`m using 7 different IP address to route outgoingmails, make sure you`ve already the IP addresses you are going to use have been configured on your box.First get a recent postfix rpm from here http://ftp.wl0.org/official/2.9/RPMS-rhel5-x86_64/. This one is built for rhel5/centos5 however should be workingwithout much hassle on rhel6/centos5. Install the package:# rpm -Uvh postfix-2.9.1-1.rhel5.x86_64.rpmMake sure its built with tcp tables support:# postconf -mbtreecidrenvironfailhashinternalldapmemcachenisproxyregexpstatictcptexthashunixInstall the perl moduleList::util::WeightedRoundRobin:cpan install /List::util::WeightedRoundRobin/Create the following perl script and make it executable:vi /etc/postfix/random.pl#!/usr/bin/perl -w# author: Hari Hendaryanto use strict;use warnings;use Sys::Syslog qw(:DEFAULT setlogsock);useList::Util::WeightedRoundRobin;use Storable;my $hashfile=&quot;/tmp/file.hash&quot;;store {}, $hashfile unless -r $hashfile;## our transports lists, we will define this in master.cf as transport services# Queued using Weighted Round-Robin Scheduling#my $list = [{name=> 'smtp1:',weight => 1,},{name => 'smtp2:',weight => 1,},{name => 'smtp3:',weight => 1,},{name => 'smtp4:',weight => 1,},{name => 'smtp5:',weight => 1,},{name => 'smtp6:',weight => 1,},{name => 'smtp7:',weight => 1,},];my $WeightedList = List::Util::WeightedRoundRobin->new();my$weighted_list = $WeightedList->create_weighted_list( $list );# $maxinqueue max number of queue in smtp listmy $maxinqueue = scalar(@{$weighted_list});## Initalize and open syslog.#openlog('postfix/randomizer','pid','mail');## Autoflush standard output.#selectSTDOUT; $|&#43;&#43;;while (<>) {chomp;my $count;my $hash=retrieve($hashfile);if (!defined $hash->{&quot;index&quot;}){$count = 0;} else {$count = $hash->{&quot;index&quot;};}if ($count >= $maxinqueue){$hash->{&quot;index&quot;} = 0;$count = 0;}$hash->{&quot;index&quot;}&#43;&#43;;store $hash, $hashfile;my $random_smtp= ${$weighted_list}[$count];if (/^get\s(.&#43;)$/i) {print &quot;200 $random_smtp\n&quot;;syslog(&quot;info&quot;,&quot;Using: %s Transport Service&quot;, $random_smtp);next;}print &quot;200 smtp:\n&quot;;}Execute the script to make sure it`s working and no errors are encountered:/etc/postfix/random.plConfigurepostfix to use the random generated smtp transport.Edit /etc/postfix/master.cf, by appending following lines:## Round-robin outgoing smtp127.0.0.1:23000 inet n n n - 0 spawnuser=nobody argv=/etc/postfix/random.pl# random smtpsmtp1 unix - - n - - smtp-o syslog_name=postfix-smtp1-o smtp_helo_name=FQDN -o smtp_bind_address=IPsmtp2 unix - - n - - smtp-o syslog_name=postfix-smtp2-o smtp_helo_name= FQDN -o smtp_bind_address=IPsmtp3 unix - - n - - smtp-o syslog_name=postfix-smtp3 -o smtp_helo_name=FQDN -o smtp_bind_address=IPsmtp4 unix- - n - - smtp-o syslog_name=postfix-smtp4 -o smtp_helo_name=FQDN -o smtp_bind_address=IPsmtp5 unix - - n - - smtp-o syslog_name=postfix-smtp5 -o smtp_helo_name=FQDN -o smtp_bind_address=IPsmtp6 unix - - n - - smtp-o syslog_name=postfix-smtp6-o smtp_helo_name=FQDN -o smtp_bind_address=IPsmtp7 unix - - n - - smtp-o syslog_name=postfix-smtp7-o smtp_helo_name= FQDN -o smtp_bind_address=IPReplace FQDN with desired hostname and IP with the list of the IP addresses you`d like to use.Append the following lines to your/etc/postfix/main.cf:transport_maps = tcp:127.0.0.1:23000127.0.0.1:23000_time_limit = 3600sRestart/reload postfix and verify everything is working correctly:# postmap -q &quot;dummy&quot; tcp:127.0.0.1:23000smtp4:# postmap -q &quot;dummy&quot; tcp:127.0.0.1:23000smtp5:# postmap-q &quot;dummy&quot; tcp:127.0.0.1:23000smtp6:In your logs you should see the different smtp transport beeing used when mails are sent:Sep 2 12:50:05 myserver postfix-smtp2/smtp[2016]: 3CA964C0004: to=, relay=domain.org[XXXXXXXXX]:25, delay=2, delays=0.03/0.01/0.18/1.8,dsn=2.0.0, status=sent (250 OK id=1T86oe-0005tU-E9)Sep 2 12:50:05 myserver postfix-smtp5/smtp[2014]: 4EE244C0012: to=, relay=domain.org[XXXXXXXXX]:25, delay=2, delays=0.01/0/0.21/1.8, dsn=2.0.0, status=sent (250 OK id=1T86oe-0005tx-Gn)Sep 2 12:50:05 myserverpostfix-smtp3/smtp[2045]: 69305680035: to=, relay=domain.org[XXXXXXXXX]:25, delay=2, delays=0.05/0/0.11/1.9, dsn=2.0.0, status=sent (250 OK id=1T86oe-0005uJ-Ih)Sep 2 12:50:05 myserver postfix-smtp3/smtp[2034]: 444B94C0006: to=, relay=domain.org[XXXXXXXXX]:25,delay=2.2, delays=0.04/0/0.21/1.9, dsn=2.0.0, status=sent (250 OK id=1T86oe-0005tW-G9)Sep 2 12:50:05 myserver postfix-smtp1/smtp[2039]: 585A6583CFE: to=, relay=domain.org[XXXXXXXXX]:25, delay=2.2, delays=0.01/0/0.15/2, dsn=2.0.0, status=sent (250 OK id=1T86oe-0005u0-GO)Andalso you get an entry when the perl script is used to provide transport:Sep 2 13:24:59 myserver postfix/randomizer[2076]: Using: smtp6: Transport ServiceThis guide is based on:http://www.kutukupret.com/2011/05/22/postfix-rotating-outgoing-ip-using-tcp_table-and-perl/http://www.kutukupret.com/2010/12/06/postfix-randomizing-outgoing-ip-using-tcp_table-and-perl/Allcredists to Hari Hendaryanto

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-143019-1-1.html 上篇帖子: Ubuntu 12.04安装配置Postfix dovecot cyrus sasl(mysql虚拟用户) 下篇帖子: Postfix的一些基本管理技巧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表