LINUX.ORG.RU
ФорумAdmin

Перенос почты на новый сервер sendmail -> Zimbra

 , , ,


0

1

Есть, вроде бы, не хитрая задача, перенести несколько десятков почтовых ящиков с одного сервера (sendamil + dovecot), назовем его «старый сервер» на другой сервер (Zimbra 8), назовем его «новый сервер».

Перенести все ящики одномоментно не представляется возможным, поэтому необходимо добиться такой конфигурации, когда функционируют оба сервера. С настройкой Zimbra проблемы нет, там легко можно настроить так, чтоб почта для тех учетных записей которые присутствуют на Zimbra сервере принималась им же, а для тех которые на Zimbra сервере отсутствуют пересылалсь на другой сервер. Или же как вариант для любой учетной записи можно индивидуально указать сервер для доставки. Т.е. можно создать такие же учетные записи как и на старом сервере и включить для них переадресацию на старый, а затем по одному уже переносить их на новый.

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

Суть проблемы - sendmail, у меня не выходит настроить его так, что бы почта для определенного домена отправлялась через внешний сервер, но при этом продолжали приниматься входящие сообщения для этого домена. Если убрать домен из «local-host-names» - то сервер прекращает принимать почту для домена, а если домен присутствует в «local-host-names» то игнорируются записи из «mailertable» которые указывают отправлять почту для домена через внешний сервер.

В итоге вкратце вопросы в следующем, как для sendmail настроить:
1) Отправку всей почты для определенного домена через внешний сервер, с сохранением возможности получать входящие письма для этого домена.
либо
2) Пересылку почты на новый сервер индивидуально для каждой учетной записи.

Задачка не хитрая. Допустим твой основной домен xxx.com - пусть на него снаружи приходит вся почта. Внешний сервер принимает ее и пересылает почту дальше на внутренний но уже с конвертацией имени домена т.е. из aaa@xxx.com почта пересылается на внутренний сервер aaa@zzz.xxx.com . zzz.xxx.com является для внутреннего сервера локальным, поэтому почта принимается на ура. А отправляется на aaa@xxx.com этот не является локальным и поэтому она сразу уходит на smart_host(внешний сервер) который знает куда её дальше направить - ну или сконвертировать и вернуть ее снова на нужный внутренний сервер. Ну а для каждой учетной записи, так алиасы всевозможные и virtuusertables помогут.

merlin-shadow ()
Ответ на: комментарий от merlin-shadow

Спасибо, над таким вариантом не думал, но похоже sendmail не может для одного домена принимать почту как локальную, а отправлять через внешний сервер, мне по крайней мере не удалось найти, как это настроить, возможно если править что-то непосредственно в cf файле это и реализуемо.

Hatifnatt ()
Ответ на: комментарий от Hatifnatt

Причитай еще раз внимательно то, что я написал, там в cf ничего править не нужно, немного mc подшаманить. Если что непонятно по конкретной реализации спрашивай...

Кстати на счет переноса всех ящиков и сразу, это возможно, на днях перенос 125 ящиков и 52Гб почты занял 3.5 часа, но все автоматом. imapsync + немного упражнений с perl и все ок.

merlin-shadow ()
Ответ на: комментарий от merlin-shadow

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

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

Hatifnatt ()
Ответ на: комментарий от Hatifnatt

Ну по поводу переноса, в нете есть скрипт который позволяет перенести и пользователей из другой БД причем почти любой и в любой форме, а также на лету поменять им домены... Совсем немного танцев с бубном вокруг перлового скрипта и все.

merlin-shadow ()

В итоге пришел к такому решению, подтолкнул меня к merlin-shadow, за что ему спасибо. На Zimbra сервере был настроен алиас для переносимого домена, т.е. допустим домен mydoman.tld, в настройках добавляем к нему алиас tmp.mydomain.tld таким образом все пользователи получают e-mail адрес на домене-алиасе. Для домена-алиаса прописываем MX записи ведущие на Zimbra сервер. На Zimbra сервере организуем пересылку всех писем для нелокальных аккаунтов на основной сервер, делается это следующими командами, выполнять их надо от имени пользователя zimbra:

zmprov md mydoman.tld zimbraMailCatchAllAddress @mydoman.tld
zmprov md mydoman.tld zimbraMailCatchAllForwardingAddress @mydoman.tld
zmprov md mydoman.tld zimbraMailTransport smtp:mail.mydoman.tld

После этого Zimbra сервер при получении (или отправке) письма на нелокальный аккаунт на домене mydomain.tld будет пересылать это письмо на Sendmail сервер который его и примет.

Далее начинаем переносить пользователей, шаги следующие:

  1. Создаем пользователя на Zimbra сервере user@mydomain.tld
  2. На Sendmail сервере настраиваем форвардинг почты на user@tmp.mydomain.tld
  3. Переносим всю почту для пользователя со старого сервера на новый с помощью, к примеру, imapsync
  4. Перенастраиваем клиентское ПО для использования нового сервера, т.к. я менял имена учетных записей это в любом случае пришлось бы делать.

Таким образом получаем следующую последовательность прохождения письма для перенесенного аккаунта:

Internet ->
Sendmail ->
Forwarding to Zimbra ->
Accept and store to mailbox by Zimbra

Для не перенесенного аккаунта:

Internet ->
Accept and store to mailbox by Sendmail

Для отправленного с Zimbra письма на не перенесенный аккаунт:

Zimbra ->
Account not local, finds domain transport setting ->
Forwarding to Sendmail

Для отправленного с Zimbra письма на перенесенный аккаунт:

Zimbra ->
Account local ->
Accept and store to mailbox by Zimbra

Таким образом мы имеем 2 работающих сервера и спокойно можем переносить аккаунты хоть поштучно, в моем случае аккаунтов было не много, поэтому большинство действий выполнял вручную, но вообще все можно автоматизировать конечно Zimbra вполне управляется из командной строки.

После того как все учетные записи перенесены остается несколько действий.

  1. Изменить MX записи для основного домена чтоб они вели на Zimbra сервер.
  2. Удалить правила, что прописывали выше для пересылки писем для не локальных аккаунтов на другой сервер
    zmprov md mydoman.tld zimbraMailCatchAllAddress ""
    zmprov md mydoman.tld zimbraMailCatchAllForwardingAddress ""
    zmprov md mydoman.tld zimbraMailTransport lmtp:zimbra.mydomain.tld:7025

Возможно подробности в которых я все описал избыточны, но лично у меня все эти почтовые потоки никак в голове не укладывались, вероятно кому-то еще такая подробность тоже не помешает.

Split Domain - Zimbra Wiki, есть важное замечание про зацикливание писем при не корректной настройке.

Hatifnatt ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.