Обновление Zimbra: проверка патча и план отката
АйТи Фреш
Серверы и инфраструктура

Как я обновляю Zimbra: от проверки версии до приёмки

Автор: , директор ООО «АйТи-Фреш» · · ~19 мин чтения
Обновление Zimbra: замена участка моста из писем рядом с резервной конструкцией
До замены рабочего участка готовлю путь возврата.

Для обновления Zimbra я сначала проверяю исходную версию и инструкцию к выбранному патчу, затем готовлю проверенную копию и время на восстановление. После установки проверяю доставку в обе стороны и рабочие приложения. Здесь — порядок допуска к работам, критерии отката и условный расчёт окна для небольшого офиса.

Когда ставить патч и что считать успешным обновлением

Я начинаю обновление с ответа на деловой вопрос: какое исправление нужно серверу и как проверить результат. При обслуживании корпоративной почты мне нужны исходное состояние, инструкция к целевому патчу, рабочая копия и ответственный за приёмку. Срочное исправление безопасности требует ускоренной подготовки. Переносить его на неопределённое потом из-за отсутствия плана — плохая привычка. Но и запускать обновление без понимания способа восстановления нельзя. Подготовка должна сокращать риск и задержку, а не становиться бесконечным согласованием.

Особенно внимательно я читаю, какой компонент затронут. CVE-2025-66376 — сохранённый XSS в классическом веб-интерфейсе Zimbra; вендор описывает обработку HTML-писем и CSS. Это другая проблема, чем CVE-2024-45519 в postjournal, связанная с выполнением команд. Склеивать их в одну страшную историю технически неверно: условия и исправления различаются. В выпуске 10.1.13 указано устранение CVE-2025-66376. Этот номер подтверждает конкретное исправление, но не означает, что именно этот старый выпуск нужно выбирать сегодня: целевой патч я определяю по действующей документации своей ветки.

В уведомлении о CVE-2024-45519 Zimbra отдельно пишет: postjournal по умолчанию не включён. Я проверяю фактическую конфигурацию, а не переношу настройку по умолчанию на любой сервер. Отключённый компонент меняет оценку применимости именно этой проблемы, однако не отменяет остальные исправления безопасности. Обратная ошибка — объявлять каждый сервер уже взломанным только по совпадению названия продукта. Если есть признаки постороннего доступа, я сохраняю материалы для расследования и разбираю инцидент отдельно. Установка патча сама по себе не доказывает, что последствия проникновения устранены.

До начала работ я формулирую проверяемый результат: установлена выбранная сборка, работают нужные роли, доставляются входящие и исходящие письма, приложения проходят свои сценарии. Отдельно фиксирую уже существующие неисправности: задержку очереди, ошибку клиента, сбой календаря. Иначе после обновления любой старый дефект превращается в новую претензию, а действительно новая ошибка теряется в общем списке. Мой чек-лист начинается с состояния до вмешательства и заканчивается сравнением с ним. Фраза «раньше вроде работало» в протокол проверки не помещается. Очень неудобная единица измерения.

Разрешение начать работы я даю после проверки доступности копии, консоли, нужных пакетов и специалиста, который будет принимать результат. В карточке изменения указываю исходную и целевую версии, затронутые функции, время остановки и условия восстановления. Для срочного патча эта карточка может быть короткой; смысл остаётся тем же. Мне нужен заранее выбранный путь при отказе, а не набор догадок после остановки почты. Если подготовка выявила препятствие, я называю его конкретно: нет доступа к копии, не подтверждена совместимость или не получается провести восстановление в выделенное окно.

Патч закрывает описанные разработчиком ошибки. Успешная установка не заменяет проверку доставки и расследование возможного взлома.

Как проверить версию, роли и совместимость Zimbra

Сначала я снимаю исходные данные. Команда zmcontrol -v показывает версию программного обеспечения, а zmcontrol status — состояние служб этого узла. Обе запускаю от пользователя zimbra; из административной оболочки переключаюсь на него через su - zimbra. Это разные проверки: номер сборки не подтверждает работоспособность, а работающие службы не доказывают наличие нужного исправления. Вывод сохраняю в карточке изменения. На распределённой установке повторяю проверку на каждом затронутом узле: один удачно обновлённый сервер не описывает состояние всей почты.

su - zimbra
zmcontrol -v
zmcontrol status

Затем записываю редакцию, происхождение сборки, операционную систему и роли узлов. Для коммерческой установки проверяю лицензионные условия выбранного обновления. Для сторонней сборки выясняю, кто выпускает её пакеты и каким способом доставляет исправления. Инструкция от другой редакции не становится подходящей из-за одинаковой надписи Zimbra. Отдельно учитываю внешнюю авторизацию, почтовый шлюз, общие ящики и приложения, которые отправляют уведомления. Мне нужен перечень реальных зависимостей, а не список всех возможностей продукта из рекламной страницы.

В экспертной базе отдельно отмечено требование читать Things to Know Before Upgrading. Я открываю документацию именно целевого выпуска, включая известные ограничения и порядок установки патча. Старое руководство пригодно для своей версии, но не подтверждает нынешнюю поддержку платформы. Также разделяю патч внутри ветки и переход между основными версиями. Для второго уже есть план перехода Zimbra 9–10. Здесь мой предмет — допуск к установке исправления и приёмка результата; перенос данных и смена платформы требуют отдельного проекта.

Правило «обязательно пройти каждый промежуточный релиз» я не использую. Допустимый путь задаёт документация для исходной и целевой версий, редакции и модулей. В инструкции к патчам 10.1.x исправления названы накопительными, но это не разрешение перепрыгнуть через любые требования установщика. Я проверяю также доступность репозитория, соответствие пакетов нужной ветке и свободное место для операций. Не делаю вывод об успехе по отсутствию ошибок в одной команде: сначала должно быть понятно, какую сборку сервер собирается получить. Название ветки без номера патча — слишком короткая биография сервера.

Перед вмешательством сохраняю описанные вручную изменения: настройки внешнего входа, сертификаты, локальные доработки и задания обслуживания. В инструкции 10.1.x прямо предупреждают, что сторонние изменения конфигурации, например SAML, могут быть перезаписаны при патче. Сохраняю их как материал для сравнения, а не как приказ вернуть поверх новых файлов всё старое. Для интеграций записываю контрольный сценарий и ожидаемый результат. Утверждение «новый патч обязательно меняет API» без конкретного примечания к выпуску я вычёркиваю. Проверять совместимость нужно; придумывать причину поломки заранее незачем.

Этот блок команд только читает версию и состояние служб. Команды установки берите из инструкции к выбранной сборке и роли сервера.
Проверки перед установкой патча Zimbra: сборка, роли, копия и окно
Допуск к патчу начинается с проверки состояния.

Как подготовить копию, из которой получится восстановиться

Я не выдаю совет «сделайте полный бэкап через веб-интерфейс» за универсальную инструкцию. Встроенные функции резервного копирования и восстановления относятся к возможностям Network Edition; доступный инструмент зависит также от версии, лицензии и установленных модулей. У другой сборки может быть собственная процедура или внешняя система копирования. Поэтому сначала устанавливаю, что именно сохраняет действующая задача и как из её результата поднимается сервер. Экспорт одного ящика помогает вернуть его содержимое, но не описывает восстановление всей установки вместе с настройками и служебными данными.

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

Следующий шаг — пробное восстановление. Я поднимаю изолированный стенд по выбранной процедуре и проверяю вход в контрольный ящик, старое письмо с вложением, нужные папки и служебные настройки. Стенд не должен принимать рабочий поток или отправлять письма от имени сотрудников. Сверяю восстановленный результат с исходной системой и записываю затраченное время. Открытый архив подтверждает читаемость архива; поднятый почтовый сервис проверяет гораздо больше. Подробный разбор восстановления из копии полезен именно до обновления, пока исходный сервер доступен.

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

Снимок виртуальной машины оцениваю по способу его создания и составу данных. Мне нужна согласованная точка восстановления приложения, а не просто запись о появлении снимка в панели управления. Если часть почты находится вне защищённых дисков, один снимок её не сохранит. Порядок остановки, согласования данных и копирования выбираю по документации применяемой системы. Во время проверки не включаю старую и новую копии одновременно в рабочую сеть. Два активных экземпляра с одной почтовой идентичностью создают отдельную проблему, которую потом нельзя честно назвать неудачным патчем.

Самое неприятное ограничение я проговариваю заранее: в инструкции Zimbra 10.1.x нет автоматического отката, а возврат на предыдущий выпуск после патча не предусмотрен как обратная установка пакета. Мой план возврата — восстановление согласованного состояния целиком по проверенной процедуре. Если после точки копирования сервер уже принял новые письма, они требуют отдельного сохранения и последующей сверки. Копию до работ сохраняю и после успеха. При крупном обновлении со сменой схемы базы Zimbra рекомендует новый полный бэкап; для обычного патча порядок дальнейшего копирования проверяю отдельно.

План возврата должен объяснять, откуда восстановить систему, сколько это займёт и как сохранить новые письма. Одного названия файла копии мало.
Я с командой «АйТи-Фреш» проверю состав копии и проведу пробное восстановление, затем подготовлю порядок обновления Zimbra и приёмки. Длительность окна согласуем по результатам проверки вашей системы. Обсудить задачу

Как рассчитать окно работ: условный «Техносклад»

Окно я рассчитываю по длительности операций на конкретной системе. В него входят получение согласованной копии, установка, запуск, приёмка и время на восстановление с запасом. Универсального обещания «от получаса до двух часов» здесь нет. Размер данных влияет на копирование и возврат, но продолжительность установки зависит ещё и от состава обновления, состояния баз и узлов. Предельный момент перехода к восстановлению считаю от конца окна назад. Ждать условные 30 минут после любой ошибки бессмысленно: на одном сервере это съест весь резерв, на другом нужная операция ещё штатно выполняется.

Для разбора возьму только заданный условный «Техносклад»: магазин оборудования в Подмосковье, 38 рабочих мест. Это учебный сценарий, а не история аварии реального клиента. Задам 32 ящика и 120 ГБ почтовых данных на одиночном узле ветки 10.1.x; количество рабочих мест не равно количеству ящиков. Точный исходный и целевой патчи в настоящем задании подставляются после инвентаризации. Для расчёта приму результаты условной репетиции: согласованная копия — 45 минут, установка и запуск — 20, приёмка — 15, полное восстановление — 50. Эти значения показывают арифметику окна и не служат нормативом для чужого сервера.

В таком сценарии я выделю 150 минут: 45 на копию, 20 на установку, 15 на проверки, 50 на возможное восстановление и 20 запаса. При штатном ходе рабочий результат получаю на 80-й минуте. Это же предельный момент решения о возврате: 150 минус 50 минус 20. Если репетиция покажет другие значения, пересчитаю весь график. Дополнительная остановка во время получения копии уже включена в пример. Обещать всё уложить в 20 минут только потому, что столько заняла установка, нельзя. Почта не читает коммерческие обещания и не ускоряется от жирного шрифта в смете.

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

На репетиции я прохожу тот же маршрут обновления и те же сценарии, что запланированы для рабочей системы. Проверяю доступ к консоли независимо от веб-интерфейса и сохраняю материалы, необходимые для восстановления. Ответственный сотрудник магазина принимает отправку уведомления из приложения, доступ к общему ящику и работу календаря. Ожидаемый учебный итог — приёмка на 80-й минуте либо начало возврата в установленный срок. Я не приписываю этому примеру трёхдневный простой, переписанный API и потерянную выручку: без журнала работ такие детали были бы выдумкой, а не полезным разбором.

В условном расчёте окно — 150 минут, решение о возврате — не позднее 80-й минуты. Свой график считайте по собственной репетиции.
Расчёт окна обновления Zimbra с резервом на восстановление в условном примере
Срок решения рассчитываю от конца окна назад.

Как установить патч и не потерять причину ошибки

К установке я допускаю только заранее выбранную процедуру. Патч внутри ветки и обновление дистрибутива через установщик — разные операции; скачивать полный установочный архив после каждого пакетного обновления не требуется автоматически. В инструкции для 10.1.x есть варианты установки пакетов целиком и по ролям. Я выбираю подходящий своей системе и сверяю весь порядок действий, включая дополнительные компоненты и перезапуски. На распределённой установке учитываю заданную разработчиком последовательность узлов. Копирование одной команды из середины страницы не превращает её в инструкцию для всей почтовой системы.

Отдельно исправлю распространённую путаницу с apt update: команда обновляет сведения о доступных пакетах, а не устанавливает новые версии. В инструкции Zimbra этап получения списка отделён от установки и обновления пакетов. Для одиночного узла недостаточно увидеть, что список успешно получен; нужно проверить завершение предусмотренных инструкцией операций и фактически установленную сборку. yum update тоже нельзя бездумно назначать обязательным первым шагом на любом сервере: обновление всех доступных пакетов меняет состав работ. Подготовку ОС выполняю по требованиям выбранного выпуска и согласованному плану.

Перед подтверждением пакетной операции смотрю, какие пакеты будут изменены и нет ли неожиданного удаления компонентов. Проверяю ошибки доступа к репозиторию и проверки подписи, не маскируя их отключением контроля. Во время работы веду журнал: начало этапа, действие, результат и текст первой ошибки. Сохраняю вывод пакетного менеджера и установщика, а затем связываю его с состоянием почты. При отказе мне нужны сведения, какой шаг успел завершиться, а какой нет. Фраза «что-то красное промелькнуло» годится для светофора, но совершенно бесполезна для восстановления сервера.

Если операция сообщает об ошибке, я фиксирую её и проверяю фактическое состояние. Не обрываю вслепую работающий установщик, не запускаю второй поверх первого и не повторяю обновление наугад. Решение о продолжении принимаю по инструкции и оставшемуся времени окна. Неисправность может относиться к загрузке пакета, зависимости, конфигурации или запуску приложения; у этих случаев разные действия. Массовая правка прав доступа без установленной причины способна испортить ещё рабочие данные. Мне нужна первая подтверждённая причина отказа, а не самая знакомая команда из старой заметки.

Перезапуски делаю так, как требует инструкция к обновляемому компоненту. Например, для полного перезапуска служб узла предусмотрена zmcontrol restart от пользователя zimbra; запускать её в произвольный момент как средство от любой ошибки нельзя. После предусмотренного процедурой запуска снова снимаю версию и статус, затем перехожу к функциональной приёмке. Если подтверждённая неисправность не устраняется в доступный резерв, запускаю подготовленное восстановление. Решение опирается на состояние сервиса и график, а не на желание любой ценой получить зелёную строку. Возврат к рабочей системе — такой же запланированный результат, как успешный патч.

Не прерывайте установщик наугад и не подменяйте восстановление понижением версии пакетов поверх изменённых данных.

Как принять обновление: доставка, приложения и новые данные

Сначала я сопоставляю фактическую версию с целевой и сравниваю состояние служб с исходной записью. Оцениваю только те компоненты, которые установлены и должны работать в этой конфигурации. Затем проверяю вход в веб-клиент и используемый настольный или мобильный клиент. Нормальный статус процесса подтверждает запуск процесса; корректная работа почтовой функции требует своего теста. Если письмо из ящика в тот же ящик прошло, внешняя доставка ещё не проверена. Зелёная панель умеет выглядеть убедительно даже тогда, когда уведомление о заказе всё ещё ждёт в очереди.

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

Затем иду по рабочим сценариям магазина: отправка уведомления из приложения, использование общего адреса, открытие старого вложения, поиск известного письма и календарная операция. Выбираю именно используемые функции и получаю подтверждение ответственного сотрудника. До обновления у каждого сценария уже должен быть ожидаемый результат. Если интеграция отказала, сопоставляю её журнал с журналом сервера и изменениями выпуска. Не объявляю API виноватым по совпадению времени. Ошибка авторизации, недоступный адрес и изменение протокола требуют разных исправлений, даже если внешне выглядят одинаково: письмо не ушло.

Приёмку оформляю таблицей: сценарий, ожидаемый результат, фактический результат, время проверки и исполнитель. Для отправки письма прикладываю его идентификатор и подтверждение получения; для приложения — результат запуска контрольного действия. Если проверка не выполнена, ставлю именно такую отметку. Отсутствие жалобы не превращаю в успешный тест. Незакрытый обязательный сценарий означает, что решение о возврате к обычной работе ещё не принято. Так ответственный сотрудник видит конкретный остаток работ, а следующий дежурный получает понятную точку продолжения.

После восстановления вместо успешного патча провожу такую же приёмку и дополнительно сверяю данные относительно точки копии. Выясняю, какие сообщения сервер успел принять и какие приложения могли отправить уведомления перед возвратом. Сохранённые новые письма возвращаю по выбранной процедуре с проверкой полноты и возможных дублей. Автоматическое повторение бизнес-уведомлений согласую с владельцем приложения, чтобы исправление почты не породило повторные действия в учёте. Старое состояние сервера может быть исправным, но ещё не содержать последнюю переписку. Именно поэтому конец восстановления определяю по данным и функциям вместе.

В конце я закрываю карточку изменения: фактическая сборка, выполненные тесты, замечания, судьба копии до работ и следующий цикл резервного копирования. Возвращаю штатные задания и сообщаю сотрудникам, какие функции доступны. Затем сверяю очередь и ошибки с обычной нагрузкой, включая ближайший рабочий период: ночью часть приложений просто молчит. Для постоянного контроля использую отдельный разбор мониторинга сервисов и очередей. Наблюдение после окна помогает заметить отложенный сбой, но не заменяет приёмку перед возвращением системы в работу.

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

Частые вопросы

Можно ли обновлять Zimbra без полной резервной копии?

Я не допускаю такую работу: инструкция к патчам 10.1.x требует полного бэкапа и предупреждает об отсутствии автоматического отката. До установки проверяю процедуру восстановления.

Достаточно ли выполнить apt update для установки патча?

Нет. Команда обновляет сведения о доступных пакетах. Установка и обновление пакетов выполняются отдельными действиями из инструкции к выбранной сборке Zimbra.

Сколько времени занимает обновление Zimbra?

Универсального срока нет. Я измеряю операции на репетиции и включаю в окно копирование, установку, приёмку, возможное восстановление и запас времени.

Можно ли откатить патч установкой старого пакета?

Такой способ возврата я не планирую. В инструкции 10.1.x автоматический откат отсутствует; готовлю восстановление согласованного состояния и отдельно сохраняю новые письма.

Нужно ли обновлять систему, если postjournal отключён?

Отключённый postjournal меняет применимость CVE-2024-45519, но не отменяет другие исправления. Проверяю фактическую конфигурацию и уведомления для установленной сборки.

Как понять, что обновление прошло успешно?

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

Столкнулись с похожей задачей? Обращайтесь — решим

Если у вас происходит что-то из описанного в этой статье — или любая другая проблема с ИТ-инфраструктурой, — обращайтесь в любое время. Мои специалисты и я лично разберём ситуацию, найдём настоящую причину и доведём до решения.

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Источники

© ООО «АйТи-Фреш» · Москва · Все статьи