Servidor de E-mail · 6 min read · Nov 11, 2025

Usuários e Domínios Virtuais Com Postfix, Courier E MySQL (+ SMTP-AUTH, Quota, SpamAssassin, ClamAV)

Este é um “copiar e colar” HowTo! A maneira mais fácil de seguir este tutorial é usar um cliente de linha de comando/cliente SSH (como o PuTTY para Windows) e simplesmente copiar e colar os comandos (exceto onde você deve fornecer suas próprias informações, como endereços IP, nomes de host, senhas,…). Isso ajuda a evitar erros de digitação.

Usuários e Domínios Virtuais Com Postfix, Courier E MySQL (+ SMTP-AUTH, Quota, SpamAssassin, ClamAV)

Versão 1.0
Autor: Falko Timme

Este tutorial é Copyright (c) 2005 por Falko Timme. É derivado de um tutorial de Christoph Haas que você pode encontrar em http://workaround.org. Você é livre para usar este tutorial sob a licença Creative Commons 2.5 ou qualquer versão posterior.

Este documento descreve como instalar um servidor de e-mail baseado em Postfix que é baseado em usuários e domínios virtuais, ou seja, usuários e domínios que estão em um banco de dados MySQL. Também vou demonstrar a instalação e configuração do Courier (Courier-POP3, Courier-IMAP), para que o Courier possa autenticar contra o mesmo banco de dados MySQL que o Postfix usa.

O servidor Postfix resultante é capaz de SMTP-AUTH e TLS e quota (a quota não está embutida no Postfix por padrão, vou mostrar como corrigir seu Postfix adequadamente). As senhas são armazenadas em forma criptografada no banco de dados (a maioria dos documentos que encontrei lidava com senhas em texto simples, o que é um risco de segurança). Além disso, este tutorial cobre a instalação de Amavisd, SpamAssassin e ClamAV para que os e-mails sejam verificados quanto a spam e vírus.

A vantagem de tal configuração “virtual” (usuários e domínios virtuais em um banco de dados MySQL) é que é muito mais performática do que uma configuração baseada em usuários de sistema “reais”. Com esta configuração virtual, seu servidor de e-mail pode lidar com milhares de domínios e usuários. Além disso, é mais fácil de administrar porque você só precisa lidar com o banco de dados MySQL ao adicionar novos usuários/domínios ou editar os existentes. Não há mais comandos postmap para criar arquivos db, não há mais recarregamento do Postfix, etc. Para a administração do banco de dados MySQL, você pode usar ferramentas baseadas na web como phpMyAdmin, que também será instalado neste howto. A terceira vantagem é que os usuários têm um endereço de e-mail como nome de usuário (em vez de um nome de usuário + um endereço de e-mail), o que é mais fácil de entender e lembrar.

Este tutorial é baseado em Debian Sarge (Debian 3.1). Você já deve ter configurado um sistema Debian básico, conforme descrito aqui: https://www.howtoforge.com/perfect_setup_debian_sarge e https://www.howtoforge.com/perfect_setup_debian_sarge_p2.

Este howto é destinado a ser um guia prático; não cobre os fundamentos teóricos. Eles são tratados em muitos outros documentos na web.

Este documento vem sem garantia de qualquer tipo! Quero dizer que este não é o único modo de configurar tal sistema. Existem muitas maneiras de alcançar esse objetivo, mas este é o caminho que eu sigo. Não dou nenhuma garantia de que isso funcionará para você!

1 Instalar Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

Tudo isso pode ser instalado com um único comando:

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authmysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin (1 linha!)

Você será perguntado algumas questões:

Habilitar suExec? <– Sim
Criar diretórios para administração baseada na web? <– Não
Tipo geral de configuração? <– Site da Internet
Para onde deve ir o e-mail para root? <– NENHUM
Nome do servidor? <– server1.example.com
Outros destinos para aceitar e-mail? (em branco para nenhum) <– server1.example.com, localhost, localhost.localdomain
Forçar atualizações síncronas na fila de e-mail? <– Não
Certificado SSL necessário <– Ok
Instalar Dicas <– Ok
Qual servidor web você gostaria de reconfigurar automaticamente? <– apache, apache2
Você quer que eu reinicie o apache agora? <– Sim

2 Aplicar Patch de Quota ao Postfix

Precisamos obter as fontes do Postfix, aplicar o patch de quota, construir novos pacotes .deb do Postfix e instalar esses pacotes .deb:

apt-get install build-essential dpkg-dev fakeroot debhelper libdb4.2-dev libgdbm-dev libldap2-dev libpcre3-dev libmysqlclient10-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch (1 linha!)
cd /usr/src
apt-get source postfix
wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.1.5-trash.patch.gz
gunzip postfix-2.1.5-trash.patch.gz
cd postfix-2.1.5
patch -p1 < ../postfix-2.1.5-trash.patch
dpkg-buildpackage
cd ..
dpkg -i postfix_2.1.5-9_i386.deb
dpkg -i postfix-mysql_2.1.5-9_i386.deb
dpkg -i postfix-tls_2.1.5-9_i386.deb

3 Criar O Banco De Dados MySQL Para Postfix/Courier

Por padrão, o MySQL é instalado sem uma senha de root, que mudamos imediatamente (substitua yourrootsqlpassword pela senha que você deseja usar):

mysqladmin -u root password yourrootsqlpassword

Agora criamos um banco de dados chamado mail:

mysqladmin -u root -p create mail

Em seguida, vamos para o shell do MySQL:

mysql -u root -p

No shell do MySQL, criamos o usuário mail_admin com a senha mail_admin_password (substitua pela sua própria senha) que tem privilégios SELECT,INSERT,UPDATE,DELETE no banco de dados mail. Este usuário será usado pelo Postfix e Courier para se conectar ao banco de dados mail:

GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost’ IDENTIFIED BY ‘mail_admin_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost.localdomain’ IDENTIFIED BY ‘mail_admin_password’;
FLUSH PRIVILEGES;

Ainda no shell do MySQL, criamos as tabelas que o Postfix e o Courier precisam:

USE mail;

CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;

CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;

CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT ‘10485760’,
PRIMARY KEY (email)
) TYPE=MyISAM;

CREATE TABLE transport (
domain varchar(128) NOT NULL default ‘’,
transport varchar(128) NOT NULL default ‘’,
UNIQUE KEY domain (domain)
) TYPE=MyISAM;

quit;

Como você pode ter notado, com o comando quit; saímos do shell do MySQL e estamos de volta ao shell do Linux.

A tabela domains armazenará cada domínio virtual para o qual o Postfix deve receber e-mails (por exemplo, example.com).

domain
example.com

A tabela forwardings é para aliasar um endereço de e-mail para outro, por exemplo, encaminhar e-mails de [email protected] para [email protected].

sourcedestination
[email protected][email protected]

A tabela users armazena todos os usuários virtuais (ou seja, endereços de e-mail, porque o endereço de e-mail e o nome de usuário são os mesmos) e senhas (em forma criptografada!) e um valor de quota para cada caixa de correio (neste exemplo, o valor padrão é 10485760 bytes, o que significa 10MB).

emailpasswordquota
[email protected]No9.E4skNvGa. (“segredo” em forma criptografada)10485760

A tabela transport é opcional, é para usuários avançados. Ela permite encaminhar e-mails para usuários individuais, domínios inteiros ou todos os e-mails para outro servidor. Por exemplo,

domaintransport
example.comsmtp:[1.2.3.4]

encaminharia todos os e-mails para example.com via o protocolo smtp para o servidor com o endereço IP 1.2.3.4 (os colchetes [] significam “não faça uma busca do registro MX DNS” (o que faz sentido para endereços IP…). Se você usar um nome de domínio totalmente qualificado (FQDN) em vez disso, você não usaria os colchetes.).

A propósito, (estou sugerindo que o endereço IP do seu sistema de servidor de e-mail é 192.168.0.100) você pode acessar phpMyAdmin através de http://192.168.0.100/phpmyadmin/ em um navegador e fazer login como mail_admin. Então você pode dar uma olhada no banco de dados. Mais tarde, você pode usar phpMyAdmin para administrar seu servidor de e-mail.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.