Тема: 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 и если он заблокирован вынимать его из списка и т.д.

2

Re: Postfix с несколькими исходящими IP

Спасибо!