суббота, 1 апреля 2017 г.

Microsoft Exchange. Настройка Sender Based routing.

Периодически у администраторов Microsoft Exchange возникают задачи, которые связаны с необходимостью отправки почты с различных IP адресов, в зависимости от домена или почтового адреса отправителя. Еще совсем недавно данная проблема считалась практически не решаемой, но сегодня все изменилось! Благодаря разработанному мной решению, настроить Sender Based маршрутизацию в Microsoft Exchange сможет даже ваш начальник!


Подготовительные работы.


Чтобы в Microsoft Exchange корректно заработал функционал отправки писем с различных IP адресов, нам необходим вспомогательный сервер с установленным MTA Postfix. Для этого мы будем использовать виртуальную машину с операционной системой Linux Centos 7.

Первым делом надо настроить IP адреса для внешних сетевых интерфейсов. Выполнить это можно различными способами. Самый простой - добавить сетевой интерфейс внутри виртуальной машины. Предположим, что данный шаг мы так или иначе выполнили. Теперь у нашего сервера есть два внешних IP адреса:

199.59.242.150 #для отправки писем от @lin.by, так же используется по умолчанию

199.59.242.200 #для отправки писем от @activecloud.ru

Далее проверим, что Postfix установлен. Если его нет, то эта же строка выполнит установку:

#yum -y install postfix

Теперь надо немного поправить файл main.cf. В первую очередь сохраним текущие настройки:

#mv  /etc/postfix/main.cf  /etc/postfix/main.cf.ORIG

Создадим новый конфигурационный файл:

#vi  /etc/postfix/main.cf

queue_directory = /dev/shm/postfix
bounce_queue_lifetime = 1d
maximal_queue_lifetime = 1d
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix

#Hostname
myhostname = relay.lin.by  

inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost
unknown_local_recipient_reject_code = 550

#IP адреса Exchange (или подсети), для которых разрешена пересылка
mynetworks = 127.0.0.1 172.217.20.174 

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.6.6/samples
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES

#дефолтный адрес для исходящих сообщений
smtp_bind_address = 199.59.242.150

#максимальный размер сообщения
message_size_limit = 50240000 

#маршруты
sender_dependent_default_transport_maps = regexp:/etc/postfix/sdd_transport_maps.regexp

Теперь создадим файл, в котором будет указан транспорт для доменов и IP адресов:

#vi /etc/postfix/sdd_transport_maps.regexp

/@lin\.by$/            smtp-lin:
/@activecloud\.ru$/    smtp-active:

На следующем этапе необходимо создать SMTP транспорт. Для этого в файле master.cf добавим строки:

smtp-lin     unix  -       -       n       -       -       smtp
  -o smtp_bind_address=199.59.242.150
  -o smtp_helo_name=mail.lin.by
  -o syslog_name=maillog-lin
smtp-active     unix  -       -       n       -       -       smtp
  -o smtp_bind_address=199.59.242.200
  -o smtp_helo_name=mail.activecloud.ru
  -o syslog_name=maillog-active

Обратите внимание - два пробела перед "-о" обязательны! Когда все готово, вы полним рестарт Postfix:

#service postfix restart

Проверим, что маршруты работают корректно:

# postmap -q tema@activecloud.ru regexp:/etc/postfix/sdd_transport_maps.regexp
smtp-active:
# postmap -q tema@lin.by regexp:/etc/postfix/sdd_transport_maps.regexp
smtp-lin:

Для тестирования будем использовать mailx. Установим его:

#yum install mailx -y

Теперь выполним отправку тестового сообщения и проверим лог:

#echo -e "test message" | /bin/mail -s "test subject" -r "tema@activecloud.ru" "tema@active.by"

#grep maillog-active /var/log/maillog

Mar 30 11:50:05 WAP-WEB maillog-lin/smtp[33180]: 41AD940E6680: to=, relay=mx2.activeby.net[31.193.195.48]:25, delay=0.78, delays=0.05/0.01/0.09/0.64, dsn=2.0.0, status=sent (250 OK id=1ctVnS-0006xP-Ao)

Видим, что транспорт использовался корректный. Дополнительно можно проверить тело письма. В нем мы увидим IP адрес отправителя.

На этом предварительную настройку Sender-based routing Exchange можно считать законченной.


Основная часть работ.


Итак, подготовительные работы были успешно завершены. Приступим к основной части - настройке SmartHost в коннекторе отправки (Send Connector). Для большей наглядности будем использовать EAC:



IP сервера Exchange мы ранее указали в параметре mynetworks (Postfix), поэтому аутентификация не требуется. Так же не забудьте после внесения изменений проверить, что все письма уходят и доставляются корректно.

Как видим, в Microsoft Exchange Server, Sender Based routing настраивается очень просто!

Заключение.

Коллеги, с Праздником! :)




2 комментария:

  1. Здравствуйте,

    сушествует вариант решения проблемвы без использования Postfix сервера:
    https://ivasoft.com/routebysender2013.shtml

    Пробуйте!

    ОтветитьУдалить
    Ответы
    1. Вариант с Postfix намного дешевле (нужна только маленькая ВМ Linux), к тому же не требует установки TransportAgent. Плюс очень надежен, безопасен, прост в обслуживании и развертывании. Еще и работает прозрачно. Вплоть до того, что можно посмотреть исходный код.

      Лично я не вижу ни одного плюса вашего решения. Еще и дополнительная точка отказа - если что поломается, будет очень сложно разобраться. А у Postfix есть шикарнейшие логи.

      Удалить