A história do PostfixAdmin: o balcão do usuário virtual

Tux de pé no correio holandês diante da parede de caixas postais de latão

Em 2002 Mischa Peters, da High5!, abriu um PHP para não editar o MySQL na mão: domínio virtual, mailbox, alias. Chamou de PostfixAdmin. GPL. O Postfix entregava; faltava o balcão. Vinte e quatro anos depois o PostfixAdmin 4.0.5 (5 de julho de 2026) ainda é esse balcão — agora com TOTP, senha de app, DKIM, Smarty, postfixadmin-cli e PHP 8. A parede de caixas de latão na capa é literal: cada gaveta um usuário virtual.

High5!, 2002: o virtual user ganha web

O Postfix, desde 1998, fala mapa. virtual_mailbox_maps, virtual_alias_maps — arquivo, hash, MySQL. Quem hospeda dezenas de domínio não quer INSERT no mysql e um postmap depois. Mischa Peters fez a interface. Copyright 2002–2005 High5!. INSTALL.md ainda abre com o nome dele. Requisitos da época: Apache, PHP, MySQL ou PostgreSQL, e um Perl para o vacation. O IMAP do outro lado podia ser Courier; o que pegou foi o Dovecot, lendo a mesma tabela.

O recorte clássico — o “stack PFA” — ficou: Postfix na 25/587, Dovecot na 143/993, SASL no Dovecot, mapa SQL no Postfix, senha no mesmo hash que o IMAP engole. O PHP só escreve a linha. Superadmin cria domínio e admin. Domain-admin mexe só no que lhe deram. Usuário troca senha, encaminha e liga vacation. Desde a 2.2.0 o login unificou: caiu o /admin duplicado; todo mundo passa pelo mesmo login.php.

Christian Boltz, GingerDog e o SourceForge

Christian Boltz (openSUSE, cboltz) entrou de usuário: em setembro de 2006 largou o Plesk pelo PostfixAdmin, começou a mandar patch e não parou. David Goodwin (gingerdog) é o outro nome da placa. O SourceForge registrou o projeto em 20 de março de 2007; o código já tinha cinco anos. Lista, wiki, RPM. Em 2012 a 2.3.5 fechou SQL injection e XSS — Boltz pediu CVE na oss-sec. A 2.3.x foi o estável longo.

A 3.0 levou anos. Beta por mais de dois. Em 11 de setembro de 2016 Boltz tirou o rótulo: 3.0 estável. Reescrita para classes *Handler (web e CLI no mesmo código), edit.php genérico no lugar de um PHP por objeto, Smarty, postfixadmin-cli, SQLite, hook $CONF['*_struct_hook'] para campo extra. Vacation com data de início e fim. Fetchmail. Alias de domínio. O 2.3 ainda recebia furo crítico um tempo; o recado era upgrade.

GitHub, 3.3 e o hash da senha

O git foi para github.com/postfixadmin/postfixadmin. SourceForge virou placa “o projeto mudou”. A 3.3 ficou o ramo de PHP velho (7.0+). A 3.3.16 saiu em 9 de setembro de 2025, para quem não pode pular. O hash da senha é o ponto que parte instalação: o que o PHP grava o Dovecot tem de ler. doveadm pw foi muleta por anos — proc_open, permissão, dor. Por volta de 2023 o pacrypt nativo em PHP começou a cobrir MD5-CRYPT, SHA512-CRYPT, bcrypt, Argon2i/id, SSHA. A 4.0 quase larga o doveadm. Errar o $CONF['encrypt'] é o jeito clássico de o IMAP dizer “senha inválida” com o admin jurando que digitou certo.

4.0: TOTP, DKIM, Composer

A 4.0.0 ficou em rascunho. Boltz achou detalhe; Goodwin publicou a 4.0.1 em 14 de setembro de 2025 como primeiro v4 de verdade. SemVer a partir de junho de 2025. O que entrou:

  • TOTP no login (admin e mailbox), com isenção por IP. PR de Sven Seeberg / verdigado.
  • Senha de aplicativo — o celular não leva o fator do painel.
  • Chave DKIM do domínio no banco, para o OpenDKIM ler.
  • install.sh + Composer: Smarty e o resto não vêm mais “soltos”.
  • CSP, cookie de sessão mais duro, tema escuro.
  • PHP mínimo 7.4 na 4.0.x; master pede 8.2+.
  • vacation.pl revisto. API XML-RPC ainda existe para quem automatiza.

A 4.0.5 (5 de julho de 2026) trata sessão expirada em token inválido e empacota build PHP 8.4 com spomky-labs/otphp novo (CVE do TOTP da 4.0.4). Dois tarballs: um para 7.4, outro para 8.4. Debian já empacota 4.0.1+ds. Ubuntu 26.04 howtos apontam 4.0.5 + Nginx + Let’s Encrypt + MySQL.

O que o PFA não é

Não é o Postfix. Não é o Dovecot. Não entrega carta e não fala IMAP. Escreve a tabela que os dois leem. Quota, expiry de senha (beta), Roundcube/SquirrelMail no canto. Quem quer Zimbra compra o stack fechado — o recorte antigo deste blog está em Zimbra 8 no Ubuntu. Quem quer o correio “de verdade”, Linux, mapa SQL, é este trio: Postfix + Dovecot + PostfixAdmin.

O que ficou

Um holandês da High5!, um PHP de 2002 e a recusa de dar GRANT no MySQL para o cliente. Boltz e Goodwin seguraram duas décadas. 4.0.5, GPL, TOTP, caixas de latão. O canal na janela é a origem. O Tux no azulejo. O virtual user, enfim, tem balcão.

O MTA: A história do Postfix. O IMAP: A história do Dovecot.