Миграция с Microsoft Exchange на Postfix + Dovecot: пошаговый план
Привет! Я — Семёнов Евгений Сергеевич, и я руковожу компанией ITFresh. За 15 лет работы я лично курировал переводы примерно тридцати корпоративных почтовых систем с Exchange на open-source. Представьте: это были и небольшие офисы с пятнадцатью ящиками, и огромные холдинги, где больше пятисот пользователей! Причины миграции, поверьте, у всех абсолютно разные. Кому-то надоело продлевать лицензии, они просто "сгорели", или Exchange 2016 вот-вот выйдет из поддержки. А тут ещё санкции, полный отказ от Microsoft… Или, возможно, людей просто допекло постоянно возиться с «особенностями» AD-интеграции? Так как же происходит такая миграция на самом деле?
Архитектура Postfix + Dovecot
Минимальный боевой стек:
- Postfix — SMTP-сервер (приём, отправка, релеи).
- Dovecot — IMAP/POP3, аутентификация пользователей.
- OpenDKIM — подпись исходящих писем.
- Rspamd или SpamAssassin — антиспам.
- ClamAV — антивирус.
- Roundcube или SOGo — веб-почта + календари.
- Let's Encrypt — TLS.
- Бэкап через rsnapshot или Borg.
План миграции
- Начинаем с инвентаризации. Нам нужно чётко понять: сколько всего у вас почтовых ящиков, каков их общий объём, есть ли шаренные ящики, настроены ли списки рассылки или общие календари?
- Далее — устанавливаем новый сервер, работающий параллельно. Важно: IP-адрес и MX-записи на этом этапе мы пока не трогаем.
- Затем приступаем к настройке: Postfix, Dovecot, DKIM, Rspamd, TLS – всё это тщательно конфигурируется.
- Не спешим! Сначала делаем пробную миграцию: переносим 2–3 тестовых ящика, используя проверенный инструмент imapsync.
- После успешного теста проводим полную синхронизацию всех ящиков. Обычно это происходит ночью, чтобы минимизировать влияние на работу.
- Затем переносим все распределения, алиасы и шаренные почтовые ящики.
- Финальный синк дельты.
- Смена MX, SPF, DKIM — DNS-переключение.
- На финальном этапе — перенастраиваем клиентские программы: Outlook, Thunderbird и, конечно, почту на всех телефонах.
- А старый 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.ru | MX 10 | mail.company.ru |
| mail.company.ru | A | Внешний IP сервера |
| company.ru | TXT | v=spf1 mx -all |
| mail._domainkey | TXT | v=DKIM1; k=rsa; p=... |
| _dmarc | TXT | v=DMARC1; p=quarantine; rua=mailto:dmarc@company.ru |
| PTR (у провайдера) | PTR | mail.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 рублей в месяц за наше постоянное сопровождение.
Грабли, на которые наступают при миграции
- Забыли PTR. Gmail заворачивает письма в спам без видимой причины.
- Не перенесли public folders. В Exchange был общий календарь отдела — в SOGo его ставят отдельно.
- Outlook Anywhere (RPC/HTTP) не хотят отпускать. Пользователи требуют, приходится ставить Z-Push или SOGo ActiveSync.
- Старый Outlook не работает по IMAP корректно. Outlook 2010 теряет флаги — обновляйте хотя бы до 2019.
- DMARC сразу на reject. Пока не убедились, что DKIM/SPF работают, оставьте
p=none. - Rspamd не обучен. Первые две недели много ложных срабатываний. Настройте «Обучение как спам/не-спам» через IMAP-папки.
Переведём с 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 ящиков.
