Тема: Postfix с несколькими исходящими IP
Что-то я добрый стал, старею наверное. Решил, вот, показать пример как можно с postfox'ом рассылать письма с разных IP. Очень помогает если надо слать на фримайлы, которые имеют ограничение по входящим письмам с IP.
Для начало нужен postfix с версией не меньше 2.9 так как там появилась возможность общаться с транспортом через TCP. То бишь работает вот такой параметр в main.cf
transport_maps = hash:/etc/postfix-mailer2/transport, tcp:[127.0.0.1]:9998
Это значит что у нас висит вот такой процесс, который при обащении что-то выдает (что разберем дальше)
# netstat -ln | grep 9998
tcp 0 0 127.0.0.1:9998 0.0.0.0:* LISTEN
Запускаться он может как сторонний процесс и как часть postfix системы (как сделано у меня) Запускаем через master.cf
127.0.0.1:9998 inet n n n - 0 spawn
user=nobody argv=/etc/postfix-mailer2/random.pl
сразу оговорюсь, postfix сконфигурирован как многопроцесный из-за этого путь до него нестандартный (postfix-mailer2). random.pl достаточно простой, его задача - в выборочном порядке выдавать транспорт (на самом деле он может делать все что угодно, так как возможности перла, в моем случае, практически безграничны)
# cat /etc/postfix-mailer2/random.pl
#!/usr/bin/perl -w
use strict;
use warnings;
use Sys::Syslog qw(:DEFAULT setlogsock);
our @array = (
'slow1:',
'slow2:',
'slow3:'
);
openlog('postfix/randomizer','pid','mail');
select STDOUT; $|++;
while (<>) {
chomp;
my $random_smtp = int(rand(scalar(@array)));
if (/^get\s(.+)$/i) {
print "200 $array[$random_smtp]\n";
syslog("info","Using: %s Transport Service", $random_smtp);
next;
}
print "200 smtp:\n";
}
на выходе скрипт возвращает название транспорта (slow1, slow2 или slow3) в выборочном порядке или стандартный, при ошибке.
Описываем сами транспорты в master.cf
slow1 unix - - n - 1 smtp
-o syslog_name=postfix-mailer2-0-slow1
-o myhostname=mailer.domain.com
-o smtp_helo_name=mailer.domain.com
-o smtp_bind_address=111.111.111.111
slow2 unix - - n - 1 smtp
-o syslog_name=postfix-mailer2-3-slow2
-o myhostname=mailer-3.domain.com
-o smtp_helo_name=mailer-3.domain.com
-o smtp_bind_address=222.222.222.222
slow3 unix - - n - 1 smtp
-o syslog_name=postfix-mailer2-2-slow3
-o myhostname=mailer-2.domain.com
-o smtp_helo_name=mailer-2.domain.com
-o smtp_bind_address=333.333.333.333
Собственно говоря все, почта рассылается с разных IP. Дополнительно можно прикрепить проверку на валидность IP и если он заблокирован вынимать его из списка и т.д.