0

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

29.03.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 на тарифе с предустановленной ОС AlmaLinux 8 + панель ISPmanager Lite.

– Второй VPS на тарифе KVM-20 будет являться резервным MX-сервером.

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

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

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

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

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

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

Шаг 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.rutestdomain.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}’` ]]; thenecho$line | awk -F \: ‘{print $2}’; elseecho$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. Проверка работы почты.

Подключаемся к почтовому веб-клиенту: 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 login@test1.ru –password1 fsdrsf –host2 mail.testdomain.ru –user2 login@test2.ru –password2 safdgfgfdfd

Где

  • imap. yandex. ru — имя сервера imap, откуда мы будем забирать почту.
  • login@test1.ru —имя переносимого ящика, fsdrsf пароль от этого ящика.
  • mail.testdomain.ru имя сервера imap, куда мы будем переносить почту.
  • login@test2.ru —имя ящика куда будем переносить почту, 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

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

chmod755 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 рублей в месяц, вместо сотен тысяч рублей на Яндекс.

Свежие комментарии

Подписка

Лучшие статьи


Fatal error: Uncaught Error: Call to a member function have_posts() on null in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php:380 Stack trace: #0 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/widget.php(257): fox56_blog_grid(NULL, Array) #1 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/register.php(33): include('/home/host18670...') #2 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/class-wp-widget.php(394): Wi_Widget_Latest_Posts->widget(Array, Array) #3 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/widgets.php(837): WP_Widget->display_callback(Array, Array) #4 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(417): dynamic_sidebar('sidebar') #5 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(136): fox56_single_sidebar() #6 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(7): fox56_single_inner() #7 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/single.php(23): fox56_single() #8 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/template-loader.php(106): include('/home/host18670...') #9 /home/host1867038/the-devops.ru/htdocs/www/wp-blog-header.php(19): require_once('/home/host18670...') #10 /home/host1867038/the-devops.ru/htdocs/www/index.php(17): require('/home/host18670...') #11 {main} thrown in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php on line 380