Перенос почтового сервера на Zimbra Collaboration Suite

Пришло время перенести почту со старого почтового сервера (Postfix + Courier-Imap + SASL2 + MySQL + ClamAV) на новый сервер Zimbra Collaboration Suite. Причем сделать это нужно максимально незаметно для пользователей.

Поскольку на нашем сервере порядка 300 активных ящиков все сразу перенести невозможно, поэтому делать придётся постепенно.

Идея такая: создали ящик на новом сервере - перенастроили пользователю почтовый клиент (при этом названия ящика должно сохраниться) - перешли к следующему.

Вот что мы имеем:

  • mail.example.com - существующий почтовый сервер с ip:62.220.58.71, обслуживаемый зону example.com
  • zcs.example.com - новый почтовый сервер на zimbra с ip:62.220.58.72, обслуживаемый зону example.com

network

Меняем транспортные карты

Сначала нужно сделать так, чтобы сервер zcs.example.com принимал почту для пользователя user1@example.com, а всю остальную почту для домена example.com отправлял на сервер mail.example.com.

Старый сервер mail.example.com наоборот всю почту адресованную домену example.com обслуживал сам, а почту для user1@example.com пересылать на сервер zcs.example.com.

На новом сервере Zimbra

Zimbra хранит транспортные карты в LDAP:

# su - zimbra -c "zmprov gacf | grep zimbraMtaTransportMaps"
zimbraMtaTransportMaps: proxy:ldap:/opt/zimbra/conf/ldap-transport.cf

Создадим файл /opt/zimbra/conf/transport.cf:

# mcedit /opt/zimbra/conf/transport.cf
example.com             smtp:[172.16.0.1]
user1@example.com       local:[172.16.0.2]
# /opt/zimbra/common/sbin/postmap /opt/zimbra/conf/transport.cf

Заставим Zimbra использовать данный файл в качестве транспорта:

# su - zimbra $ zmprov mcf zimbraMtaTransportMaps "proxy:ldap:/opt/zimbra/conf/ldap-transport.cf, lmdb:/opt/zimbra/conf/transport.cf" $ zmmtactl reload

На старом сервере Postfix

Посмотрим, что использует старый сервер mail.example.com в качестве транспорта:

# postconf transport_maps
transport_maps = hash:/etc/postfix/transport.cf

Правим файл /etc/postfix/transport.cf:

# mcedit /etc/postfix/transport.cf
user1@example.com         smtp:[172.16.0.2]
# postmap /etc/postfix/transport.cf

Готово. Теперь неважно, какой из серверов получит почту для ящика user1@example.com она в любом случае придет на новый сервер zcs.example.com и будет храниться там.

Не забывайте после каждого изменения файла transport.cf применять команду postmap.

Правим DNS-зону

Если ваш новый сервер имеет свой внешний ip-адрес, то необходимо добавить в dns-зону example.com mx-запись нового сервера и отредактировать spf:

$ORIGIN . $TTL 3600 example.com IN SOA example.com. hostmaster.example.com. ( 2017011001 ; serial 3600 ; refresh [1h] 600; retry [10m] 1209600 ; expire [14d] 3600 ; min TTL [1h] ) NS mail.example.com. MX 10 mail.example.com. MX 20 zcs.example.com. A 62.220.58.71 IN TXT "v=spf1 a ip4:62.220.58.71 ip4:62.220.58.72 ~all" $ORIGIN example.com. mail IN A 62.220.58.71 zcs IN A 62.220.58.72

Результат

Таким образом, постепенно обойдя пользователей, мы перенесли почту на новый сервер. После того как все пользователи перенесены со старого сервера убираем информацию о нем в DNS-зоне, настраиваем DKIM и серые списки (при помощи плагина Policyd).

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


Защитный код
Обновить