Перейти к содержимому
www.mytechnote.ru
Меню
  • Администрирование
    • Скрипты
  • Оборудование
    • Обзоры
    • Инструкции
  • Прочее
  • Русский
    • English
    • Русский
Меню

Перезапись адресов отправителей и получателей при помощи Postfix

Сегодня хочу показать, как можно довольно быстро и легко поднять почтовый релей, который будет подменять адреса и домены отправителей и получателей.

В качестве примеров использования, можно придумать сотни вариантов, но сходу в голову пришли такие сценарии:

Если у вас есть внутренний почтовый сервер с внутренним доменом, и вы по какой-то причине не хотите или не можете на него повесить нормальный домен.

Если вы хотите отправлять письма от имени партнера, либо если было какое-нибудь объединение компаний и нужно, чтобы старый домен компании отправителя менялся на новый.

Например, у вас есть группа поддержки, и вы не хотите, чтобы определенные получатели видели индивидуальные ящики пользователей, а к примеру, чтобы получатель видел, что письма приходят с адреса support@yourdomain.com – можно подменить в каждом письме ящик участника, и всегда адреса пользователей будут меняться на 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: <$1@externaldomain.com>

Далее создадим правило транспорта, чтобы почта пришедшая на наши домены пересылалась на нужные почтовые серверы:

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
vasya.pupkin@yourlocaldomain.loc        support@externaldomain.com
support@externaldomain.com     vasya.pupkin@yourlocaldomain.loc

Тут видно, что меняются как внешний так и внутренний домен. Это нужно, что бы была возможность менять адреса не только при отправке почты, но и при приёме. Также для примера показана смена конкретного адреса.
Применяем:

postmap generic

Создаём еще один файл перезаписи адресов:

nano recipient_canonical

Содержимое:

@yourlocaldomain.loc @externaldomain.com
vasya.pupkin@yourlocaldomain.loc support@externaldomain.com

Применяем:

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" yourmail@yourlocaldomain.loc

Соответственно можно сохранить этот скрипт, добавить его в cron и будет приходить письмо о состоянии здоровья сервера.

Опубликовано в 18.09.202030.05.2024 от sanglyb

Навигация по записям

← WiFi сирена NEO Coolcam (S3454) с Aliexpress
Отвязываем WiFi сирену NEO (Tuya) от китайских облаков [tuya-convert, tasmota] →

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Подписывайтесь

Youtube
vk
telegram
github
twitter
rss
  • Форум
  • Об авторе
  • Поддержать автора

Популярные записи

Новые записи

  • Как расширить LVM раздел в Linux
  • Исправление ошибки SrsResources.dll после обновления SSRS для SCCM
  • Проблема при использовании библиотеки PassFiltEx на старых процессорах
  • Как удалить вложения из старых событий календаря в Exchange с помощью скрипта
  • Как скачать и установить Office 2024 LTSC

Архивы

  • 2026 (3)
  • 2025 (5)
  • 2024 (7)
  • 2023 (6)
  • 2022 (5)
  • 2021 (25)
  • 2020 (34)
  • 2019 (39)
  • 2018 (78)
  • 2017 (56)
  • 2016 (77)
  • 2015 (9)
© 2015-2026 www.mytechnote.ru
Использование материалов сайта возможно только с разрешения владельца или обязательна индексируемая, прямая, передающая вес ссылка на материал.