OSEN-НИЙ SAAALEСкидка 50% на виртуальный хостинг и VDS
до 30.11.2025 Подробнее
Выберите продукт

imapsync: безопасная миграция почтовых ящиков между серверами без простоев

Практическое руководство для админов: как перенести почтовые ящики между IMAP-серверами с помощью imapsync без простоя. Планирование, настройка Dovecot/Postfix, проверка TLS и логинов, массовая миграция из CSV, автомап папок и финальный дельта-синк.
imapsync: безопасная миграция почтовых ящиков между серверами без простоев

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

Что такое imapsync и почему он удобен

imapsync — утилита, которая переносит письма и метаданные (флаги, даты) между двумя IMAP-серверами. Важная особенность: она идемпотентна и безопасна к многократным прогонам. Можно сделать «черновой» перенос заранее, а в момент переключения MX выполнить только дельту. Это позволяет добиться реального нулевого простоя для пользователей.

Имейте в виду, что imapsync работает на уровне IMAP-папок и сообщений. Он не управляет MX-записями, антиспамом, пересылками и аутентификацией SMTP. Эти шаги нужно планировать отдельно.

План миграции без простоя

  • Инвентаризация: список доменов и ящиков, объемы, квоты, используемые протоколы (IMAP/POP3), нестандартные порты и особенности провайдера.
  • Подготовка нового сервера: настроить IMAP (чаще всего Dovecot), доставку почты (Postfix + LMTP/SMTP), создать ящики и задать пароли или включить master-user/прокси-аутентификацию.
  • Первичный перенос: запустить imapsync заранее, вне пиковой нагрузки, чтобы перенести основную массу писем.
  • Периодическая дельта-синхронизация: повторять перенос с тем же набором параметров (переносится только новое/измененное).
  • Переключение входящего трафика (MX) в согласованное окно: после этого выполнить финальный дельта-прогон.
  • Наблюдение и пост-валидация: сверить количество писем по папкам, убедиться в корректности флагов и спецпапок.

Проверка TLS, логинов и дерево папок перед миграцией

Подготовка IMAP на новом сервере (Dovecot + Postfix)

Минимальный чек-лист:

  • IMAP-сервис (Dovecot) слушает нужные порты: 143 (STARTTLS) и/или 993 (IMAPS).
  • Сертификат и цепочка валидны, клиентам не нужно отключать проверку сертификата. Удобно оформить через SSL-сертификаты.
  • Пользователи заведены и могут входить. Если используете master user, проверьте, что он включен в Dovecot и имеет права на все ящики.
  • Настроены квоты и структура почтовых ящиков (формат Maildir/mdbox). Для больших ящиков mdbox часто эффективнее; см. подробное руководство по mdbox.

Если сервера еще нет, поднимите почтовый стек на VDS (см. также полный стек почты на VDS: Postfix+Dovecot+RSpamd).

Для небольших установок удобно использовать файл пользователей Dovecot. Пример генерации пароля и добавления записи:

# Сгенерировать хеш пароля
doveadm pw -s SHA512-CRYPT
# Пример строки пользователя в /etc/dovecot/users
# формат: user:{hash}:uid:gid::/home/mail/user
user1:{SHA512-CRYPT}$6$abcdef...:1001:1001::/var/mail/user1
# Проверка логина через IMAP STARTTLS
openssl s_client -starttls imap -connect 127.0.0.1:143
FastFox VDS
Облачный VDS-сервер в России
Аренда виртуальных серверов с моментальным развертыванием инфраструктуры от 195₽ / мес

Установка imapsync

На современных дистрибутивах пакет часто доступен из репозиториев:

# Debian/Ubuntu
apt update
apt install imapsync
# Alma/RHEL/Rocky 9+
dnf install imapsync

Альтернатива — установка через CPAN. Подойдет, если пакета нет или нужна свежая версия:

cpan App::cpanminus
cpanm Mail::IMAPClient JSON::WebToken Data::Uniqid Test::MockObject Unicode::String
cpanm imapsync

Базовая проверка соединений

Перед переносом убедитесь, что логин/пароль и TLS работают. У imapsync есть полезные тестовые режимы:

# Только проверка логина на обоих хостах
imapsync --host1 old.imap.local --user1 user1 --password1 'oldpass' --host2 new.imap.local --user2 user1 --password2 'newpass' --justlogin --ssl1 --ssl2
# Посмотреть дерево папок на источнике
imapsync --host1 old.imap.local --user1 user1 --password1 'oldpass' --justfolders --ssl1

Если на новом сервере используется STARTTLS на 143, замените --ssl2 на --tls2. Избегайте --nocheckcertificate и --nocheckpeer — лучше сразу обеспечить валидный сертификат.

Минимальная команда переноса

Базовый перенос одного ящика выглядит так:

imapsync --host1 old.imap.local --user1 user1 --password1 'oldpass' --host2 new.imap.local --user2 user1 --password2 'newpass' --ssl1 --ssl2 --syncinternaldates --usecache --nofoldersizes --skipsize

Что здесь важно:

  • --syncinternaldates сохраняет оригинальные даты писем.
  • --usecache ускоряет повторные прогоны (дельта-синк).
  • --nofoldersizes и --skipsize уменьшают нагрузку и ускоряют синк на больших ящиках.

Маппинг и локализация папок

Разные серверы и клиенты по-разному называют «Отправленные», «Черновики», «Спам». Чтобы не плодить дубликаты спецпапок, используйте автомап или явные правила:

# Попробовать автоматическое соответствие
imapsync ... --automap
# Явное сопоставление (пример)
imapsync ... --f1f2 "INBOX.Отправленные=INBOX.Sent" --f1f2 "INBOX.Черновики=INBOX.Drafts" --f1f2 "INBOX.Спам=INBOX.Junk" --f1f2 "INBOX.Корзина=INBOX.Trash"
# Регулярные выражения для переименования
imapsync ... --regextrans2 's,INBOX\.Отправленные$,INBOX.Sent,' --regextrans2 's,INBOX\.Черновики$,INBOX.Drafts,'

--automap часто хватает, но явные правила надежнее, особенно при смешанной локализации и старых клиентах.

Исключение папок и ограничение объема

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

# Исключить спам/корзину и папки с логами
imapsync ... --exclude '(?i)spam|junk|trash|logs'
# Не переносить письма крупнее 50 МБ
imapsync ... --maxsize 52428800

Если понадобятся вложения позже, можно выполнить второй целевой прогон по конкретным папкам.

Сохранение флагов и дедупликация

imapsync по умолчанию переносит флаги (\Seen, \Answered и др.) и пытается избегать дублей. Для более строгой дедупликации можно указать ключевые заголовки:

imapsync ... --useheader 'Message-Id' --useheader 'Date' --useheader 'Subject'

В спорных случаях лучше опираться на Message-Id и дату. Учтите, что некоторые старые письма могут не иметь Message-Id.

Контроль скорости и ограничений провайдеров

Чтобы не упереться в лимиты (количество одновременных коннектов, скорость, операции в минуту), используйте ограничители:

# Паузы между операциями (в секундах)
imapsync ... --maxsleep 2
# Ограничение пропускной способности, байт/сек
imapsync ... --maxbytespersecond 500000

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

Массовая миграция из CSV

Чаще всего нужно перенести десятки или сотни ящиков. Подготовьте CSV с полями: user1;pass1;user2;pass2. Пример скрипта:

#!/usr/bin/env bash
set -euo pipefail
HOST1="old.imap.local"
HOST2="new.imap.local"
while IFS=';' read -r U1 P1 U2 P2
do
  [ -z "$U1" ] && continue
  ts=$(date +%Y%m%d-%H%M%S)
  logfile="imapsync_${U1}_${ts}.log"
  imapsync --host1 "$HOST1" --user1 "$U1" --password1 "$P1" --host2 "$HOST2" --user2 "$U2" --password2 "$P2" --ssl1 --ssl2 --syncinternaldates --usecache --nofoldersizes --skipsize --automap --maxsleep 1 --logfile "$logfile"
done < users.csv

Распараллелить можно, разбив CSV на части и запустив несколько экземпляров скрипта. Учитывайте лимиты на число соединений и IOPS.

Массовая миграция ящиков из CSV через скрипт

Аутентификация админом (master user)

Если на источнике или приемнике включен master user/прокси-аутентификация, можно мигрировать без знания индивидуальных паролей пользователей:

# Пример: логинимся как admin, но обращаемся к почтовому ящику user1
imapsync --host1 old.imap.local --user1 user1 --authuser1 admin --password1 'adminpass' --host2 new.imap.local --user2 user1 --authuser2 admin --password2 'adminpass' --ssl1 --ssl2

Проверьте конфигурацию Dovecot на стороне источника/приемника: master user должен быть включен и ограничен по доступу. Для безопасности используйте временный пароль и отключайте его после миграции.

Хранение секретов

Никогда не храните пароли в истории команд и общедоступных файлах. imapsync поддерживает --passfile1/--passfile2 — путь к файлам с паролями (права 600). В сценариях CI подойдут переменные окружения и изолированный раннер.

Дерево папок и предсоздание структуры

Если нужно только создать папки на приемнике, без копирования писем:

imapsync --host1 old.imap.local --user1 user1 --password1 'oldpass' --host2 new.imap.local --user2 user1 --password2 'newpass' --ssl1 --ssl2 --justfolders --automap

Это удобно для прогонки автомапа и проверки спецпапок до переноса контента.

Валидация: сверка количества писем

Перед свитчем полезно сравнить размеры папок на источнике и приемнике:

# Сверка на источнике
imapsync --host1 old.imap.local --user1 user1 --password1 'oldpass' --ssl1 --justfoldersizes --nofoldersizes
# Сверка на приемнике
imapsync --host2 new.imap.local --user2 user1 --password2 'newpass' --ssl2 --justfoldersizes --nofoldersizes

Разница в количестве сообщений после первичных прогонов — норма. После финального дельта-прогона значения должны совпасть (за исключением преднамеренно исключенных папок/сообщений).

Финальный дельта-синк и переключение MX

Типовой порядок действий в день миграции:

  1. Остановить активные клиенты на источнике (по возможности) или предупредить пользователей о коротком окне.
  2. Запустить дельта-синхронизацию теми же командами imapsync.
  3. Переключить входящую почту на новый сервер (изменение MX). Дождаться стабилизации потока писем на приемнике.
  4. Сделать заключительный прогон imapsync, чтобы забрать письма, пришедшие в момент свитча.

Опция --delete2 удаляет на приемнике письма, которых нет на источнике. Для миграции она обычно не нужна и может быть опасной. Включайте ее только после 100% уверенности, что источник «заморожен» и в нем нет новых изменений.

Траблшутинг: частые проблемы

  • Ошибка TLS или самоподписанный сертификат: используйте валидный сертификат. Временные флаги отключения проверки годятся только для диагностики.
  • «Too many simultaneous connections»: уменьшите параллелизм, добавьте --maxsleep, отключите подсчет размеров (--nofoldersizes).
  • «BYE LOGIN disabled»: на источнике может быть ограничение на прямые логины. Проверьте политику, включите доступ или используйте master user.
  • Дубли писем: настройте --useheader для дедупликации и избегайте параллельных запусков по одному и тому же ящику.
  • Неверные спецпапки: используйте --automap и/или явный --f1f2/--regextrans2.

Оптимизация производительности

  • Формат хранилища: для больших ящиков mdbox в Dovecot экономит inode и ускоряет операции (детали в руководстве по mdbox).
  • Квоты: настройте квоты на приемнике заранее, чтобы не получить отказы во время записи (см. заметки по чистке предупреждений Quota2 в этой статье).
  • Кэширование imapsync: храните кэш на локальном SSD, добавьте мониторинг места.
  • Сократите лишние операции: исключите мусорные папки, ограничьте размер, перенесите старые архивы отдельно в ночное окно.

Безопасность и комплаенс

  • Пароли храните в отдельных файлах с правами 600 или в переменных окружения ограниченного пользователя.
  • Логи imapsync могут содержать конфиденциальные метаданные (имена папок). Ограничьте доступ и срок хранения.
  • После завершения миграции отключите master user, временные учетные записи и доступы.

Чек-лист перед свитчем

  • Проверены логины и TLS на обоих серверах (--justlogin).
  • Созданы и проверены спецпапки (--justfolders, --automap).
  • Выполнен первичный перенос и дельта-синхронизации.
  • Сверены размеры папок (--justfoldersizes).
  • План переключения входящей почты согласован, есть окно и ответственные.
  • Готов план отката и сохранены старые данные.

Итоги

imapsync — надежный и гибкий инструмент для безостановочной миграции IMAP-почты. Ключ к успеху — тщательная подготовка (аутентификация, TLS, спецпапки), многоразовая дельта-синхронизация и аккуратный финальный свитч. Следуя описанному плану, вы перенесете десятки и сотни ящиков без простоев и неприятных сюрпризов.

Поделиться статьей

Вам будет интересно

DMARC: rua, p=quarantine и p=reject — как включить без потери доставляемости OpenAI Статья написана AI (GPT 5)

DMARC: rua, p=quarantine и p=reject — как включить без потери доставляемости

Пошаговое руководство для админов: что такое DMARC и агрегированные отчёты rua, как правильно оформить rua=mailto, собрать XML-отч ...
Floating IP для Nginx: keepalived VRRP, healthcheck и быстрый failover OpenAI Статья написана AI (GPT 5)

Floating IP для Nginx: keepalived VRRP, healthcheck и быстрый failover

Пошагово строим отказоустойчивый фронтенд на двух серверах Nginx с общим floating IP. Настраиваем keepalived (VRRP), HTTP health c ...
SYNPROXY в nftables: защита VDS от TCP SYN flood пошагово OpenAI Статья написана AI (GPT 5)

SYNPROXY в nftables: защита VDS от TCP SYN flood пошагово

SYN flood забивает TCP-очереди и conntrack на VDS, съедая CPU. SYNPROXY в nftables отсекает мусор до TCP-стека. Разбираем принцип, ...