На одном из серверов крутятся несколько сайтов, но почта с этих сайтов должна рассылаться с другого сервера.
Пришлось искать решение вопроса.
И оно нашлось…

По сути работает условие, если домен отправителя равен указанному нами домену, то почта отправляется на smarthost, который в свою очередь принимает почту от первого сервера без авторизации.

Настраивалось это на Ubuntu, Debian с этим чудным конфигом… На CentOS, RedHat будет немного проще.

Открываем на редактирование файл /etc/exim4/exim4.conf.template

Добавляем блок smart_route

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
begin routers
smart_route:
condition = ${extract{smart_host}{${lookup{$sender_address_domain}lsearch{/etc/exim4/staticroutes}{$value}fail}}}
driver = manualroute
transport = remote_smtp
route_list = "* ${extract{smart_host}{${lookup{$sender_address_domain}lsearch{/etc/exim4/staticroutes}{$value}fail}}}"

#smarthost:
# driver = manualroute
# domains = ! +local_domains
# transport = remote_smtp
# route_list = * smartrelay.domain.com
# no_more
# no_verify

dnslookup:
driver = dnslookup
domains = !+local_domains
transport = remote_smtp
no_more

Остальное приведено для примера, т.е. по сути добавляем блок сразу после begin routers. Вторым шагом создаём файл /etc/exim4/staticroutes с содержимым

1
2
domain1.com: smart_host=smarthost1.domain.com
domain2.com: smart_host=smarthost2.domain.com

На каждой новой строке новое условие. Выходит если отправителем письма указан к примеру admin@domain1.com, то письмо отправится на smarthost1.domain.com, который уже сам будет разбираться что делать с письмом. Доставлять его локально, подписывать DKIM, проверять на вирусы, доставлять куда то ещё… Ну и конечно же после проделанных операций перезапускаем exim и смотрим лог.

1
2
# service exim4 restart
# tail -f /var/log/exim4/mainlog

При применении фантазии и смекалки, можно подобным образом перенаправлять на смартхост письма для определённых доменов.