Резервное копирование и восстановление iRedMail
Тематические термины: iRedMail.
В статье будет рассказано об использовании резервных копий почтовой системы iRedMail как для восстановления, так и переноса на новый сервер.
Создание резервных копий
Автоматически системой
Вручную
Что делать перед восстановлением
Восстановление или перенос
Базы данных
Почтовые переписки
LDAP
Конфигурационные файлы
Официальная документация на английском языке по резервированию 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
Восстановление конфигов
Желательно, восстановить настройки системы, так как некоторые из них критичные для работы почты. Если мы меняли конфигурацию, то нужно восстановить следующие файлы:
- /var/www/roundcubemail/config/config.inc.php
где путь /var/www может быть другим. Конфиг для roundcube. - /etc/postfix/mysql*.cf
настройки postfix. - Содержимое /etc/dovecot/conf.d, файлы /etc/dovecot/dovecot-mysql.conf и /etc/dovecot/dovecot.conf.
настройки dovecot. - Содержимое /var/lib/dkim
сертификаты для подписи DKIM.