В Postfix ip адреса при отправке можно устанавливать самостоятельно и менять если в этом есть необходимость. Обычно несколько адресов задается для больших сервисов рассылки. Если один из них блокируется получателем, письма с других будут продолжать поступать.
Postfix и ip адреса при отправке
Настроим конфигурацию при которой один из двух адресов, используемых сервером, будет выбираться в качестве адреса сервера отправителя автоматически.
Postfix версий 3+ позволяет выбирать адрес случайным образом, для более ранних версий такой возможности нет. В примере используется Postfix 2.9 с выбором значения по принципу Round Robin в SQL таблице. Такое решение универсально.
Внесем изменения в файл /etc/postfix/main.cf добавив одну строку
mcedit /etc/postfix/main.cf
sender_dependent_default_transport_maps = mysql:/etc/postfix/config/transport_roundrobin.cf
В /etc/postfix/config/transport_roundrobin.cf будут храниться настройки подключения к базе данных, из которой берутся значения, соответствующие IP адресам.
mcedit /etc/postfix/master.cf
out1 unix - - n - - smtp -o syslog_name=postfix-out1 -o smtp_helo_name=example.com -o smtp_bind_address=123.123.123.123 out2 unix - - n - - smtp -o syslog_name=postfix-out2 -o smtp_helo_name=example.com -o smtp_bind_address=123.123.124.124
Здесь заданы блоки out1 и out2, они будут идентификаторами в SQL таблице. Для каждого блока определен IP адрес отправителя (посмотреть все возможные адреса можно выполнив ip a). Также задано имя, которое передается в SMTP сессии и имя в syslog.
Чтобы Postfix мог работать с MySQL требуется установка дополнительного пакета
apt-get install postfix-mysql
Задаем реквизиты подключения к базе
mcedit /etc/postfix/config/transport_roundrobin.cf
user = root
password = PznqhqyuJKghds8dwhsUWfHj9
dbname = rr
hosts = 127.0.0.1
query = SELECT transport FROM transport_roundrobin ORDER BY RAND() LIMIT 1;
Подключимся к серверу баз данных, создадим базу и таблицу
mysql -u root -pPznqhqyuJKghds8dwhsUWfHj9
create database rr;
use rr;
CREATE TABLE transport_roundrobin (transport varchar(40) not null);
Добавляем в таблицу записи со значениями out1 и out2
INSERT INTO transport_roundrobin (transport) VALUES ('out1')
INSERT INTO transport_roundrobin (transport) VALUES ('out2');
Теперь нужно проверить работает ли выборка в случайном порядке. Проще всего сделать это выполняя заданный ранее запрос вручную
SELECT transport FROM transport_roundrobin ORDER BY RAND() LIMIT 1;
+————+
| transport |
+————+
| out1 |
+————+
1 row in set (0.01 sec)
SELECT transport FROM transport_roundrobin ORDER BY RAND() LIMIT 1;
+————+
| transport |
+————+
| out2 |
+————+
Получены разные значения — соответственно выборка производится так, как нужно.
Теперь достаточно выполнить tail -f /var/log/mail.log и в другой консоли отправлять письма telnet-ом. В лог будет писаться информация об успешности или не успешности отправки.
Просмотрев исходник полученного письма в дальнейшем можно будет увидеть, что отправляются письма с разных IP адресов.
Про настройку почтового сервера с Postfix с нуля.