La historia de PostfixAdmin: el mostrador del usuario virtual

Mascote do LinuxPro no balcão do correio, abrindo uma caixa postal de latão e colocando um envelope — o usuário virtual do PostfixAdmin

En 2002 Mischa Peters, de High5!, abrió un PHP para no editar MySQL a mano: dominio virtual, mailbox, alias. Lo llamó PostfixAdmin. GPL. El Postfix entregaba; faltaba el mostrador. Veinticuatro años después, PostfixAdmin 4.0.5 (5 de julio de 2026) sigue siendo ese mostrador: ahora con TOTP, contraseña de aplicación, DKIM, Smarty, postfixadmin-cli y PHP 8. La pared de cajas de latón de la portada es literal: cada cajón, un usuario virtual.

High5!, 2002: el usuario virtual gana la web

Postfix, desde 1998, habla mapa. virtual_mailbox_maps, virtual_alias_maps — archivo, hash, MySQL. Quien aloja decenas de dominios no quiere INSERT en MySQL es uno postmap después. Mischa Peters hizo la interfaz. Copyright 2002–2005 High5!. INSTALL.md todavía se abre con su nombre. Requisitos de la época: Apache, PHP, MySQL o PostgreSQL, y un Perl para el vacation. El IMAP del otro lado podía ser Courier; el que se quedó fue el Dovecot, leyendo la misma tabla.

El recorte clásico — el “stack PFA” — quedó: Postfix en la 25/587, Dovecot en la 143/993, SASL en Dovecot, mapa SQL en Postfix, contraseña en el mismo hash que el IMAP traga. El PHP solo escribe la línea. Superadmin crea dominio y admin. El domain-admin toca solo lo que le dieron. El usuario cambia contraseña, reenvía y activa el vacation. Desde la 2.2.0 el login se unificó: cayó el /admin duplicado; todos pasan por el mismo login.php.

Christian Boltz, GingerDog y SourceForge

Christian Boltz (openSUSE, cboltz) entró como usuario: en septiembre de 2006 dejó Plesk por PostfixAdmin, empezó a mandar parches y no paró. David Goodwin (gingerdog) es el otro nombre en la placa. SourceForge registró el proyecto el 20 de marzo de 2007; el código ya tenía cinco años. Lista, wiki, RPM. En 2012 la 2.3.5 cerró SQL injection y XSS — Boltz pidió CVE en oss-sec. La 2.3.x fue la estable durante mucho tiempo.

La 3.0 llevó años. Beta durante más de dos. El 11 de septiembre de 2016 Boltz quitó la etiqueta: 3.0 estable. Reescritura para clases *Handler (web y CLI en el mismo código), edit.php genérico en lugar de un PHP por objeto, Smarty, postfixadmin-cli, SQLite, hook $CONF['*_struct_hook'] para campo extra. Vacation con fecha de inicio y fin. Fetchmail. Alias de dominio. El 2.3 aún recibía agujero crítico de vez en cuando; el mensaje era upgrade.

GitHub, 3.3 y el hash de la contraseña

El git se fue a github.com/postfixadmin/postfixadmin. SourceForge quedó como cartel de “el proyecto se mudó”. El 3.3 quedó con la rama PHP antigua (7.0+). El 3.3.16 salió el 9 de septiembre de 2025, para quien no pueda saltar. El hash de la contraseña es el punto donde se rompe la instalación: lo que el PHP escribe el Dovecot tiene que leerlo. doveadm pw fue muleta durante años — proc_open, permiso, dolor. Hacia 2023 el pacrypt nativo en PHP empezó a cubrir MD5-CRYPT, SHA512-CRYPT, bcrypt, Argon2i/id, SSHA. El 4.0 casi deja el doveadm. Fallar el $CONF['encrypt'] es la forma clásica de que IMAP diga “contraseña inválida” mientras el admin jura que la escribió bien.

4.0: TOTP, DKIM, Composer

El 4.0.0 quedó en borrador. Boltz encontró un detalle; Goodwin publicó el 4.0.1 el 14 de septiembre de 2025 como primer v4 de verdad. SemVer a partir de junio de 2025. Lo que entró:

  • TOTP en el login (admin y mailbox), con exención por IP. PR de Sven Seeberg / verdigado.
  • Contraseña de aplicación — el móvil no se lleva el factor del panel.
  • Clave DKIM del dominio en la base de datos, para que OpenDKIM la lea.
  • install.sh + Composer: Smarty y lo demás ya no vienen “sueltos”.
  • CSP, cookie de sesión más estricto, tema oscuro.
  • PHP mínimo 7.4 en la 4.0.x; master pide 8.2+.
  • vacation.pl revisado. La API XML-RPC sigue existiendo para quien automatiza.

La 4.0.5 (5 de julio de 2026) trata sesión caducada en token inválido y empaqueta build PHP 8.4 con spomky-labs/otphp nuevo (CVE del TOTP de la 4.0.4). Dos tarballs: uno para 7.4, otro para 8.4. Debian ya empaqueta 4.0.1+ds. Ubuntu 26.04 howtos señalan 4.0.5 + Nginx + Let’s Encrypt + MySQL.

Lo que PFA no es

No es Postfix. No es Dovecot. No entrega correo y no habla IMAP. Escribe la tabla que ambos leen. Quota, expiry de contraseña (beta), Roundcube/SquirrelMail en la esquina. Quien quiere Zimbra compra el stack cerrado — el recorte antiguo de este blog está en Zimbra 8 en Ubuntu. Quien quiere el correo “de verdad”, Linux, mapa SQL, es este trío: Postfix + Dovecot + PostfixAdmin.

Cierre

Un holandés de High5!, un PHP de 2002 y la negativa de dar GRANT en MySQL para el cliente. Boltz y Goodwin aguantaron dos décadas. 4.0.5, GPL, TOTP, cajas de latón. El canal en la ventana es el origen. El Tux en el azulejo. El virtual user, en fin, tiene mostrador.

El MTA: La historia de Postfix. El IMAP: La historia de Dovecot.