(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(13740679, "init", { defer: true, clickmap:true, trackLinks:true, accurateTrackBounce:true }); ym(13740679, 'hit', window.location.href);

Перенос 3500 почтовых ящиков с Яндекс на свой сервер

«Яндекс 360» анонсировал ввод платы за использования почтового сервиса для бизнеса от 249 руб. за пользователя с апреля 2023 года. Это значит, что компании, которые долгое время использовали почтовый сервис бесплатно, вынуждены платить за него или искать альтернативу.

В этом обзоре расскажем о том, куда и как перенести почту с Яндекс и сколько это стоит.

Куда перенести почту с Яндекс?

К нам обратился потенциальный клиент, ищущий альтернативу сервису Яндекс с целью оптимизации затрат. Запрос был таким:

Подготовить почтовую инфраструктуру и перенести на нее 3500 ящиков с Яндекс объемом до 100 Гб. Почтовая система должна быть отказоустойчивой – важно получить все письма до единого!

Также отметим, что клиент не планировал самостоятельно администрировать сервис, а рассчитывал на поддержку с нашей стороны.

Для такого запроса необходима отказоустойчивая почтовая система с удобной панелью управления, чтобы привычно создавать и управлять почтовыми ящиками. Также нужно достаточное количеством места, с потенциалом на рост количества и размера ящиков. И обязательное резервирование почтовых сервисов в случае отсутствия связности.

Исходя из этих требований, была выбрана инфраструктура на 2-х серверах в разных дата-центрах, а в качестве панели управления — ISPmanager.

Для клиента мы предложили два варианта на выбор:

1. Инфраструктура на базе выделенных серверов.

- Основной сервер: Supermicro 5019, X11SSL-F, CPU Intel Xeon E3-1240V5> 3.5GHz, RAM 8 Gb, 240 Гб SSD x2, RAID 1 с ОС AlmaLinux 8 + панель ISPmanager Lite. Расположение в ДЦ г. Санкт-Петербурга.

- Резервный MX-сервер с расположением в дата-центре г. Москва.

2. Инфраструктура на виртуальных серверах (VPS) на NVMe дисках.

- Основной VPS на тарифе KVM-160 с предустановленной ОС AlmaLinux 8 + панель ISPmanager Lite. Расположение — г. Санкт-Петербург.

- Второй VPS на тарифе KVM-20 будет являться резервным MX-сервером. Расположение — г. Москва.

Клиент выбрал вариант на выделенных серверах.

Мы опишем решение на базе VPS, так как процесс миграции на физической или реальной инфраструктуре не отличается, а решение на VPS имеет несомненный плюс — более низкую стоимость.

Как перенести почту с Яндекс на VPS сервер

Шаг 1. Заказ оборудования.

Выбираем решение на инфраструктуре из двух VPS: основной и резервный.

Заказываем подходящие тарифы: KVM-160 для основного сервера и KVM-20 для резервного, этого вполне хватит под потребности на 100 Гб.

  • На KVM-160 при заказе указываем для установки ОС AlmaLinux 8 и панель ISPmanager Lite для удобного управления почтой, выбираем дата-центр в СПб.
  • На KVM-20 при заказе ставим только ОС AlmaLinux 8 и выбираем дата-центр в Москве, ISP там не понадобится.

Шаг 2. Настройка основного VPS KVM-160.

После оплаты услуги ОС AlmaLinux 8 и панель ISPmanager Lite устанавливаются автоматически. Доступы к виртуальной машине приходят на почту в письме.

Шаг 3. Настройка резервного MX-сервера KVM-20.

Резервный сервер нужен, чтобы в случае отсутствия связности с первым сервером все отправленные письма дошли до нас.

3.1. На резервном VPS KVM-20 устанавливаем Postfix:

  • В RedHat based дистрибутивах это делается путем выполнения команды:
yum install postfix
  • В Debian-based дистрибутивах:
apt instal postfix

Обратите внимание: если при установке возникает запрос по конфигурации, то нужно выбрать пункт «только локальное использование», либо «only local use» в зависимости от языка в консоли.

3.2. Далее производим настройку Postfix следующим образом

  • Находим и открываем конфигурационный файл /etc/postfix/main.cf . Добавляем в конец строку:
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
  • Находим в файле и раскомментируем строку
#inet_interfaces = all
  • Далее находим строку
#relay_domains =

и заменяем ее на:

relay_domains = $mydestination, kvmtest.sweb.ru, testdomain.ru

В случае отсутствия строки следует добавить её в конфигурационный файл.

Где $mydestination, kvmtest.sweb.ru, testdomain.ru — серверы приема почты (релеи): $mydestination – хост, на котором работает postfix
kvmtest.sweb.ru, testdomain.ru – доменные имена, для которых пересылаем почту.

3.3. Настройки резервного MX-сервера закончены, теперь нужно перезапустить Postfix командой:

systemctl restart postfix

Важно! Резервный почтовый сервер перенаправляет и хранит почту только для доменов, которые указаны в конфигурационном файле.

Т.е если необходимо, чтобы резервный почтовый сервер работал для какого-то дополнительного домена, то на нем необходимо в файле /etc/postfix/main.cf отредактировать следующую строку, добавив новый домен через запятую (она в самом конце файла):

relay_domains = $mydestination, kvmtest.sweb.ru, testdomain.ru, newdomain.ru

После чего перезагрузить postfix:

systemctl reload postfix

Шаг 4. Настройка взаимодействия основного и резервного серверов.

Чтобы основной почтовый сервер начал работать с резервным, вносим правки в почтовый сервер exim на основном сервере KVM-160.

4.1. Находим конфигурационный файл /exim/etc/exim/exim.conf

4.2. В конфигурационном файле exim’а заменяем строку

domains = !+dummy_domains

на строку

domains = !+local_domains

4.3. Перезапускаем сервис для применения изменений командой:

systemctl restart exim

Шаг 5. Создание почтовых ящиков на новом сервере по списку.

Берем файл со списком почтовых ящиков (emails.txt) с Яндекса и создаем их на основном VPS с помощью скрипта:

default_pass="CHaNge_Me"; \ for line in `cat emails.txt`; do \ email=$(echo $line | awk -F \: '{print $1}'); \ pass=$(if [[ `echo $line | awk -F \: '{print $2}'` ]]; then echo $line | awk -F \: '{print $2}'; else echo $default_pass; fi); \ root=$(echo $email | awk -F \@ '{print $1}'); \ domain=$(echo $email | awk -F \@ '{print $2}'); \ /usr/local/mgr5/sbin/mgrctl -m ispmgr email.edit name="$root" passwd="$pass" domainname="$domain" confirm="$pass" sok=ok; \ done

Список emails. txt ящиков должен быть в виде:

email:password

Если пароль не указан в строке с почтовым ящиком, то устанавливается значение из переменной default_pass.

Шаг 6. Смена MX-серверов и настройка DNS

После переноса почты(!) на новую инфраструктуру производим настройку DNS записей. На этом этапе, пока идет обновление dns-зоны, письма поступают как в систему Яндекса, так и на новую инфраструктуру.

6.1. Создаем поддомены для основного и резервного релеев (почтовых серверов):

  • mail.testdomain.ru — для основного,
  • relay.testdomain.ru — для резервного.

6.2. Редактируем A-записи:

  • удаляем CNAME-запись mail.testdomain.ru,

  • добавляем A-запись mail.testdomain.ru на 11.222.33.444
  • добавляем A-запись relay.testdomain.ru, указывающую на 44.333.22.111

Где
11.222.33.444 — ip-адрес основного сервера KVM-160
44.333.22.111 — ip-адрес резервного сервера KVM-20

6.3. Редактируем MX-записи:

  • Меняем основную MX-запись (приоритет 10) с «mx.yandex.net» на «mail.testdomain.ru»
  • Добавляем дополнительную MX-запись с приоритетом 20 со значением «relay.testdomain.ru»

6.4. Редактируем TXT-записи если необходимо:

Если у вас есть SPF-запись, то в конце, добавляем «mx» перед ~all:

v=spf1 mx ~all

* Если домен будет использовать DNS-серверы SpaceWeb, то необходимо вручную перенести записи из редактора DNS Яндекса на SpaceWeb, после чего изменить NS-записи домена у регистратора. Инструкция по работе с DNS домена.

Шаг 7. Проверка работы почты.

Подключаемся к почтовому веб-клиенту: http://kvmtest.sweb.ru/roundcube/
Также переходить в почтовый ящик можно сразу из ISP, выделив его в списке и нажав на «Почтовый клиент».

Пробуем отправить и получить письмо на нужный email.

Шаг 8. Миграция содержимого почтовых ящиков.

Используем утилиту переноса содержимого ящиков. Можно взять готовую у нас) Она отработает за несколько часов и перенесет все письма на новое место.

Для переноса содержимого почтовых ящиков воспользуемся утилитой imapsync, которая позволяет переносить почту с различных почтовых систем. Для установки на AlmaLinux 8 можно воспользоваться менеджером пакетов dnf

8.1. Для установки инструмента выполняем в терминале:

dnf install --enablerepo=powertools imapsync

8.2. Далее проверяем корректность установки:

imapsync —testslive

8.3. Для переноса одного почтового ящика, используем конструкцию:

imapsync --host1 imap.yandex.ru --user1 [email protected] --password1 fsdrsf --host2 mail.testdomain.ru --user2 [email protected] --password2 safdgfgfdfd

Где

  • imap. yandex. ru — имя сервера imap, откуда мы будем забирать почту.
  • [email protected] —имя переносимого ящика, fsdrsf пароль от этого ящика.
  • mail.testdomain.ru имя сервера imap, куда мы будем переносить почту.
  • [email protected] —имя ящика куда будем переносить почту, safdgfgfdfd пароль от этого ящика.

8.4. Для переноса почты списком используем bash скипт. Для этого создаем файл:

nano transfermail.sh

Добавляем в него содержимое:

#!/bin/bash { while IFS=';' read h1 u1 p1 h2 u2 p2 fake do imapsync --host1 "$h1" --user1 "$u1" --password1 "$p1" \ --host2 "$h2" --user2 "$u2" --password2 "$p2" "$@" done } < file.txt

Делаем его исполняемым:

chmod 755 transfermail.sh

На его вход подается файл file.txt, который нужно создать в одной директории со скриптом и из которого берутся адреса и учетные данные для узлов источника и приемника. Сам файл file.txt должен содержать строки:

host1;user1_1;password11_1;host2;user2_1;password2_1; host1;user1_2;password11_2;host2;user2_2;password2_2; host1;user1_3;password11_3;host2;user2_3;password2_3; host1;user1_4;password11_4;host2;user2_4;password2_4;

где user_N и password_N имена реальных почтовых ящиков и паролей;

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

После того, как файл источника готов, выполняем скрипт

./transfermail.sh

Шаг 9. Подключение мониторинга доступности сервисов.

На последнем этапе подключаем услугу мониторинга к нашей инфраструктуре. Она позволит отслеживать доступность почтового сервиса и получать уведомления о недоступности на телефон, email или в Telegram.

Итоги

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

В результате получаем почтовую систему для 3500 почтовых ящиков (а при необходимости и больше) с удобной панелью управления ISPmanager, мониторинг системы и круглосуточную поддержку всего за 4548 рублей в месяц, вместо сотен тысяч рублей на Яндекс.

0
12 комментариев
Написать комментарий...
Artur Fedotov

Ну может твой вариант и получился бы, если бы не одно но. Для каждой учётки тебе придётся сделать "пароль приложения", а у тебя их, судя по заголовку, 3500.

Ответить
Развернуть ветку
Дмитрий Коновалов

ага, а еще имапсинк крашится если находит в названии ящиков неподдерживаемые символы, например точку.

Ответить
Развернуть ветку
Енот

ни разу не сталкивался с таким, imapsync успешно переносит ящики с точкой в названии.

возможно вы имеете ввиду "." или "/" в названии папок? если переносить на postfix, то postfix не позволяет использовать такие спецсимволы в именах папок

Ответить
Развернуть ветку
НЕплатный акк

Ничего в этом не понимаю кроме того, что я недавно грохнул приложуху Яговномайл из-за рекламы на полэкрана, и перенастроил сбор на почты на Гмайл.

А Вы - подошли к этому со вселенским масштабом!

Ответить
Развернуть ветку
Sidovskiy

У меня 250 ящиков. Тоже съезжаем с яндекса.
НО почему постфикс? У вас юзера без вебки польуются почтой?
Мы на Мдемона уплываем попутно утягиваем яндекс диск за собой в почту..
На файл шару переносим и в почту цепляем.

Ответить
Развернуть ветку
Алексей Булгаков

А письма по папкам оно распределило при переносе?

Ответить
Развернуть ветку
Алексей Булгаков

Запустил - раскидало по папкам. Ещё бы понять какой параметр прописать, чтобы письма в папках не дублировались в inbox.

Ответить
Развернуть ветку
Алексей Булгаков

А ещё у меня почему-то папка "Отправленные" не синхронизировалась с яши. На host2 пусто. У вас норм?

Ответить
Развернуть ветку
Алексей Булгаков

Вернее на одном ящике "Отправленные" перенеслись, на других - нет.

Ответить
Развернуть ветку
Хостинг SpaceWeb
Автор

Добрый день!

ISPManager разработали инструмент автоматизированного переноса ящиков с Яндекс.360, поэтому инструкция упрощается https://www.ispmanager.ru/docs/ispmanager/import-pochtovogo-yashhika

Ответить
Развернуть ветку
mihail mihail

Резервирование для MX записей вы сделали, а как быть с резервированием имени почтового сервера на клиентах?

Ответить
Развернуть ветку
Хостинг SpaceWeb
Автор

Реализация сделана для сохранности возможности доставки писем к владельцу. Если основной почтовый сервер упал, тогда доступа к почте не будет, и нужно будет заниматься её восстановлением. Однако письма, которые придут за время недоступности основного почтового сервера, не будут утеряны. Смысл нашей реализации состоял именно в этом, чтобы получение писем не прерывалось.

Ответить
Развернуть ветку
9 комментариев
Раскрывать всегда