Servidor de Email · 3 min read · Oct 06, 2025
Solução Completa de Servidor de Email com Domínios e Usuários Virtuais (Debian Etch, Postfix, Mysql, Dovecot, DSpam, ClamAV, Postgrey, RBL) - Página 4
B. Configurando o Postfix para Usuários e Domínios Virtuais
Mesmo que os servidores de troca de email não estejam entregando emails para os usuários e domínios virtuais, eles estarão rejeitando com base em destinos válidos/inválidos. Portanto, precisamos que os servidores mx consigam se conectar ao servidor SQL para verificar os destinos. Vá em frente e coloque as informações no postconf:
# postconf -e 'virtual_alias_domains ='
# postconf -e 'virtual_alias_maps = proxy:mysql:$config_directory/mysql_virtual_alias_maps.cf'
# postconf -e 'virtual_mailbox_domains = proxy:mysql:$config_directory/mysql_virtual_domains_maps.cf'
# postconf -e 'virtual_mailbox_maps = proxy:mysql:$config_directory/mysql_virtual_mailbox_maps.cf'
# postconf -e 'virtual_mailbox_base = /vmail'
# postconf -e 'virtual_minimum_uid = 150'
# postconf -e 'virtual_uid_maps = static:150'
# postconf -e 'virtual_gid_maps = static:8'
# postconf -e 'virtual_create_maildirsize = yes'
# postconf -e 'virtual_mailbox_extended = yes'
# postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf'
# postconf -e 'virtual_mailbox_limit_override = yes'
# postconf -e 'virtual_maildir_limit_message = "O usuário que você está tentando contatar excedeu sua cota."
# postconf -e 'virtual_overquota_bounce = yes'
# postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql_virtual_transports.cf'Existem várias “pegadinhas” aqui. Esta configuração hospedará as caixas de correio dos usuários virtuais em /vmail. Se você precisar armazenar suas caixas de correio em outro local, altere a linha virtual_mailbox_base de acordo.
O virtual_minimum_uid e virtual_uid_maps apontam para o id do usuário 150. Este id de usuário é para um usuário “Correio Virtual” criado especificamente. Ele usa o grupo padrão “mail”, com o gid padrão (Debian) de 8. Você pode criar o usuário e o diretório assim:
# useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Caixa de Correio Virtual" vmail
# mkdir /var/vmail
# chmod 770 /var/vmail/
# chown vmail:mail /var/vmail/Agora precisamos instalar as ferramentas do cliente NFS:
# apt-get install nfs-common portmapO diretório então precisa ser montado no compartilhamento NFS. Para fazer um teste simples, execute o seguinte:
# mount files-1.internal.example.com:/vmail /vmailVocê deve agora ter acesso ao compartilhamento /vmail de files-1. Tente escrever um arquivo (não deve funcionar!):
# cd /vmail
# touch tmpNOTA: Você deve receber um erro de somente leitura!
Assumindo que tudo está funcionando, vá em frente e desmonte o NFS:
# cd /
umount /vmailE então torne a montagem permanente colocando o seguinte em seu /etc/fstab:
[...]
files-1.internal.example.com:/vmail /vmail nfs ro,rsize=4096,hard,intr,tcp,noatime,nodev,async 0 0Vá em frente e monte o sistema de arquivos mais uma vez:
# mount /vmail… e você está pronto para começar!
C. Configuração do MySQL do Postfix
O Postfix foi instalado com suporte ao MySQL, mas isso não significa que ele já sabe como usar nosso banco de dados. Ele precisa ser fornecido com várias informações de consulta SQL para cada tipo de tabela em nosso banco de dados. Essas informações são armazenadas nos arquivos MySQL definidos no arquivo main.cf. Observe que nos arquivos a seguir, a última linha contém um único comentário (precedido por #) com a consulta completa. Versões recentes do Postfix podem usar isso em vez das outras declarações. Se você estiver usando uma versão mais nova, basta comentar todas as outras linhas e descomentar a declaração da consulta.
/etc/postfix/mysql_virtual_alias_maps.cfuser = vmail_user
password = vmail_user_password
hosts = sql-1.internal.example.com
dbname = virtual_mail
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'
#query = SELECT goto FROM alias WHERE address='%s' AND active = '1'/etc/postfix/mysql_virtual_domains_maps.cfuser = vmail_user
password = vmail_user_password
hosts = sql-1.internal.example.com
dbname = virtual_mail
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = ‘0? and active = ‘1?
#query = SELECT domain FROM domain WHERE domain=’%s’ AND backupmx = ‘0? AND active = ‘1?/etc/postfix/mysql_virtual_mailbox_limit_maps.cfuser = vmail_user
password = vmail_user_password
hosts = sql-1.internal.example.com
dbname = virtual_mail
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = ‘1?
#query = SELECT quota FROM mailbox WHERE username=’%s’ AND active = ‘1?/etc/postfix/mysql_virtual_mailbox_maps.cfuser = vmail_user
password = vmail_user_password
hosts = sql-1.internal.example.com
dbname = virtual_mail
table = mailbox
select_field = CONCAT(domain,’/',maildir)
where_field = username
additional_conditions = and active = ‘1?
#query = SELECT CONCAT(domain,’/',maildir) FROM mailbox WHERE username=’%s’ AND active = ‘1?/etc/postfix/mysql_virtual_transports.cfuser = vmail_user
password = vmail_user_password
hosts = sql-1.internal.example.com
dbname = virtual_mail
table = domain
select_field = transport
where_field = domain
additional_conditions = and active = ‘1?
#query = SELECT transport FROM domain WHERE domain=’%s’ AND active = ‘1?Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.