Лучшая практика: должен ли сервер резервного копирования получать данные от клиентов или клиенты должны отправлять их на сервер для резервного копирования в Linux через сеть?

Привет, сообщество r/linuxadmin и r/sysadmin!

Я прохожу курс “от 0 до Linux админа” (ссылка), и у меня возник вопрос по организации резервного копирования Linux-серверов в локальной сети, находящейся за NAT. Дело в том, что я выбираю между двумя архитектурами для обеспечения безопасности и надежности:

Вариант 1: Сервер резервного копирования запрашивает данные

  • Сервер (например, с Borg, Restic или Bareos) инициирует подключение к каждому клиенту, запрашивает данные и сохраняет их.
  • Плюсы: Централизованное управление, проще внедрить политику, клиентам не нужен исходящий доступ (только входящий).
  • Минусы: Требуется открывать входящие порты на клиентах (это может быть рискованно с точки зрения безопасности).

Вариант 2: Клиенты отправляют данные

  • Каждый клиент запускает агента резервного копирования (например, restic, borg serve или rclone) и отправляет данные на сервер.
  • Плюсы: Клиентам нужен только исходящий доступ (проще с NAT и фаерволами), нет открытых входящих портов.
  • Минусы: Сложнее контролировать целостность, возможны “тихие” сбои на клиентах, распределенные учетные данные.

Вопросы по безопасности:

  • Какой из этих подходов (pull vs push) более безопасен в реальной жизни?
  • Как вы реализуете аутентификацию (SSH-ключи, TLS, API-токены)?
  • Есть ли у вас истории неудач или уроки, извлеченные при использовании одного из этих подходов?

Дополнительные вопросы:

  • Если использовать pull: как вы защищаете доступ сервера к клиентам (например, SSH, VPN)?
  • Если использовать push: как вы предотвращаете перезапись бэкапов клиентами или переполнение места на сервере?
  • Существуют ли инструменты, которые используют гибридный подход?

Контекст: у меня есть несколько серверов в частной сети, среди них физические машины и виртуальные. Сервер резервного копирования будет выделенным (скорее всего, на базе Debian/Ubuntu). Цель: неизменяемые, зашифрованные, версионированные резервные копии с минимальной поверхностью для атаки.

Спасибо за советы и личные истории!

(Да, я читал документацию – теперь хочу услышать ваши боевые истории.)

Ну, привет! Хочу рассказать, как я пытался разобраться с резервным копированием в Linux. Так, значит, есть вопрос: лучше, чтобы сервер резервного копирования сам забирал данные от клиентов или чтобы клиенты сами отправляли их на сервер? Я решил попробовать оба подхода.

Самая первая попытка: клиент сам отправляет данные

Я подумал, что пусть клиенты сами шлют данные на сервер. Ставил rsync на клиент и сервер — вроде всё правильно настроил. Запустил на клиенте команду, которую откопал в интернете, и думал, что сейчас всё заработает. Но нет, вместо этого вылетела ошибка, что не может подключиться к серверу. Ну, я, конечно, загрустил…

Проблема оказалась в настройках фаервола. Я забыл открыть нужные порты. В итоге, всё, что я получил — это сообщение об ошибке и куча разочарования.

Вторая попытка: сервер сам забирает данные

После этого я решил попробовать, чтобы сервер сам забирал данные с клиентов. Сил уже нет, но я не собирался сдаваться. Настроил SSH для доступа, установил нужные пакеты и начал разбираться с crontab для автоматизации. Но тут опять не повезло!

Клиенты что-то у меня не хотят фигу с маслом отдавать. Выяснилось, что у меня началась какая-то путаница с правами доступа. На сервере всё было нормально, а вот на клиентах – подходи, разбирайся. В итоге, снова не получилось. Сопли на исходе, честно говоря…

Немного позитива

Но не всё так плохо! Я наткнулся на курсы на Learn Programming Online | Courses for Developers | YODO, которые реально помогли мне понять, чего я не учитывал. Там много полезной информации по резервному копированию и настройке серверов. Как раз то, что нужно для того, чтобы не путаться в настройках.

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