Миграция с Exchange на Postfix + Dovecot — АйТи Фреш
Москва, Щёлковское шоссе, д. 92, корп. 7 · Пн–Пт 9:00–19:00 · +7 903 729-62-41
· 20 мин чтения

Миграция с Microsoft Exchange на Postfix + Dovecot: пошаговый план

Миграция с Microsoft Exchange на Postfix + Dovecot: пошаговый план

Мы перевели на open-source около тридцати корпоративных почтовых систем с Exchange — от офисов на пятнадцать ящиков до холдингов с пятьюстами пользователями. Причины у всех разные: сгоревшие лицензии, скорый конец поддержки Exchange 2016, санкции и полный отказ от Microsoft, усталость от «особенностей» AD-интеграции.

Архитектура Postfix + Dovecot

Минимальный боевой стек:

План миграции

  1. Начинаем с инвентаризации. Нам нужно чётко понять: сколько всего у вас почтовых ящиков, каков их общий объём, есть ли шаренные ящики, настроены ли списки рассылки или общие календари?
  2. Далее — устанавливаем новый сервер, работающий параллельно. Важно: IP-адрес и MX-записи на этом этапе мы пока не трогаем.
  3. Затем приступаем к настройке: Postfix, Dovecot, DKIM, Rspamd, TLS – всё это тщательно конфигурируется.
  4. Не спешим! Сначала делаем пробную миграцию: переносим 2–3 тестовых ящика, используя проверенный инструмент imapsync.
  5. После успешного теста проводим полную синхронизацию всех ящиков. Обычно это происходит ночью, чтобы минимизировать влияние на работу.
  6. Затем переносим все распределения, алиасы и шаренные почтовые ящики.
  7. Финальный синк дельты.
  8. Смена MX, SPF, DKIM — DNS-переключение.
  9. На финальном этапе — перенастраиваем клиентские программы: Outlook, Thunderbird и, конечно, почту на всех телефонах.
  10. А старый Exchange? Его мы оставляем ещё на неделю в режиме read-only. Это наша страховка на случай, если что-то пойдёт не так.

Установка на Ubuntu 22.04

sudo apt update
sudo apt install -y postfix postfix-mysql dovecot-core dovecot-imapd \
  dovecot-pop3d dovecot-mysql opendkim opendkim-tools rspamd redis-server \
  clamav clamav-daemon certbot

# При установке postfix: Internet Site, mail.company.ru

Postfix — основной конфиг

Файл /etc/postfix/main.cf, ключевые параметры:

myhostname = mail.company.ru
mydomain = company.ru
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = localhost
home_mailbox = Maildir/

# Виртуальные домены
virtual_mailbox_domains = mysql:/etc/postfix/mysql-domains.cf
virtual_mailbox_maps  = mysql:/etc/postfix/mysql-mailboxes.cf
virtual_alias_maps    = mysql:/etc/postfix/mysql-aliases.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp

# TLS
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.company.ru/fullchain.pem
smtpd_tls_key_file  = /etc/letsencrypt/live/mail.company.ru/privkey.pem
smtpd_tls_security_level = may
smtp_tls_security_level = may
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1

# Ограничения
smtpd_helo_required = yes
smtpd_recipient_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_destination,
  reject_rbl_client zen.spamhaus.org,
  check_policy_service unix:private/policyd-spf

# Milters для DKIM и Rspamd
milter_default_action = accept
smtpd_milters = unix:/var/run/opendkim/opendkim.sock, inet:localhost:11332
non_smtpd_milters = $smtpd_milters

Dovecot — IMAP/LMTP

# /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/vmail/%d/%n/Maildir

# /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login
!include auth-sql.conf.ext

# /etc/dovecot/conf.d/10-master.conf
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

База MySQL для пользователей

CREATE DATABASE mailserver;
CREATE TABLE mailserver.domains (domain VARCHAR(255) PRIMARY KEY);
CREATE TABLE mailserver.mailboxes (
  email VARCHAR(255) PRIMARY KEY,
  password VARCHAR(255) NOT NULL,
  quota BIGINT DEFAULT 5368709120
);
CREATE TABLE mailserver.aliases (
  source VARCHAR(255), destination VARCHAR(255)
);

INSERT INTO domains VALUES ('company.ru');
INSERT INTO mailboxes VALUES (
  'ivanov@company.ru',
  '{SHA512-CRYPT}' || crypt('pass', '$6$salt$'),
  5368709120);

DKIM подпись

sudo mkdir -p /etc/opendkim/keys/company.ru
cd /etc/opendkim/keys/company.ru
sudo opendkim-genkey -d company.ru -s mail -b 2048
sudo chown opendkim:opendkim mail.private

# /etc/opendkim.conf
Domain     company.ru
KeyFile    /etc/opendkim/keys/company.ru/mail.private
Selector   mail
Socket     local:/var/run/opendkim/opendkim.sock

sudo systemctl enable --now opendkim

Публичный ключ (файл mail.txt) добавляем в DNS как TXT-запись mail._domainkey.company.ru.

DNS: MX, SPF, DKIM, DMARC

ЗаписьТипЗначение
company.ruMX 10mail.company.ru
mail.company.ruAВнешний IP сервера
company.ruTXTv=spf1 mx -all
mail._domainkeyTXTv=DKIM1; k=rsa; p=...
_dmarcTXTv=DMARC1; p=quarantine; rua=mailto:dmarc@company.ru
PTR (у провайдера)PTRmail.company.ru

PTR-запись, или reverse DNS, — это как визитная карточка вашего сервера. Без неё почтовые гиганты вроде Mail.ru и Gmail просто не будут считать его «приличным». А это значит что? Правильно: большинство ваших писем отправятся прямиком в спам!

Перенос ящиков через imapsync

# Скрипт для массового переноса
while IFS=, read -r user pass; do
  imapsync \
    --host1 exchange.company.ru --user1 "$user" --password1 "$pass" \
    --ssl1 --authmech1 PLAIN \
    --host2 mail.company.ru --user2 "$user" --password2 "$pass" \
    --ssl2 --authmech2 PLAIN \
    --exclude 'Public Folders' \
    --regextrans2 's/INBOX\.//' \
    --automap --syncinternaldates
done < users.csv

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

Реальный кейс: холдинг 120 ящиков, Exchange 2013

Хотите историю? В 2024 году к нам обратилась крупная строительная фирма из Москвы. Ситуация была типичная, но неприятная: 120 ящиков на Exchange 2013, лицензии давно закончились, а апгрейд до 2019 версии влетал в копеечку. Плюс их сервер постоянно падал, вот незадача! Мы не просто не растерялись — мы действовали быстро. Всего за семь рабочих дней развернули для них полноценную инфраструктуру: Postfix, Dovecot, Rspamd и SOGo. И всё это — на нашем собственном сервере Dell Xeon Platinum 8280, размещенном в надёжном дата-центре МТС Москва. Мы даже настроили S/MIME и подключили все телефоны через ActiveSync-шлюз Z-Push. Проблема? Решена!

Как же выглядел сам переезд? Сначала мы запустили ночную миграцию ящиков. Это 120 аккаунтов, каждый от 2 до 8 ГБ – в сумме около 700 ГБ данных! Утром в субботу сделали финальную синхронизацию. И ровно в 10:00 той же субботы мы переключили MX-записи. Результат? Уже к понедельнику все сотрудники этой фирмы спокойно работали! Привычный Outlook 2021 с IMAP и удобный SOGo Webmail были к их услугам. Все разовые работы обошлись клиенту в 185 000 рублей, плюс 32 000 рублей в месяц за наше постоянное сопровождение.

Грабли, на которые наступают при миграции

Первые дни после смены MX: как я диагностирую доставку

В первые сутки после переключения MX основные вопросы от пользователей — «письмо ушло, но не дошло» и «не вижу новых писем». Разбираю их по одной схеме: сначала очередь Postfix, потом подключения к Dovecot, потом эффективная конфигурация.

# Очередь в формате mailq: что застряло и почему
postqueue -p
# Попробовать доставить всё из очереди ещё раз
postqueue -f
# Повторная доставка конкретного письма
postqueue -i 4BKqzv2GmTz9sVX
# Посмотреть само письмо в очереди с заголовками
postcat -q 4BKqzv2GmTz9sVX
# Удалить из очереди всё отложенное (например, спам-рассылку со взломанного ящика)
postsuper -d ALL deferred
# Только параметры, отличные от умолчаний
postconf -n

Причина отложенной доставки видна прямо в выводе postqueue -p в скобках под письмом — отказ DNS, таймаут соединения, отказ принимающего сервера. postqueue -f я не запускаю по кругу: документация Postfix прямо предупреждает, что частый flush недоставляемой почты ухудшает доставку всей остальной. postsuper -d ALL deferred удаляет письма безвозвратно, поэтому перед ним я выгружаю список очереди в файл.

# Кто сейчас подключён к Dovecot и по какому протоколу
doveadm who
# Настройки Dovecot, отличные от умолчаний
doveconf -n

doveadm who показывает, какие пользователи, с каких адресов и к какому сервису (IMAP, POP3) сейчас подключены — так я вижу, кто из сотрудников ещё не перенастроил почтовый клиент. doveconf -n и postconf -n — первое, что я прикладываю к любому разбору: в выводе только изменённые параметры, и по нему быстро видно расхождение с планом миграции.

Чек-лист перед финальным переключением

FAQ — миграция почты с Exchange

Можно ли мигрировать без простоя?
Да. Параллельно поднимается новый сервер, работает в режиме relay с Exchange, копируются ящики через imapsync. В день X меняется MX-запись, пользователи переподключают клиентов. Простой — несколько минут при смене MX.
Как перенести ящики пользователей?
Утилитой imapsync: подключается к Exchange по IMAP, читает все папки и сохраняет в Dovecot. Скрипт разворачивается в цикл по всем ящикам. Синхронизация обычно идёт всю ночь для сотни ящиков.
Outlook и календари — как быть?
Без Exchange ActiveSync календари нужно переносить в CalDAV-сервер (Radicale, SOGo, Nextcloud). Outlook умеет IMAP+SMTP, но календари в нём — Google Calendar addon или SOGo-коннектор. Часть клиентов переезжает на Thunderbird с CardDAV/CalDAV.
Что с SPF, DKIM, DMARC?
После смены сервера обязательно обновить SPF (IP нового сервера), перегенерировать DKIM (ключ в OpenDKIM) и оставить DMARC на p=none или quarantine. Иначе письма попадут в спам у Gmail и mail.ru.
Сколько времени занимает миграция для 50 пользователей?
3–5 рабочих дней на подготовку (сервер, DNS, антиспам, тесты), 1 ночь на финальный синк и переключение MX, 1–2 дня на поддержку пользователей. Бюджет у нас — от 85 тыс. руб. за 50 ящиков.

Источники

Столкнулись с похожей задачей? Обращайтесь — решим

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

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

📄
Скачайте подробный разбор в PDF Кейсы, статистика, типовые ошибки и чек-лист самопроверки — 12 страниц
Скачать PDF

Подпишитесь на рассылку ITfresh

Мы делимся опытом: раз в неделю рассылаем практические гайды. Это настоящая находка для руководителей IT-отделов и сисадминов. Что внутри? Все, что нужно: от безопасности и 1С до миграций и резервных копий. Только проверенные лайфхаки из наших реальных проектов!

Письмо придёт в течение минутыНе нашли его во «Входящих» — загляните в папку «Спам» или «Промоакции» и нажмите «Не спам». Так все следующие выпуски будут приходить прямо в основную почту.
Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.