Problema
Los entornos de correo empresarial que utilizan Proxmox Mail Gateway (PMG) suelen requerir actualizaciones periódicas para beneficiarse de mejoras de seguridad y de componentes subyacentes (kernel, SpamAssassin, ClamAV, etc.). En la práctica, una actualización mayor —por ejemplo, de la serie 8.x/9.0 a 9.1— puede romper la cadena de backups, dejar sin acceso a la cuarentena o provocar incompatibilidades de base de datos. El síntoma típico es que, tras ejecutar apt upgrade, el servicio PMG no arranca, los backups aparecen corruptos o la nueva interfaz de cuarentena no reconoce usuarios existentes. La raíz del problema suele estar en cambios de paquetes base (Debian 13 → 13.5, kernel 6.x → 7.0) y en la introducción de cifrado cliente‑lado para los destinos de Proxmox Backup Server (PBS).
Causa
- Saltos de versión del sistema operativo – PMG se basa en Debian; al cambiar de una versión menor a una mayor, el gestor de paquetes actualiza bibliotecas críticas (libc, systemd) que pueden requerir reinicios de servicios o ajustes de configuraciones heredadas.
- Migración de esquema de PostgreSQL – Cada versión importante de PMG incluye una actualización de la base de datos. Si la migración falla, la UI muestra errores y los filtros dejan de aplicarse.
- Cambios en ZFS – La versión 9.1 incorpora ZFS 2.4. Pools creados con versiones anteriores pueden requerir una actualización de la tabla de propiedades o presentar incompatibilidades con snapshots usados por PBS.
- Activación del cifrado de backup – La opción “encrypted backup” introduce una capa de cifrado antes de enviar los datos a PBS. Si la clave no está disponible o el cliente no está configurado, los trabajos de backup fallan silenciosamente.
- Configuraciones personalizadas – Scripts de post‑instalación, reglas de SpamAssassin modificadas o ajustes de la cuarentena que dependen de rutas estáticas pueden quedar obsoletos cuando los paquetes se reemplazan.
Solución
1. Preparación del entorno
- Snapshot del pool ZFS: crea un snapshot de la raíz del sistema y del pool que contiene los datos de PMG.
- Backup completo con PBS: ejecuta un backup sin cifrado primero para validar que la cadena funciona.
- Exportar la base de datos:
pg_dumpall -U postgres > /root/pmg-db-backup.sql. - Revisar configuraciones personalizadas: copia
/etc/pmg/*y cualquier script bajo/usr/local/bina un directorio temporal.
2. Habilitar cifrado en PBS (opcional pero recomendado)
- En el servidor PBS, crea un vault con una clave maestra:
proxmox-backup-manager vault create myvault --type passphrase - En el nodo PMG, registra el vault y habilita el cifrado para el repositorio:
proxmox-backup-client config set backup:myrepo encryption-key myvault
3. Actualizar el nodo PMG
- Cambia los repositorios a la rama de Debian 13.5:
sed -i 's/bullseye/trixie/g' /etc/apt/sources.list apt update - Instala los paquetes de la nueva versión sin remover configuraciones:
apt full-upgrade -y - Ejecuta los scripts de migración de PostgreSQL que PMG coloca en
/usr/share/pmg/migration/:/usr/share/pmg/migration/upgrade-postgresql.sh - Reinicia los servicios críticos:
systemctl restart pmgproxy pmgdaemon
4. Verificar la integración de la cuarentena
- Accede a la UI y comprueba que los usuarios pueden marcar correos como “seen” y que la columna de puntuación de spam muestra componentes positivos y negativos.
- Si la vista de imágenes externas está deshabilitada, habilita la opción “on‑demand” desde
Configuration → Quarantine → Image loading.
5. Re‑activar backups cifrados
- Modifica el trabajo de backup en
/etc/pmg/backup/jobs.d/para incluir la bandera--encrypt. - Ejecuta un backup de prueba:
proxmox-backup-client backup pmg@myrepo:/var/lib/pmg --encrypt
6. Restaurar configuraciones personalizadas
- Copia de nuevo los archivos bajo
/etc/pmg/y los scripts. - Revisa que los archivos de reglas de SpamAssassin (
/etc/spamassassin/local.cf) no tengan parámetros obsoletos.
Cuándo aplicar esta solución
- Actualizaciones mayores de PMG (p.ej., 8.x → 9.x, 9.0 → 9.1) donde el salto incluye cambios de kernel o de componentes críticos.
- Implementación de cifrado de backup en entornos que manejan datos sensibles (configuración, estadísticas, reglas).
- Problemas de disponibilidad de la cuarentena después de una actualización que introdujo la nueva UI.
No es necesario seguir este proceso si solo se aplican parches menores (p.ej., 9.1‑1 a 9.1‑2) y no se ha activado el cifrado de backup.
Código
# 1. Snapshot ZFS
zfs snapshot -r rpool@pre-pmg-upgrade
# 2. Exportar DB
pg_dumpall -U postgres > /root/pmg-db-backup.sql
# 3. Cambiar repositorios a Debian trixie
sed -i 's/bullseye/trixie/g' /etc/apt/sources.list
apt update && apt full-upgrade -y
# 4. Migrar PostgreSQL
/usr/share/pmg/migration/upgrade-postgresql.sh
# 5. Reiniciar servicios
systemctl restart pmgproxy pmgdaemon
# 6. Configurar backup cifrado
proxmox-backup-client config set backup:myrepo encryption-key myvault
proxmox-backup-client backup pmg@myrepo:/var/lib/pmg --encrypt
Verificación
- Estado de los servicios:
systemctl status pmgproxy pmgdaemondebe mostrar “active (running)”. - Flujo de correo: envía un mensaje de prueba desde una cuenta interna y verifica que llega al destinatario y que el registro aparece en
/var/log/pmg/maillog. - Backup cifrado: inspecciona el repositorio PBS; los archivos deben aparecer con la extensión
.encyprox... backup-client verifydebe devolver “OK”. - Cuarentena: abre la UI, marca un mensaje como “seen” y confirma que el icono de check aparece para todos los usuarios de la bandeja compartida.
- Base de datos: ejecuta
psql -U postgres -c "\l"y comprueba que la versión de la base de datos corresponde a PostgreSQL 17.
Notas adicionales
- Mantén una copia del snapshot ZFS durante al menos 48 h; si la actualización falla, puedes volver a la instantánea con
zfs rollback -r rpool@pre-pmg-upgrade. - Cuando habilites el cifrado, guarda la frase de paso del vault en un gestor de secretos externo; la pérdida de esa clave imposibilita la restauración de backups.
- Si utilizas contenedores LXC para PMG, revisa que la plantilla base esté alineada con Debian trixie antes de iniciar la actualización.
- Los logs de
pmgdaemonypmgproxyson la primera fuente de diagnóstico cuando la cuarentena no muestra los cambios esperados. - En entornos con alta carga, programa la actualización fuera de las horas pico y habilita el modo “maintenance” en la UI para evitar que los usuarios envíen correos mientras los servicios se reinician.