Сегодня хочу показать, как можно довольно быстро и легко поднять почтовый релей, который будет подменять адреса и домены отправителей и получателей.
В качестве примеров использования, можно придумать сотни вариантов, но сходу в голову пришли такие сценарии:
Если у вас есть внутренний почтовый сервер с внутренним доменом, и вы по какой-то причине не хотите или не можете на него повесить нормальный домен.
Если вы хотите отправлять письма от имени партнера, либо если было какое-нибудь объединение компаний и нужно, чтобы старый домен компании отправителя менялся на новый.
Например, у вас есть группа поддержки, и вы не хотите, чтобы определенные получатели видели индивидуальные ящики пользователей, а к примеру, чтобы получатель видел, что письма приходят с адреса [email protected] – можно подменить в каждом письме ящик участника, и всегда адреса пользователей будут меняться на support.
Вообще подобное можно сделать и при помощи сервера Exchange Edge , по ссылке кстати по подробнее написано про сценарии использования. Но для работы Edge требуется дополнительная лицензия, которая стоит денег, поэтому было решено попробовать сделать задуманное на чём-нибудь opensourceном. Выбор пал на Postfix.
Приступим. Я всё делал на Ubuntu Server 20.04. После установки системы обновляем её:
apt update apt upgrade
Устанавливаем postfix и postfix-pcre. Последний нужен для того, чтобы была возможность править заголовки:
apt install postfix postfix-pcre
Идём в папку /etc/postfix и создаём там файл конфигурации – main.cf:
cd /etc/postfix/ nano main.cf
Следующего содержимого файла должно хватить:
compatibility_level = 2
#queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix/sbin
data_directory = /var/lib/postfix
#ваш внутренний домен
mydomain = yourlocaldomain.loc
#имя хоста, которое должно отображаться при ответах на helo и ehlo
myhostname = mail.externaldomain.com
mydestination = $myhostname,
$mydomain,
localhost
#адреса для которых разрешен анонимный релей - 192.168.1.200 и 192.168.1.201 - соответсвенно адреса ваших почтовых серверов
mynetworks = 127.0.0.0/8, 192.168.1.200, 192.168.1.201
smtpd_banner = mail.externaldomain.com ESMTP
smtp_helo_name = mail.externaldomain.com
#Правка заголовков, при помощи этого хозяйства можно скрыть информацию о предыдущих серверах и id писем, где может фигурировать домен, который нужно подменять.
smtp_header_checks = pcre:/etc/postfix/anon-headers.pcre
#разрешаем пересылку для домена externaldomain.com
relay_domains = externaldomain.com
#включаем работу правил транспорта
transport_maps = hash:/etc/postfix/transport
#собственно включаеи rewrite
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical
smtp_generic_maps = hash:/etc/postfix/generic
local_recipient_maps =
unknown_local_recipient_reject_code = 550
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
inet_protocols = ipv4
Далее нужно создать файл при помощи которого будет осуществляться правка заголовков:
nano anon-headers.pcre
Содержимое примерно такое:
/^Received: from .*yourlocaldomain.loc/ IGNORE
/Message-Id:\s+<(.*?)@yourlocaldomain.loc>/ REPLACE Message-Id: <[email protected]>
Далее создадим правило транспорта, чтобы почта пришедшая на наши домены пересылалась на нужные почтовые серверы:
nano transport
Содержимое:
externaldomain.com smtp:[192.168.1.200]
yourlocaldomain.loc smtp:[192.168.1.200]
Применяем:
postmap transport
Создаем файл перезаписи адресов:
nano generic
Пример его содержимого:
@yourlocaldomain.loc @externaldomain.com
@externaldomain.com @yourlocaldomain.loc
[email protected] [email protected]
[email protected] [email protected]
Тут видно, что меняются как внешний так и внутренний домен. Это нужно, что бы была возможность менять адреса не только при отправке почты, но и при приёме. Также для примера показана смена конкретного адреса.
Применяем:
postmap generic
Создаём еще один файл перезаписи адресов:
nano recipient_canonical
Содержимое:
@yourlocaldomain.loc @externaldomain.com
[email protected] [email protected]
Применяем:
postmap recipient_canonical
Также может потребоваться добавить внешний домен в файл hosts:
nano /etc/hosts
В конец файла нужно добавить строчку:
192.168.1.200 externaldomain.com
Перезапускаем postfix:
/etc/init.d/postfix restart
Всё, теперь во всех письмах проходящих через ваш релей будет меняться адрес отправителя/получателя в соответсвии с вашими правилами. Остается только направить письма, для которых треубется осуществить замену адреса, через этот релей. Например в Exchange – можно добавить Send Connector, для определенных доменов, и в качестве Smart Host указать адрес только что настроенного сервера.
Следить за тем, что происходит можно в логах mail.log:
tail -f /var/log/mail.log
Также не лишним будет следить за здоровьем вашего нового релея, поможет в этом утилита pflogsumm:
apt install pflogsumm
И скрипт:
/usr/bin/df -h / 2>&1 > /home/administrator/statistics.txt echo "" >> /home/administrator/statistics.txt /usr/bin/mailq >> /home/administrator/statistics.txt /usr/bin/cat /var/log/mail.log 2>&1 | /usr/sbin/pflogsumm 2>&1 >> /home/administrator/statistics.txt cat /home/administrator/statistics.txt | mail -s "relay statistics" [email protected]
Соответственно можно сохранить этот скрипт, добавить его в cron и будет приходить письмо о состоянии здоровья сервера.
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.
Если вам помогла статья, вы можете >>отблагодарить автора<<