Перенос почтового сервера на 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
Меняем транспортные карты
Сначала нужно сделать так, чтобы сервер 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 и будет храниться там.
Правим 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).