↩️ Назад

Категории

Как сделать ежедневный бэкап почты через rsync по SSH

07.10.2025 | Статья из категории: Linux

Организация ежедневных бэкапов почты с помощью rsync по SSH

Если у вас есть почтовый сервер на 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 — это простой, безопасный и надёжный способ делать резервные копии. Он не требует дополнительных сервисов, не мешает работе почтового сервера и отлично работает даже в условиях ограниченного дискового пространства.

Настройте один раз — и спите спокойно, зная, что ваша почта в безопасности.




Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA