Exim и новый сервер

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
crush13
проходил мимо
Сообщения: 8
Зарегистрирован: 2015-09-17 15:40:30

Exim и новый сервер

Непрочитанное сообщение crush13 » 2016-01-28 15:09:13

Всех приветствую! Ребят, стоит задача со старого сервера Exim переместить всех на новый сервер - внутренняя "организация Exchange" (когда всех пользователей переведут, данный сервер будет обновлён до более свежей версии ОС и самого Exim - сейчас стоит ASP Linux и Exim 4.72 - но не суть). Можно ли осуществить плавный перевод пользователей? т.е. с одним доменом чтобы работало два сервера: вижу это так - на сервер Exim из-вне приходит письмо: 1) если пользователь является локальным - письмо доставляется в его текущий ящик, 2) если пользователь отсутствует в локальной базе - пересылать письмо на ферму Exchange.
Как на Exchange сделать такую схему мы знаем - там создается специальный "коннектор", и если пользователь отсутствует в базе - письмо пересылается на сервер, указанный в "коннекторе".

Предполагаю, что это делается при помощи кастом-роутера, могли бы Вы помочь с его написанием? Если да, буду премного благодарен. Всех благ.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Exim и новый сервер

Непрочитанное сообщение xM » 2016-01-28 15:53:45

crush13 писал(а): 1) если пользователь является локальным - письмо доставляется в его текущий ящик, 2) если пользователь отсутствует в локальной базе - пересылать письмо на ферму Exchange
см. Exim manualroute
IT voodoo blog https://kostikov.co

crush13
проходил мимо
Сообщения: 8
Зарегистрирован: 2015-09-17 15:40:30

Exim и новый сервер

Непрочитанное сообщение crush13 » 2016-01-29 13:52:27

xM писал(а): см. Exim manualroute
Спасибо за подсказку, после прочтения составил такой роутер:

Код: Выделить всё

temp_manual_router:
    driver = manualroute
    transport = remote_smtp
    route_list = example1.ru mail.example4.ru
и поставил его после локальной доставки, но конечно же он не работает, как хотелось бы. Exim смотрит в свою базу по данному домену (что естественно), если есть ящик, осуществляет доставку письма, если нет такого адреса в локальной базе - отправляет сообщение с ошибкой Unroutable address.

У нас на экзиме несколько доменов example1.ru example2.ru example3.ru + релей на example4.ru (exchange), и такие роутеры:

Код: Выделить всё

begin routers

#запрещаем отправку писем со старых отключённых доменов
block_outgoing_mail_from_domain:
    driver = redirect
    domains = ! +local_domains
    senders = *@lsearch;/etc/exim/blocked.domains
    allow_fail = yes
    data = :fail: You can not send emails from this mailbox, contact your support. (Rassilka pisem s dannogo yaschika zapreschena, obratites v OSPTK vashego filiala)

relay_to_our_domain:
    driver = "manualroute"
    route_data = ${lookup mysql{SELECT relay_name FROM mailertable WHERE domain='${domain}'}}
    transport = remote_smtp

dnslookup:
    driver = dnslookup
    domains = ! +local_domains
    transport = remote_smtp
    ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
    no_more

system_aliases:
    driver = redirect
    allow_fail
    allow_defer
    data = ${lookup mysql{SELECT recipients FROM aliases WHERE local_part='${local_part}' AND domain='${domain}'}}

userforward:
    driver = redirect
    allow_fail
    allow_defer
    data = ${lookup mysql{SELECT recipients FROM userforward WHERE local_part='${local_part}' AND domain='${domain}'}}

#доставка писем локальным пользователям
mysqluser:
    driver = accept
    condition = ${if eq{} {${lookup mysql{SELECT home FROM users WHERE login='${local_part}' AND domain='${domain}' AND active='Y'}}}{no}{yes}}
    transport = dovecot_delivery

#доставка на Exchange
temp_manual_router:
    driver = manualroute
    transport = remote_smtp
    route_list = example1.ru mail.example4.ru
На сервере mail.example4.ru - домен example4.ru (authoritative - что-то типа local в exim), и завели example1 (internal relay - если пользователь есть в базе Exchange - доставка осуществляется ему, если нет, то письмо переадресуется на другой сервер, в нашем случае на Exim). test1@example1.ru - пользователь exim и test2@example.ru - Exchange.

При таком раскладе получается:
1. Отправляем письма с exchange (адреса типа example4.ru) - письма доходят как до test1, так и до test2 так и на внешние адреса;
2. Отправляем письма с exim'овского адреса test1 на адреса внешние и test2 - на внешний адрес доставляется, на Exchange нет - Unroutable address;
3. Отправляем письмо извне на два адреса, test1@example1.ru (пользователь exim) и test2@example.ru (Exchange) : доставка осуществляется пользователю exim, для пользователя Exchange - Unroutable address.

Подскажите - в шары долблюсь, понять не могу. Если роутер поднять выше - то доставка на exim не осуществляется.

Отправлено спустя 42 минуты 2 секунды:
Правильно ли я понимаю, что нужно написать condition для этого роутера - поиск пользователя в локальной БД, если такого нет, то роутер запускается и выполняет пересылку письма?

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Exim и новый сервер

Непрочитанное сообщение xM » 2016-01-29 14:24:28

У мну два последних роутера

Код: Выделить всё

# --- local delivery
dovecot_user:
  driver        = accept
  condition     = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
                  `address`='${quote_mysql:$local_part@$domain}' OR \
                  `address`='${quote_mysql:@$domain}'}{yes}{no}}
  transport     = dovecot_delivery

# --- delivery for Google hosted domains
smart_router:
  driver        = manualroute
#  condition    = ${if !def:h_x-spam-flag:}
#  condition    = ${if !def:h_x-exim-spam:}
  domains       = +ghs_domains
  transport     = smart_smtp
   route_list    = * aspmx.l.google.com:alt1.aspmx.l.google.com:alt2.aspmx.l.google.com:aspmx2.googlemail.com:aspmx2.googlemail.com
smart_router исправьте исходя из ваших реалий.
В smart_smtp толко одна строчка типа

Код: Выделить всё

smart_smtp:
  driver                = smtp
Он у меня отличается от remote_smtp ввиду того, что в последнем ещё и DKIM с PRVS делаются.

Отправлено спустя 13 минут 39 секунд:
Я у вас бегло взглянув не вижу ошибок в роутерах Exim.
Посмотрите, может у вас Exchange отшивает?
Либо тупо не срабатывает последний роутер в силу каких-то причин. Протрассируйте.
IT voodoo blog https://kostikov.co

crush13
проходил мимо
Сообщения: 8
Зарегистрирован: 2015-09-17 15:40:30

Exim и новый сервер

Непрочитанное сообщение crush13 » 2016-01-29 14:46:44

УИИИИиииии! Спасибо, уважаемый xM, за помощь! Всё получилось, теперь письма ходят как надо. Сделал domainlist с доменами для миграции (выборка из sql - переезжать будут два домена), создал транспорт по аналогии с вашим smart_smtp (кстати в remote_smtp у меня тоже реализован DKIM), собрал всё в роутере и пошло.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Exim и новый сервер

Непрочитанное сообщение xM » 2016-01-29 22:10:11

crush13 писал(а): Спасибо, уважаемый xM, за помощь!
Не надо оваций. ;-)
IT voodoo blog https://kostikov.co