Резервное копирование и восстановление iRedMail

Обновлено Обновлено: Опубликовано Опубликовано:

Тематические термины: iRedMail.

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

Официальная документация на английском языке по резервированию iRedMail и его восстановлению доступна по пути docs.iredmail.org/backup.restore.html.

Создание копий

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

Автоматическое резервное копирование

По умолчанию, при установке iRedMail в планировщик cron добавляются задания по созданию резервных копий баз данных — это может быть MySQL, SOGo, ldap (зависит от выбора во время установки).

Пример заданий в cron:

30   3   *   *   *   /bin/bash /var/vmail/backup/backup_mysql.sh

1   4   *   *   *   /bin/bash /var/vmail/backup/backup_sogo.sh

* в данных примерах система создает резервные копии для базы данных MySQL/MariaDB и базы SOGo.

По умолчанию, копии помещаются в каталог /var/vmail/backup.

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

Также, копии создаются только для баз данных, но сама почта (по умолчанию, находится в каталоге /var/vmail/vmail1) не резервируется, что является проблемой, поскольку именно она и является главной ценностью.

Ручное копирование

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

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

Копируем почту

По умолчанию, каталог для хранения переписки — /var/vmail/vmail1. Чтобы создать копию, достаточно скопировать его содержимое.

Это можно сделать, например, следующей командой:

cp -R /var/vmail/vmail1/* /mnt/backup/

Также, можно создать сжатый архив для экономии дискового пространства:

tar -czvf /mnt/backup/vmail.tar.gz /var/vmail/vmail1

* в этом примере мы создадим архив vmail.tar.gz для каталога с почтой.

Пример скрипта для создания архива:

#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
 
destination="/backup/archive"
fdate=`date +%Y-%m-%d`

tar -czf $destination/vmail_$fdate.tar.gz /var/vmail/vmail1

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

Копируем базы данных

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

/bin/bash /var/vmail/backup/backup_mysql.sh

* путь до bash может быть другим — проверить можно командой which bash.

Резервные копии баз данных находятся в каталоге /var/vmail/backup. Они содержат архивы для всех баз, которые отвечают за работу сервиса. Для копирования бэкапов, можно воспользоваться одной из следующих команд:

mv /var/vmail/backup/mysql/2018/04/21/* /mnt/backup/

* в данном примере, мы копируем резервную копию баз mysql за 21 апреля 2018 года в каталог backup носителя, который был примонтирован в каталог /mnt.

scp /var/vmail/backup/mysql/2018/04/21/* dmosk@192.168.0.15:/backup

* в данном случае мы копируем тот же бэкап, но на другой компьютер сети.

Копируем ldap

Если информация о почтовых ящиках хранится в ldap, делаем его копию.

Резервная копия для ldap выполняется ежедневно, но если нужно сделать ее вручную, запускаем скрипт:

/bin/bash /var/vmail/backup/backup_openldap.sh

Резервные копии попадают в каталог /var/vmail/backup/ldap/<год>/<месяц>/

Также, как и для базы данных, архивы можно копировать на другой сервер в сети или внешний диск:

scp /var/vmail/backup/ldap/2019/02/* dmosk@192.168.0.17:/backup

* в данном примере, мы копируем копии за февраль на сервер с IP-адресом 192.168.0.17, в каталог /backup.

Синхронизация

Процесс копирования резервных копий можно автоматизировать при помощи скриптов с применением rsync.

Пример команды, которая возволит поддерживать почтовые сообщения в актуальном состоянии:

rsync -a /var/vmail/vmail1/ /backup/rsync_vmail/

* данная команда синхронизирует каталог /var/vmail/vmail1 с каталогом /backup/rsync_vmail.

Подробнее о настройке rsync для автоматического копирования читайте в статье Настройка и использование Rsync Server.

Перед восстановлением или переносом

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

В случае переноса сервера или его полной переустановки, необходимо сначала выполнить установку iRedMail, желательно, той же версии и на ту же операционную систему. Для этого можно воспользоваться инструкциями Установка и настройка iRedMail на CentOS 7 или Почтовый сервер iRedMail на Ubuntu. После установки можно сразу переходить к восстановлению.

Восстановление из резервных копий

Перед началом восстановления, переносим резервные копии на новый сервер.

Восстановление баз данных

Нам необходимо восстановить несколько баз — содержимое /var/vmail/backup/mysql/. В моем случае было:

  • amavisd
  • iredadmin
  • iredapd
  • mysql
  • roundcubemail
  • vmail

Если мы переносим нашу почтовую систему на новый сервер, базу mysql восстанавливать не нужно.

 Архивы баз находятся в сжатом виде. Первым делом, распаковываем их:

bzip2 -d amavisd-*.sql.bz2

bzip2 -d iredadmin-*.sql.bz2

bzip2 -d iredapd-*.sql.bz2

bzip2 -d mysql-*.sql.bz2

bzip2 -d roundcubemail-*.sql.bz2

bzip2 -d vmail-*.sql.bz2

* если система вернула ошибку и не распаковала архив, необходимо установить пакет bzip2.

Теперь можно восстановить базы:

mysql -u root -p amavisd < amavisd-*.sql

mysql -u root -p iredadmin < iredadmin-*.sql

mysql -u root -p iredapd < iredapd-*.sql

mysql -u root -p roundcubemail < roundcubemail-*.sql

mysql -u root -p vmail < vmail-*.sql

Для восстановления настроек СУБД, восстанавливаем базу mysql:

mysql -u root -p mysql < mysql-*.sql

* напомним еще раз, базу mysql восстанавливать не нужно, если мы перенесли почту на новый сервер. 

Восстановление почты

Копируем данные в каталог /var/vmail/vmail1 (в случае, если мы не выбрали другой при установке).

Если мы создавали архив, то сначала распакуем его, например:

tar -xvf vmail.tar.gz

и переносим распакованное содержимое в каталог хранения почты (по умолчанию, /var/vmail/vmail1):

mv /tmp/var/vmail/vmail1/* /var/vmail/vmail1/

* в моем случае, распакованный архив находился в каталоге /tmp/var/vmail/vmail1; каталог для хранения почты — /var/vmail/vmail1.

Восстановление LDAP

На новом сервере заходим в каталог с дистрибутивом, который использовался для установки iRedMail. Открываем файл iRedMail.tips, например:

vi /tmp/iRedMail-0.9.8/iRedMail.tips

Находим пароли для учетных записей cn=vmail,dc=xx,dc=xx и cn=vmailadmin,dc=xx,dc=xx в строках:

OpenLDAP:
    ...
    * LDAP bind dn (read-only): cn=vmail,dc=example,dc=com, password: rzeuzCPZN5dlHiyWEt9g6GWL5Jo6S9
    * LDAP admin dn (used for iRedAdmin): cn=vmailadmin,dc=example,dc=com, password: FQ6Pk3hCKxL1dKv047NM0aJPEGanOv

* в данном примере, записываем пароли rzeuzCPZN5dlHiyWEt9g6GWL5Jo6S9 и FQ6Pk3hCKxL1dKv047NM0aJPEGanOv.

Используя данные пароли и получаем на них хэш:

slappasswd -h '{ssha}' -s 'rzeuzCPZN5dlHiyWEt9g6GWL5Jo6S9'

slappasswd -h '{ssha}' -s 'FQ6Pk3hCKxL1dKv047NM0aJPEGanOv'

В ответ мы получаем что-то подобное:

{SSHA}3rs/fqNZpKaWytqaQVE8AKltriyd1BsW

{SSHA}20vytDcG0NsSE8twwI/ldWW1+YCIi+xW

Теперь распаковываем архив с ldap:

bzip2 -d /tmp/2019-02-09-03-00-01.ldif.bz2

* в данном примере мы распаковываем архив из каталога /tmp.

Открываем распакованный ldif файл:

vi /tmp/2019-02-09-03-00-01.ldif

Находим учетные записи cn=vmail и cn=vmailadmin и строки их паролей, например:

dn: cn=vmail,dc=iredmail,dc=org
...
userPassword:: e1NTSEF9dVFnWENnWWkrWDMzMmJSNVJlazN0YjR5NllBRW9tN3hnZ1VTa0E9PQ==
...
dn: cn=vmailadmin,dc=iredmail,dc=org
userPassword:: e1NTSEF9eFhsWjd6MHRlQzYxRFc5QklJSStFNXBZU0YyTHIwVnh2UTNIRWc9PQ==
...

... и меняем на такие строки:

dn: cn=vmail,dc=iredmail,dc=org
...
userPassword: {SSHA}3rs/fqNZpKaWytqaQVE8AKltriyd1BsW
...
dn: cn=vmailadmin,dc=iredmail,dc=org
userPassword: {SSHA}20vytDcG0NsSE8twwI/ldWW1+YCIi+xW
...

* обратите внимание, что, во-первых, мы заменили пароли на наши хеши. Во-вторых, после userPassword мы убрали один знак двоеточия.

Останавливаем службу для ldap:

systemctl stop slapd

Переходим в каталог хранения данных ldap:

cd /var/lib/ldap/<домен>/

Если в нем есть файл DB_CONFIG, переносим его, остальное удаляем:

mv DB_CONFIG /tmp

rm -rf ./*

После возвращаем DB_CONFIG:

mv /tmp/DB_CONFIG ./

Снова запускаем сервис ldap:

systemctl start slapd

В каталоге с данными для ldap появятся файлы. Снова останавливаем сервис slapd:

systemctl stop slapd

Теперь восстанавливаем данные:

slapadd -f /etc/openldap/slapd.conf -l /tmp/2019-02-09-03-00-01.ldif

Запускаем ldap и проверяем, что он запустился:

systemctl start slapd

systemctl status slapd

Восстановление конфигов

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

  1. /var/www/roundcubemail/config/config.inc.php
    где путь /var/www может быть другим. Конфиг для roundcube.
  2. /etc/postfix/mysql*.cf
    настройки postfix.
  3. Содержимое /etc/dovecot/conf.d, файлы /etc/dovecot/dovecot-mysql.conf и /etc/dovecot/dovecot.conf.
    настройки dovecot.
  4. Содержимое /var/lib/dkim
    сертификаты для подписи DKIM.

 

# Почта # Резервное копирование # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет