Как я обновляю 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» без конкретного примечания к выпуску я вычёркиваю. Проверять совместимость нужно; придумывать причину поломки заранее незачем.
- Сохранить версию и состояние служб каждого узла.
- Сопоставить сборку, редакцию, ОС и роли.
- Прочитать ограничения целевого патча.
- Зафиксировать доработки и контрольные сценарии.
Как подготовить копию, из которой получится восстановиться
Я не выдаю совет «сделайте полный бэкап через веб-интерфейс» за универсальную инструкцию. Встроенные функции резервного копирования и восстановления относятся к возможностям Network Edition; доступный инструмент зависит также от версии, лицензии и установленных модулей. У другой сборки может быть собственная процедура или внешняя система копирования. Поэтому сначала устанавливаю, что именно сохраняет действующая задача и как из её результата поднимается сервер. Экспорт одного ящика помогает вернуть его содержимое, но не описывает восстановление всей установки вместе с настройками и служебными данными.
В состав плана включаю почтовые данные, базы, каталог учётных записей, конфигурацию и все подключённые хранилища, которые использует сервер. Если система копирования заявляет защиту всей машины, проверяю, попадают ли туда отдельные тома и внешние данные. Успешное завершение задания отвечает на вопрос о выполнении задания, а не о полноте охвата. Копию размещаю отдельно от рабочего хранилища, проверяю права доступа и возможность получить её при отказе основного узла. Пароль к хранилищу, оставшийся только внутри недоступной системы, — очень аккуратно запертый план восстановления.
Следующий шаг — пробное восстановление. Я поднимаю изолированный стенд по выбранной процедуре и проверяю вход в контрольный ящик, старое письмо с вложением, нужные папки и служебные настройки. Стенд не должен принимать рабочий поток или отправлять письма от имени сотрудников. Сверяю восстановленный результат с исходной системой и записываю затраченное время. Открытый архив подтверждает читаемость архива; поднятый почтовый сервис проверяет гораздо больше. Подробный разбор восстановления из копии полезен именно до обновления, пока исходный сервер доступен.
До репетиции отдельно проверяю ресурсы для возврата: куда развернуть систему, где взять установочные материалы исходной сборки и кто имеет доступ к хранилищу копий. Если восстановление зависит от свободного места на том же переполненном хранилище, этот путь нельзя считать готовым. На стенде фиксирую порядок подключения данных и параметры, которые пришлось изменить для изоляции. В рабочем плане отличаю их от настроек основной системы: случайно вернуть тестовую маршрутизацию вместе с восстановленными ящиками вполне возможно. Эти записи позволяют повторить процедуру без угадывания по памяти.
Снимок виртуальной машины оцениваю по способу его создания и составу данных. Мне нужна согласованная точка восстановления приложения, а не просто запись о появлении снимка в панели управления. Если часть почты находится вне защищённых дисков, один снимок её не сохранит. Порядок остановки, согласования данных и копирования выбираю по документации применяемой системы. Во время проверки не включаю старую и новую копии одновременно в рабочую сеть. Два активных экземпляра с одной почтовой идентичностью создают отдельную проблему, которую потом нельзя честно назвать неудачным патчем.
Самое неприятное ограничение я проговариваю заранее: в инструкции Zimbra 10.1.x нет автоматического отката, а возврат на предыдущий выпуск после патча не предусмотрен как обратная установка пакета. Мой план возврата — восстановление согласованного состояния целиком по проверенной процедуре. Если после точки копирования сервер уже принял новые письма, они требуют отдельного сохранения и последующей сверки. Копию до работ сохраняю и после успеха. При крупном обновлении со сменой схемы базы 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 и потерянную выручку: без журнала работ такие детали были бы выдумкой, а не полезным разбором.
- Согласовать остановку и порядок входящей доставки.
- Оставить время на полный возврат и запас.
- Назначить предельный момент решения.
- Предупредить сотрудников через независимый канал.
Как установить патч и не потерять причину ошибки
К установке я допускаю только заранее выбранную процедуру. Патч внутри ветки и обновление дистрибутива через установщик — разные операции; скачивать полный установочный архив после каждого пакетного обновления не требуется автоматически. В инструкции для 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, но не отменяет другие исправления. Проверяю фактическую конфигурацию и уведомления для установленной сборки.
Как понять, что обновление прошло успешно?
Сравнить фактическую и целевую сборки, проверить нужные службы, внутреннюю и внешнюю доставку, приложения и сохранность данных. Результаты записать и согласовать с ответственным сотрудником.
Источники
- Zimbra: уведомление о CVE-2024-45519 — Проверены компонент postjournal, его отключение по умолчанию и рекомендация устанавливать исправления. https://blog.zimbra.com/2024/10/zimbra-cve-2024-45519-vulnerability-stay-secure-by-updating/
- Zimbra: выпуск 10.1.13 — Проверено описание CVE-2025-66376 как сохранённого XSS в Classic UI и наличие исправления в этом выпуске. Исторический номер не выдан за текущую рекомендуемую версию. https://wiki.zimbra.com/wiki/Zimbra_Releases/10.1.13
- Zimbra: установка патчей 10.1.x — Проверены накопительность патчей, полный бэкап, отсутствие автоматического отката, установка по ролям, разделение получения списков и обновления пакетов, перезапуски и риск перезаписи сторонних настроек. https://wiki.zimbra.com/wiki/Zimbra_Releases/10.1.0/patch_installation
- Zimbra: справочник команд администратора — Проверены su - zimbra, zmcontrol -v, zmcontrol status и zmcontrol restart; команды версии и статуса найдены в экспертной базе и сверены с документацией разработчика. https://github.com/Zimbra/adminguide/blob/develop/cmdlineutils.adoc
- Zimbra: официальные ответы по редакциям — Подтверждена привязка встроенных возможностей Backup and Restore к Network Edition; конкретный способ зависит от установленной версии и модулей. Факт о различии редакций найден в экспертной базе. https://www.zimbra.com/faqs/
- Zimbra Daffodil: инструкция обновления — Проверены допустимые пути обновления и предупреждения о настройках; подтверждён найденный в базе факт о новом полном бэкапе после крупного обновления из-за изменения схемы базы. https://zimbra.github.io/documentation/zimbra-10/upgrade.html


