Linux

Перенос почтового сервера Postfix на новый сервер: пошаговая инструкция без потери писем

Перенос почтового сервера Postfix должен заканчиваться не красивым чек-листом, а работающей почтой. Ниже — практический сценарий для типовой связки Postfix + Dovecot на Linux: что проверить на старом сервере, что установить на новом, какие конфиги и данные переносить, как проверить SMTP/IMAP до смены MX и как откатиться.

Важно: команды выполняйте от root или через sudo. Примеры предполагают, что вы переносите собственный сервер и имеете административный доступ к обеим машинам. Не копируйте конфигурацию вслепую между сильно отличающимися версиями Postfix/Dovecot.

1. Зафиксируйте текущее состояние старого сервера

Перед изменениями сохраните версии, активные параметры, порты и очередь. Это пригодится и при переносе, и при откате.

hostnamectl
postconf mail_version
postconf -n
postconf -M
postconf -m
postqueue -p

doveconf -n
systemctl status postfix dovecot --no-pager
ss -lntp | grep -E ':(25|465|587|110|143|993|995)\b'

df -h
df -i

postconf -n показывает параметры, отличающиеся от значений по умолчанию. postconf -M показывает активные сервисы из master.cf. Если используется Dovecot, doveconf -n даёт его фактическую конфигурацию.

2. Найдите всё, от чего зависит Postfix

Одних main.cf и master.cf обычно недостаточно. Проверьте lookup-таблицы, базы пользователей, DKIM, антиспам и сертификаты.

postconf | grep -E '(_maps|transport|relayhost|smtpd_milters|non_smtpd_milters|smtpd_sasl|virtual_|alias_)'
postconf -h myhostname mydomain myorigin mydestination relayhost
postconf -h smtpd_tls_cert_file smtpd_tls_key_file
postconf -m

Если в конфигурации встречаются mysql:, pgsql:, ldap:, lmdb:, hash: или другие карты, их источники и нужные модули тоже должны переехать.

3. Сделайте резервную копию конфигурации

mkdir -p /root/mail-migration-backup
cp -a /etc/postfix /root/mail-migration-backup/
cp -a /etc/dovecot /root/mail-migration-backup/ 2>/dev/null || true
postconf -n > /root/mail-migration-backup/postconf-n.txt
postconf -M > /root/mail-migration-backup/postconf-M.txt
doveconf -n > /root/mail-migration-backup/doveconf-n.txt 2>/dev/null || true
tar -C /root -czf /root/mail-migration-backup-$(date +%F).tar.gz mail-migration-backup

Если используются Rspamd, OpenDKIM, OpenDMARC, Amavis и другие сервисы, сохраните и их конфиги. Приватные ключи храните как секреты.

4. Определите, где лежат почтовые ящики

doveconf -n | grep -E 'mail_(location|driver|path|home)|mail_home'
doveadm user user@example.com
postconf home_mailbox mail_spool_directory virtual_mailbox_base virtual_mailbox_maps

Не подставляйте путь из примера, пока не проверили реальную схему хранения.

5. Подготовьте новый сервер

Debian/Ubuntu:

apt update
apt install postfix dovecot-core dovecot-imapd dovecot-lmtpd rsync
apt install swaks

RHEL / AlmaLinux / Rocky Linux:

dnf install postfix dovecot rsync
systemctl enable postfix dovecot

Если старая система использует SQL, LDAP, LMDB, PCRE, Rspamd и т. п., установите соответствующие пакеты до переноса конфигурации.

6. Переносите конфигурацию осмысленно

cp -a /etc/postfix /root/postfix.clean
cp -a /etc/dovecot /root/dovecot.clean

diff -u /root/postfix.clean/main.cf /path/to/old/etc/postfix/main.cf
diff -u /root/postfix.clean/master.cf /path/to/old/etc/postfix/master.cf

postfix check
postconf -n
postconf -M
doveconf -n

Если проверки выдают ошибку, не продолжайте до её устранения.

7. Пересоздайте индексированные карты

# примеры — выполняйте только для реально используемых файлов
postmap /etc/postfix/virtual
postmap /etc/postfix/transport
postmap /etc/postfix/sasl_passwd
newaliases

Список реально используемых карт берите из postconf -n. Поддерживаемые типы баз проверьте через postconf -m.

8. Перенесите SQL/LDAP и учётные данные

Если виртуальные пользователи и домены хранятся в MySQL/MariaDB, сделайте согласованный дамп.

mysqldump --single-transaction --routines --triggers maildb > maildb.sql
mysql maildb < maildb.sql

После восстановления проверьте lookup непосредственно через postmap -q для той карты, которая указана в конфигурации.

9. Maildir: предварительная синхронизация rsync

rsync -aHAX --numeric-ids --info=progress2 root@old-mail:/var/vmail/ /var/vmail/

/var/vmail/ — пример. Перед --numeric-ids убедитесь, что UID/GID должны совпадать. После копирования проверьте права:

find /var/vmail -maxdepth 2 -printf '%u:%g %p\n' | head
namei -l /var/vmail/example.com/user

10. Dovecot-to-Dovecot: используйте doveadm/dsync

Для online-migration между Dovecot удобнее штатная синхронизация, потому что её можно повторять инкрементально.

# синтаксис backend зависит от вашей схемы
doveadm backup -u user@example.com remote:new-mail.example.com

# отладка
doveadm -D backup -u user@example.com remote:new-mail.example.com

Перед массовым запуском протестируйте одного технического пользователя.

11. DKIM, TLS и DNS

dig +short MX example.com
dig +short A mail.example.com
dig +short TXT example.com
dig +short TXT selector._domainkey.example.com
dig +short TXT _dmarc.example.com
dig -x 203.0.113.10 +short

PTR меняется у владельца IP/провайдера. TLS-сертификат лучше получить на новом сервере штатным ACME-клиентом, а не просто копировать /etc/letsencrypt/live.

12. Запуск и локальная проверка нового сервера

postfix check
systemctl restart postfix dovecot
systemctl status postfix dovecot --no-pager
ss -lntp | grep -E ':(25|465|587|143|993)\b'
journalctl -u postfix -u dovecot -n 100 --no-pager
postqueue -p

13. SMTP и TLS до смены MX

swaks --server 127.0.0.1 --from test@example.com --to user@example.com

openssl s_client -connect NEW_SERVER_IP:25 -starttls smtp -servername mail.example.com

Для submission отдельно протестируйте 587/465 с тестовой учётной записью и смотрите журнал:

journalctl -u postfix -u dovecot -f

14. Проверьте, что сервер не open relay

С внешней машины попробуйте без SMTP AUTH отправить письмо от чужого домена на другой чужой домен. На этапе RCPT TO должен быть отказ.

swaks --server NEW_SERVER_IP --from outsider@example.net --to another@example.org

15. Что делать с очередью старого Postfix

postqueue -p
postqueue -j | head

# после устранения причины deferred
postqueue -f

Не копируйте queue-файлы вручную как основной способ миграции: дайте старому серверу доставить остаток штатно.

16. Переключение MX

  • заранее уменьшите TTL;
  • сделайте предварительную синхронизацию ящиков;
  • полностью протестируйте новый сервер по IP;
  • смените MX/A;
  • старый сервер пока не выключайте;
  • наблюдайте, куда приходит новая почта;
  • выполните финальную безопасную синхронизацию.

Не делайте rsync --delete со старого сервера после того, как пользователи начали получать новые письма на новом: можно удалить новую почту. Для online-migration используйте Dovecot sync либо согласованное короткое окно остановки записи.

17. Проверки после cutover

dig +short MX example.com
postqueue -p
journalctl -u postfix -u dovecot --since '30 min ago' --no-pager
  • входящее письмо с внешнего домена;
  • исходящее письмо на внешний домен;
  • SMTP AUTH;
  • IMAP и синхронизация папок;
  • SPF/DKIM/DMARC тестового письма;
  • отсутствие растущей deferred-очереди;
  • свободное место и корректные владельцы mailbox storage.

18. План отката

Сохраните старые MX/A и старый сервер неизменным. Если новый узел не проходит критические проверки, верните DNS, снова направьте клиентов на старый сервер и только после стабилизации разбирайте проблему.

Критерий успеха: новая почта приходит на новый сервер, исходящие доставляются, SMTP AUTH и IMAP работают, очередь не растёт, SPF/DKIM/DMARC проходят, а старый сервер несколько TTL не получает новых сообщений.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *