Если у вас есть почтовый сервер на Linux (например, с Postfix и Dovecot, использующий формат Maildir), и вы хотите делать регулярные резервные копии почтовых ящиков — лучший способ это сделать — rsync по SSH. Это безопасно, эффективно и не нарушает работу почтового сервера.
В этой статье мы рассмотрим пошаговую настройку ежедневного бэкапа без использования сетевых файловых систем (NFS, Samba), без монтирования и без риска повредить "живую" почту.
Почему rsync по SSH?
- Безопасность: весь трафик шифруется через SSH.
- Эффективность: копируются только изменённые файлы.
- Надёжность: Maildir-структура гарантирует, что файлы в
new/иcur/всегда целые. - Простота: не требует сложных сервисов вроде FTP или NFS.
- Совместимость: работает даже если бэкап-сервер находится за NAT (например, за pfSense).
Требования
- Почтовый сервер с публичным IP (или доступный извне).
- Сервер для хранения бэкапов (может быть во внутренней сети, например, за pfSense).
- Доступ к обоим серверам по SSH (на почтовом сервере должен быть запущен
sshd). - Почта хранится в формате Maildir (стандарт для Postfix + Dovecot).
Шаг 1: Подготовка на почтовом сервере
Убедитесь, что у вас есть пользователь, от имени которого будет происходить копирование. Лучше создать отдельного пользователя без прав на запись в систему:
sudo adduser backupuser
sudo usermod -s /usr/sbin/nologin backupuser
Убедитесь, что этот пользователь имеет права на чтение почтовой директории (обычно /var/mail или /mnt/mail). Например:
sudo setfacl -R -m u:backupuser:rx /mnt/mail
Или добавьте его в группу владельца:
sudo usermod -aG mail backupuser
Шаг 2: Настройка SSH-ключа на бэкап-сервере
На сервере, который будет забирать бэкапы (например, с IP 10.11.12.113), выполните:
ssh-keygen -t ed25519 -f ~/.ssh/mail_backup -N ""
Это создаст приватный ключ ~/.ssh/mail_backup и публичный ~/.ssh/mail_backup.pub.
Скопируйте публичный ключ на почтовый сервер:
ssh-copy-id -i ~/.ssh/mail_backup.pub backupuser@внешний_IP_почтового_сервера
Если ssh-copy-id недоступен, вручную добавьте содержимое mail_backup.pub в файл /home/backupuser/.ssh/authorized_keys на почтовом сервере.
Проверьте подключение:
ssh -i ~/.ssh/mail_backup backupuser@внешний_IP_почтового_сервера
Должно подключиться без пароля.
Шаг 3: Тестовая синхронизация
Запустите вручную команду rsync для проверки:
rsync -avz --delete \
-e "ssh -i /home/user/.ssh/mail_backup -o StrictHostKeyChecking=yes" \
backupuser@внешний_IP_почтового_сервера:/mnt/mail/ \
/mnt/mail_backup/
Обратите внимание на слэш в конце /mnt/mail/ — он означает "содержимое папки", а не саму папку.
Флаг --delete удаляет на бэкап-сервере файлы, которые уже удалены на почтовом (опционально, но рекомендуется для экономии места).
Шаг 4: Автоматизация через cron
Откройте crontab на бэкап-сервере:
crontab -e
Добавьте строку для ежедневного бэкапа в 02:00 ночи:
0 2 * * * /usr/bin/rsync -avz --delete -e "ssh -i /home/user/.ssh/mail_backup -o StrictHostKeyChecking=yes -o ConnectTimeout=30" backupuser@внешний_IP_почтового_сервера:/mnt/mail/ /mnt/mail_backup/ >> /var/log/mail_backup.log 2>&1
Разбор параметров:
-avz— архивный режим, подробный вывод, сжатие.--delete— синхронизировать удаления.-o ConnectTimeout=30— не висеть вечно, если сервер недоступен.>>— логирование в файл.
Шаг 5: (Опционально) Ограничение доступа по IP
Если ваш бэкап-сервер выходит в интернет через статический внешний IP (например, IP вашего pfSense), ограничьте SSH-доступ на почтовом сервере только для этого IP.
В файле /etc/ssh/sshd_config добавьте:
AllowUsers backupuser@123.45.67.89
Или через /etc/hosts.allow:
sshd: 123.45.67.89
sshd: ALL : deny
После изменений перезапустите SSH:
sudo systemctl reload sshd
Важные замечания
- Не монтируйте почтовую папку через NFS/Samba/FTP — это вызывает ошибки Postfix вроде "Cached message size larger/smaller".
- Maildir безопасен для чтения "на лету": файлы в
new/иcur/всегда целые, так как Postfix сначала пишет вtmp/, а потом атомарно перемещает вnew/. - Не запускайте rsync в обратную сторону (с бэкапа на почтовый сервер) — можно случайно перезаписать живую почту.
- Проверяйте логи раз в неделю:
tail /var/log/mail_backup.log.
Заключение
Синхронизация почты через rsync по SSH — это простой, безопасный и надёжный способ делать резервные копии. Он не требует дополнительных сервисов, не мешает работе почтового сервера и отлично работает даже в условиях ограниченного дискового пространства.
Настройте один раз — и спите спокойно, зная, что ваша почта в безопасности.
Комментарии
Пока нет комментариев. Будьте первым!