К нам обратился потенциальный клиент, ищущий альтернативу сервису Яндекс с целью оптимизации затрат. Запрос был таким:
Подготовить почтовую инфраструктуру и перенести на нее 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.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}’` ]]; 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 рублей в месяц, вместо сотен тысяч рублей на Яндекс.