Миграция на Zimbra при помощи imapsync

    Помимо таких долгожданных функций как Иерархическая адресная книга и официальная поддержка Ubuntu 18.10 LTS, релиз Zimbra 8.8.12 принес нам известия о грядущем снятии с поддержки целого ряда утилит, необходимых для миграции с других почтовых систем на Zimbra Collaboration Suite. В частности, поддержка ZCS Migration Wizard for Domino была полностью прекращена, а ZCS Migration Wizard for Exchange теперь будет поддерживать лишь импорт файлов PST из Outlook. Для осуществления полноценной миграции разработчики Zimbra Collaboration Suite предлагают воспользоваться платными онлайн-сервисами, однако далеко не каждое предприятие из соображений безопасности готово предоставить данные своих почтовых ящиков третьим лицам, и далеко не каждое предприятие может позволить себе дополнительные траты, связанные с миграцией на Zimbra. Специально для таких пользователей существует программой imapsync, которая способна обеспечить надежную инкрементальную миграцию с любой почтовой системы на Zimbra.

    image

    Imapsync является бесплатной и свободной утилитой, доступной в репозиториях любого официально поддерживаемого Zimbra дистрибутива Linux. Предназначение этой программы заключается в переносе электронной почты между различными почтовыми серверами и справляется она с ней на отлично. Благодаря гибкости настроек перенос почты может осуществляться инкрементально и в полностью автоматическом режиме. Давайте же посмотрим, как можно использовать imapsync для миграции c Lotus Domino и MS Exchange на Zimbra Collaboration Suite.

    Миграция с MS Exchange на Zimbra


    Для того, чтобы миграция электронной почты прошла успешно, необходимо выполнить ряд подготовительных мероприятий. В первую очередь нам необходимо создать на сервере Zimbra тех же пользователей, что на сервере MS Exchange с теми же самыми паролями. В выполнении этой задачи может сильно пригодиться автонастройка пользователей Zimbra при помощи AD. Процесс такой автонастройки описан в одной из предыдущих наших статей.

    После того как все учетные записи из AD или Exchange перенесены, необходимо установить на сервере с Zimbra пакет imapsync. Если вы используете Ubuntu в качестве ОС для Zimbra, то установить программу можно при помощи команды sudo apt-get install imapsync -y, в CentOS и RHEL установка будет осуществляться при помощи команды sudo yum install imapsync -y.

    Когда установка пакета и всех зависимостей будет завершена, перейдем к настройке сервера Exchange. На нем нам необходимо будет включить службу IMAP4. Делается это при помощи запуска файла services.msc, после чего необходимо перейти в Средства > Службы -> IMAP4 Microsoft Exchange -> Старт. После этого потребуется дать администратору доступ к почтовым ящикам пользователей, чтобы избежать использования пользовательских паролей при миграции, а также отключите, либо настройте политики ограничения скорости таким образом, чтобы они не стали помехой при миграции. Теперь можно приступать к переносу почты с сервера на сервер.

    В нашей инфраструктуре MS Exchange будет находиться на хосте exchange.company.ru, а Zimbra будет располагаться на хосте zimbra.company.ru. Перенос пользователей будет осуществляться по одному при помощи командной строки, в которой мы будем исполнять утилиту imapsync с рядом необходимых для миграции параметров. В первую очередь следует отметить, что в Zimbra, как и в MS Exchange, администраторские аккаунты имеют доступ к содержимому всех почтовых ящиков пользователей, а это означает, что для осуществления миграции на новый почтовый сервер системному администратору не потребуется знать пароли от аккаунтов обычных пользователей. Именно поэтому миграция каждого пользователя с MS Exchange на Zimbra будет осуществляться при помощи команды следующего вида:

    imapsync --host1 exchange.company.ru --user1 "xxxxx" --authuser1 "yyyyy" --password1 "zzzzz" --nosslcheck --host2 zimbra.company.ru --user2 "XXXXX"  --authuser1 "YYYYY" --password2 "ZZZZZ"

    В данной команде мы указываем исходный хост (--host1), с которого imapsync будет подхватывать данные аккаунта, а также хост (--host2), на который эти данные будут записываться. Также мы указываем имя пользователя (--user1) на первом хосте и соответствующее ему имя пользователя (--user2) на втором хосте. Для того, чтобы получить доступ к его данным мы указываем имя администраторского аккаунта (--authuser1) и пароль администратора (--password1) первого хоста, а для того, чтобы осуществить запись передаваемых данных, имя администраторского аккаунта (--authuser2) и пароль администратора (--password2) второго хоста.

    В идеальном мире такой команды было бы достаточно для переноса данных пользователя между серверами с MS Exchange и Zimbra, но, как это часто бывает, различия между решениями вносят свои коррективы и поэтому простой перенос данных из MS Exchange приведет к возникновению чудовищного хаоса в почтовых ящиках Zimbra. Камнем преткновения в данном случае являются отличающиеся названия папок в почтовых ящиках. Для того, чтобы при переносе данных не возникало путаницы, необходимо привести нашу команду к примерно следующему виду:

    imapsync --subscribe_all --maxmessagespersecond 4 --addheader --f1f2 "Inbox=INBOX" \
    --f1f2 "Sent Items=Sent" --f1f2 "Sent items=Sent" --exclude "^Journal|^Tasks|^Trash|Contacts|Calendar|RSS Feeds" \
    --useheader "Message-ID" --buffersize 8192000 --nosyncacls  --allowsizemismatch --usecache --syncinternaldates --skipsize --nofoldersizes \
    --tls1 --port1 143 --user1 "xxxxxxxxxx" --authuser1 "besadmin" --password1 "XXXXXXX" \
    --host2 'xxxxxxx' --user2 "xxxxxx" --authuser2 "XXXXXX" --password2 "XXXX" --tls2 --port2 7143 \
    --regextrans2 "s/Inbox1/INBOX/i" --regextrans2 "s/Sent Items/Sent/i" --regextrans2 "s/sent-mail/Sent/i" --regextrans2 "s/Deleted Items/Trash/i" --regextrans2 "s/Deleted Messages/Trash/" \
    --delete2duplicates --timeout 600 --pidfile "impasync.local.pid" --logfile "imapsync.log" --sep1 "/" --errorsmax "100"

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

    Пусть обилие параметров, с которыми запускается imapsync вас не пугает. большинство из них нужны именно для того, чтобы при переносе папок из почтового ящика не возникало путаницы и все элементы из MS Exchange перенеслись в Zimbra. Например, параметр --subscribe_all позволяет imapsync получить все папки аккаунта, чтобы в дальнейшем с ними работать. Параметр --f1f2 позволяет изменить название папки при синхронизации. То есть при синхронизации, к примеру. папка Sent items изменит название на Sent, что позволит отлично вписать ее содержимое в структуру папок Zimbra Collaboration Suite. Параметр --regextrans2 также позволяет изменять названия папок и основан на механизме regex языка программирования Perl, поэтому тем, кто знаком с данным языком будет легко освоить этот параметр.

    Для того, чтобы объяснить, что делают параметры --addheader и --useheader, необходимо будет углубиться в то, как именно происходит синхронизация писем в imapsync. Дело в том, что для проведения синхронизации imapsync необходимо идентифицировать письма на обоих серверах, чтобы принять решение о том, стоит их синхронизировать или нет. Для их сверки эта утилита использует такие параметры, как «Message-Id:» и «Received:» (идентификационный номер и время получения), которые отсутствуют у таких электронных писем, как, например, черновики. Для того, чтобы нормально их синхронизировать и нужна команда --addheader. Она позволяет добавлять в них идентификационный номер для того, чтобы как-то идентифицировать и сравнивать такие письма при синхронизации. Параметр же --useheader позволяет сравнивать письма по лишь одному из двух параметрам при синхронизации.

    После написания идеального скрипта, который позволит нам переносить идеально переносить аккаунты из MS Exchange в Zimbra, остается актуальной значительная проблема, которая связана с тем, что нам по-прежнему приходится переносить пользователей между серверами по одному. Это не очень оптимально, особенно в тех компаниях, где много сотрудников и количество почтовых ящиков измеряется тысячами. Однако этот процесс можно значительно оптимизировать, создав список учетных записей, а затем написать небольшой скрипт, который самостоятельно переносит почту на основании имен аккаунтов. Для этого мы создадим файл imap_users и добавим в него все необходимые данные в следующем виде:

    domains=(
    domain1\
    domain2)
    
    users=(
    user1@domain1\
    user2@domain1\
    user3@domain1\
    user1@domain2\
    user2@domain2\
    user3@domain2)

    После этого займемся написанием собственно скрипта. У нас получилось что-то вроде этого:

    . imap_users
    src_srv = exchange.company.ru
    dest_srv = zimbra.company.ru
    for ((i = 0; i < ${#users[@]}; i++ ))
    do
    /usr/bin/imapsync --subscribe_all --maxmessagespersecond 4 --addheader --f1f2 "Inbox=INBOX" \
    --f1f2 "Sent Items=Sent" --f1f2 "Sent items=Sent" --exclude "^Journal|^Tasks|^Trash|Contacts|Calendar|RSS Feeds" \
    --useheader "Message-ID" --buffersize 8192000 --nosyncacls  --allowsizemismatch --usecache --syncinternaldates --skipsize --nofoldersizes \
    --tls1 --port1 143 --host1 $src_srv --user1 ${users[$i]} --authuser1 "besadmin" --password1 "XXXXXXX" --nosslcheck \
    --host2 $dest_srv --user2 ${users[$i]} --authuser2 "XXXXXX" --password2 "XXXX" --tls2 --port2 7143 \
    --regextrans2 "s/Inbox1/INBOX/i" --regextrans2 "s/Sent Items/Sent/i" --regextrans2 "s/sent-mail/Sent/i" --regextrans2 "s/Deleted Items/Trash/i" --regextrans2 "s/Deleted Messages/Trash/" \ 
    --delete2duplicates --timeout 600 --pidfile "impasync.local.pid" --logfile "imapsync.log" --sep1 "/" --errorsmax "100"
    done

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

    Миграция с Lotus/Domino на Zimbra


    Во многом процесс миграции с почтовой системы от IBM с помощью imapsync повторяет процесс миграции с MS Exchange и любой другой почтовой системы. Однако в процессе непосредственной миграции у многих администраторов возникает ошибка с обрывом соединения по IMAP и, соответственно, прекращением синхронизации. При этом в логах никакого сообщения об ошибке не появляется. Если в ходе миграции с Lotus/Domino вы столкнулись с данной проблемой, то решить данный вопрос помогут следующие действия:

    • Запустите Lotus Notes с администраторскими привилегиями и зайдите в Адресную книгу.
    • В настройках Адресной книги измените формат сообщений по умолчанию на «Предпочтительно MIME»
    • Во все том же Lotus Notes, запущенном с администраторскими привилегиями измените формат базы данных пользователей на Mail(R6), которая берется с сервера, а не из почтового клиента
    • Выключите маршрутизатор Lotus Domino Router из консоли администрирования Domino при помощи команды «tell router quit»
    • Упакуйте базу данных пользователей из консоли администрирования Dominoпри помощи команды «load compact userdb.nsf»
    • Проверьте базу данных на ошибки, запустив из консоли Domino (не из администраторской консоли) команду «fixup userdb.nsf»
    • Из консоли администрирования Domino запустите команду «convert -e userdb.nsf», чтобы приготовить базу данных для передачи по imap
    • Из консоли администрирования Domino запустите команду «convert -h userdb.nsf» чтобы добавить imap-заголовки ко всем сообщениям.

    После выполнения всех этих действий перенос почты c Lotus/Domino на Zimbra посредством imapsync должен пройти без каких-либо проблем.

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

    Напомним, что миграцию между серверами Zimbra можно осуществлять при помощи бесплатной утилиты Zextras Migration Tool, которую вы можете скачать на официальном сайте компании Zextras.

    По всем вопросам, связанными c Zextras Suite вы можете обратиться к Представителю компании «Zextras» Катерине Триандафилиди по электронной почте katerina@zextras.com
    Zextras
    58,89
    Zimbra и модульное расширение Zextras Suite
    Поделиться публикацией

    Комментарии 5

      0
      в MS Exchange у администратора по default нет доступа внутрь почтовых ящиков пользователей. Надо назначать разрешения.
        0
        Спасибо, добавили информацию об этом в статью.
        0

        Ограничение на количество копируемых писем уже убрали?

          0

          Сделайте, пожалуйста, инструмент для обратного процесса — будет более востребованным.

            0
            Разве что среди тех, кто не умеет считать свои деньги. На сегодняшний день Zimbra OSE с дополнениями Zextras является полнофункциональным и безопасным решением для совместной работы с крайней низкой стоимостью владения. Кроме того, на носу стабильный LTE-релиз Zimbra 8.8.15, который можно смело внедрять в продакшен и использовать несколько лет без каких-либо проблем.

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

          Самое читаемое