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.
