{"id":558,"date":"2026-09-06T01:22:20","date_gmt":"2026-09-06T04:22:20","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2026\/09\/a-historia-do-postfixadmin\/"},"modified":"2026-09-08T12:37:13","modified_gmt":"2026-09-08T15:37:13","slug":"a-historia-do-postfixadmin","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/en\/2026\/09\/a-historia-do-postfixadmin\/","title":{"rendered":"A hist\u00f3ria do PostfixAdmin: o balc\u00e3o do usu\u00e1rio virtual"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro no balc\u00e3o do correio, abrindo uma caixa postal de lat\u00e3o e colocando um envelope \u2014 o usu\u00e1rio virtual do PostfixAdmin\" src=\"\/wp-content\/uploads\/2026\/09\/postfixadmin-v4.webp\" width=\"1486\" height=\"856\" \/><\/p>\n<p>Em 2002 Mischa Peters, da High5!, abriu um PHP para n\u00e3o editar o MySQL na m\u00e3o: dom\u00ednio virtual, mailbox, alias. Chamou de PostfixAdmin. GPL. O <a href=\"\/2026\/09\/a-historia-do-postfix\/\">Postfix<\/a> entregava; faltava o balc\u00e3o. Vinte e quatro anos depois o PostfixAdmin 4.0.5 (5 de julho de 2026) ainda \u00e9 esse balc\u00e3o \u2014 agora com TOTP, senha de app, DKIM, Smarty, <code>postfixadmin-cli<\/code> e PHP 8. A parede de caixas de lat\u00e3o na capa \u00e9 literal: cada gaveta um usu\u00e1rio virtual.<\/p>\n<p><!-- more --><\/p>\n<h2>High5!, 2002: o virtual user ganha web<\/h2>\n<p>O Postfix, desde 1998, fala mapa. <code>virtual_mailbox_maps<\/code>, <code>virtual_alias_maps<\/code> \u2014 arquivo, hash, MySQL. Quem hospeda dezenas de dom\u00ednio n\u00e3o quer <code>INSERT<\/code> no mysql e um <code>postmap<\/code> depois. Mischa Peters fez a interface. Copyright 2002\u20132005 High5!. <code>INSTALL.md<\/code> ainda abre com o nome dele. Requisitos da \u00e9poca: Apache, PHP, MySQL ou PostgreSQL, e um Perl para o vacation. O IMAP do outro lado podia ser Courier; o que pegou foi o <a href=\"\/2026\/09\/a-historia-do-dovecot\/\">Dovecot<\/a>, lendo a mesma tabela.<\/p>\n<p>O recorte cl\u00e1ssico \u2014 o \u201cstack PFA\u201d \u2014 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\u00f3 escreve a linha. Superadmin cria dom\u00ednio e admin. Domain-admin mexe s\u00f3 no que lhe deram. Usu\u00e1rio troca senha, encaminha e liga vacation. Desde a 2.2.0 o login unificou: caiu o <code>\/admin<\/code> duplicado; todo mundo passa pelo mesmo <code>login.php<\/code>.<\/p>\n<h2>Christian Boltz, GingerDog e o SourceForge<\/h2>\n<p>Christian Boltz (openSUSE, <code>cboltz<\/code>) entrou de usu\u00e1rio: em setembro de 2006 largou o Plesk pelo PostfixAdmin, come\u00e7ou a mandar patch e n\u00e3o parou. David Goodwin (<code>gingerdog<\/code>) \u00e9 o outro nome da placa. O SourceForge registrou o projeto em 20 de mar\u00e7o de 2007; o c\u00f3digo j\u00e1 tinha cinco anos. Lista, wiki, RPM. Em 2012 a 2.3.5 fechou SQL injection e XSS \u2014 Boltz pediu CVE na oss-sec. A 2.3.x foi o est\u00e1vel longo.<\/p>\n<p>A 3.0 levou anos. Beta por mais de dois. Em 11 de setembro de 2016 Boltz tirou o r\u00f3tulo: 3.0 est\u00e1vel. Reescrita para classes <code>*Handler<\/code> (web e CLI no mesmo c\u00f3digo), <code>edit.php<\/code> gen\u00e9rico no lugar de um PHP por objeto, Smarty, <code>postfixadmin-cli<\/code>, SQLite, hook <code>$CONF['*_struct_hook']<\/code> para campo extra. Vacation com data de in\u00edcio e fim. Fetchmail. Alias de dom\u00ednio. O 2.3 ainda recebia furo cr\u00edtico um tempo; o recado era upgrade.<\/p>\n<h2>GitHub, 3.3 e o hash da senha<\/h2>\n<p>O git foi para <code>github.com\/postfixadmin\/postfixadmin<\/code>. SourceForge virou placa \u201co projeto mudou\u201d. 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\u00e3o pode pular. O hash da senha \u00e9 o ponto que parte instala\u00e7\u00e3o: o que o PHP grava o Dovecot tem de ler. <code>doveadm pw<\/code> foi muleta por anos \u2014 <code>proc_open<\/code>, permiss\u00e3o, dor. Por volta de 2023 o <code>pacrypt<\/code> nativo em PHP come\u00e7ou a cobrir MD5-CRYPT, SHA512-CRYPT, bcrypt, Argon2i\/id, SSHA. A 4.0 quase larga o <code>doveadm<\/code>. Errar o <code>$CONF['encrypt']<\/code> \u00e9 o jeito cl\u00e1ssico de o IMAP dizer \u201csenha inv\u00e1lida\u201d com o admin jurando que digitou certo.<\/p>\n<h2>4.0: TOTP, DKIM, Composer<\/h2>\n<p>A 4.0.0 ficou em rascunho. Boltz achou detalhe; Goodwin publicou a <strong>4.0.1 em 14 de setembro de 2025<\/strong> como primeiro v4 de verdade. SemVer a partir de junho de 2025. O que entrou:<\/p>\n<ul>\n<li>TOTP no login (admin e mailbox), com isen\u00e7\u00e3o por IP. PR de Sven Seeberg \/ verdigado.<\/li>\n<li>Senha de aplicativo \u2014 o celular n\u00e3o leva o fator do painel.<\/li>\n<li>Chave DKIM do dom\u00ednio no banco, para o OpenDKIM ler.<\/li>\n<li><code>install.sh<\/code> + Composer: Smarty e o resto n\u00e3o v\u00eam mais \u201csoltos\u201d.<\/li>\n<li>CSP, cookie de sess\u00e3o mais duro, tema escuro.<\/li>\n<li>PHP m\u00ednimo 7.4 na 4.0.x; master pede 8.2+.<\/li>\n<li>vacation.pl revisto. API XML-RPC ainda existe para quem automatiza.<\/li>\n<\/ul>\n<p>A 4.0.5 (5 de julho de 2026) trata sess\u00e3o expirada em token inv\u00e1lido e empacota build PHP 8.4 com <code>spomky-labs\/otphp<\/code> novo (CVE do TOTP da 4.0.4). Dois tarballs: um para 7.4, outro para 8.4. Debian j\u00e1 empacota 4.0.1+ds. Ubuntu 26.04 howtos apontam 4.0.5 + Nginx + Let\u2019s Encrypt + MySQL.<\/p>\n<h2>O que o PFA n\u00e3o \u00e9<\/h2>\n<p>N\u00e3o \u00e9 o Postfix. N\u00e3o \u00e9 o Dovecot. N\u00e3o entrega carta e n\u00e3o 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 \u2014 o recorte antigo deste blog est\u00e1 em <a href=\"\/2017\/04\/install-zimbra-8\/\">Zimbra 8 no Ubuntu<\/a>. Quem quer o correio \u201cde verdade\u201d, Linux, mapa SQL, \u00e9 este trio: Postfix + Dovecot + PostfixAdmin.<\/p>\n<h2>O que ficou<\/h2>\n<p>Um holand\u00eas da High5!, um PHP de 2002 e a recusa de dar <code>GRANT<\/code> no MySQL para o cliente. Boltz e Goodwin seguraram duas d\u00e9cadas. 4.0.5, GPL, TOTP, caixas de lat\u00e3o. O canal na janela \u00e9 a origem. O Tux no azulejo. O virtual user, enfim, tem balc\u00e3o.<\/p>\n<p>O MTA: <a href=\"\/2026\/09\/a-historia-do-postfix\/\">A hist\u00f3ria do Postfix<\/a>. O IMAP: <a href=\"\/2026\/09\/a-historia-do-dovecot\/\">A hist\u00f3ria do Dovecot<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Em 2002 Mischa Peters, da High5!, abriu um PHP para n\u00e3o editar o MySQL na m\u00e3o: dom\u00ednio virtual, mailbox, alias. Chamou de PostfixAdmin. GPL. O Postfix entregava; faltava o balc\u00e3o. Vinte e quatro anos depois o PostfixAdmin 4.0.5 (5 de julho de 2026) ainda \u00e9 esse balc\u00e3o \u2014 agora com TOTP, senha de app, DKIM, &#8230; <a title=\"A hist\u00f3ria do PostfixAdmin: o balc\u00e3o do usu\u00e1rio virtual\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/en\/2026\/09\/a-historia-do-postfixadmin\/\" aria-label=\"Read more about A hist\u00f3ria do PostfixAdmin: o balc\u00e3o do usu\u00e1rio virtual\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[78,2,111,120],"tags":[241,252,237,233,256],"class_list":["post-558","post","type-post","status-publish","format-standard","hentry","category-email","category-linux","category-opensource","category-servidores","tag-dovecot","tag-mysql","tag-php","tag-postfix","tag-postfixadmin"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/558","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/comments?post=558"}],"version-history":[{"count":4,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/558\/revisions"}],"predecessor-version":[{"id":1440,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/558\/revisions\/1440"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/media?parent=558"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/categories?post=558"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/tags?post=558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}