Servidor de E-mail Multidomínio com Postfix, Dovecot e MariaDB

Instale seu próprio servidor de envio e recebimento de e-mails, com suporte a múltiplos domínios, autenticação segura e integração direta com MariaDB. Tudo isso sem precisar de usuários no sistema operacional e sem depender de painéis.


Visão Geral

Este guia cobre:

  • Instalação do Postfix e Dovecot com suporte a múltiplos domínios
  • Armazenamento de usuários e aliases no MariaDB
  • Autenticação segura com SHA512-CRYPT
  • Estrutura de diretórios isolada por domínio/usuário
  • Integração com DNS externo (Cloudflare)
  • Total independência de painéis como cPanel ou Zimbra

Pré-requisitos

  • Servidor Linux (Debian/Ubuntu)
  • DNS sob seu controle (preferencialmente via Cloudflare)
  • MariaDB instalado
  • Certbot configurado com TLS
  • Webmail funcional (ex: Roundcube ou Rainloop)

1. Instalação dos Pacotes

apt update
apt install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql mariadb-server

2. Estrutura no Banco de Dados

Criar o banco e as tabelas

CREATE DATABASE mailserver;

USE mailserver;

CREATE TABLE domains (
  domain VARCHAR(255) NOT NULL PRIMARY KEY
);

CREATE TABLE users (
  email VARCHAR(255) NOT NULL PRIMARY KEY,
  password VARCHAR(255) NOT NULL,
  maildir VARCHAR(255) NOT NULL
);

CREATE TABLE aliases (
  source VARCHAR(255) NOT NULL,
  destination VARCHAR(255) NOT NULL
);

Inserir dados

INSERT INTO domains (domain) VALUES ('seudominio.com.br');

INSERT INTO users (email, password, maildir) VALUES (
  '[email protected]',
  ENCRYPT('senhaForte123', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))),
  'seudominio.com.br/kemper/'
);

INSERT INTO aliases (source, destination) VALUES ('[email protected]', '[email protected]');

3. Configurações do Postfix

Arquivos de consulta

/etc/postfix/mysql-virtual-domains.cf

user = mailuser
password = SUASENHA
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM domains WHERE domain='%s'

/etc/postfix/mysql-virtual-users.cf

user = mailuser
password = SUASENHA
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM users WHERE email='%s'

/etc/postfix/mysql-virtual-aliases.cf

user = mailuser
password = SUASENHA
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM aliases WHERE source='%s'

/etc/postfix/main.cf

Adicione ou edite:

virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-users.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-aliases.cf

virtual_mailbox_base = /var/mail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = lmtp:unix:private/dovecot-lmtp

Crie o usuário:

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail -m

4. Configurações do Dovecot

/etc/dovecot/dovecot-sql.conf.ext

driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=SUASENHA

default_pass_scheme = SHA512-CRYPT

password_query = \
  SELECT email as user, password FROM users WHERE email='%u';

user_query = \
  SELECT maildir AS home, 5000 AS uid, 5000 AS gid FROM users WHERE email='%u';

/etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:/var/mail/%d/%n

/etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-sql.conf.ext

5. Permissões

chown -R vmail:vmail /var/mail

6. Reiniciar os serviços

systemctl restart postfix dovecot

7. DNS Externo (Cloudflare)

Para cada domínio, configure:

Tipo: MX
Nome: @
Valor: mail.seudominio.com.br
Prioridade: 10

Tipo: A
Nome: mail
Valor: SEU.IP.PÚBLICO (desative o proxy - nuvem cinza)

Tipo: TXT
Nome: @
Valor: v=spf1 ip4:SEU.IP.PÚBLICO -all

Tipo: TXT
Nome: default._domainkey
Valor: (chave DKIM gerada)

Tipo: TXT
Nome: _dmarc
Valor: v=DMARC1; p=none; rua=mailto:[email protected]

Configure o PTR reverso junto ao provedor (deve bater com mail.seudominio.com.br).

Clique aqui para saber como gerar seu DKIM


8. Estrutura Final no Disco

/var/mail/seudominio.com.br/kemper/
/var/mail/outrodominio.net/contato/
/var/mail/empresa.org/suporte/

Todos os diretórios pertencentes a vmail:vmail.


Considerações Finais

Este setup permite gerenciar centenas de domínios e usuários, com baixo consumo de recursos, segurança e total independência de soluções comerciais. Você pode automatizar o gerenciamento via scripts ou até criar um painel em PHP com autenticação segura e controle total.

Rolar para cima