· 20 мин чтения

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

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

Привет! Я — Семёнов Евгений Сергеевич, и я руковожу компанией ITFresh. За 15 лет работы я лично курировал переводы примерно тридцати корпоративных почтовых систем с Exchange на open-source. Представьте: это были и небольшие офисы с пятнадцатью ящиками, и огромные холдинги, где больше пятисот пользователей! Причины миграции, поверьте, у всех абсолютно разные. Кому-то надоело продлевать лицензии, они просто "сгорели", или 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 рублей в месяц за наше постоянное сопровождение.

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

Переведём с Exchange на Linux-почту под ключ

За эти 15 лет мы, можно сказать, съели собаку на миграциях десятков корпоративных почт. И главное — ни одной потери письма, никакого долгого простоя, а все календари и шаренные ящики остаются на своих местах. Вся наша инфраструктура базируется на собственных серверах Dell Xeon Platinum 8280 с 40G Mellanox, которые расположены в дата-центре МТС Москва. Можем предложить вам бесплатный расчёт миграции всего за час — обращайтесь!

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

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 ящиков.

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

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

Реквизиты оператора персональных данных

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