A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Linux

Slackware + Postfix + Domínios Virtuais

Seg

20

Mar

2006


12:34

(5 votos, média 4.60 de 5) 


Domínios compartilhados + contas Unix

O exemplo mais simples de domínio canônico + domínios hospedados com contas Unix é colocar os domínios hospedados no parâmetro mydestination. São chamados de domínios compartilhados porque compartilham o mesmo destino. Considerando numaboa.org como domínio hospedado, teremos:

myhostname = mail.numaboa.com.br
mydomain = numaboa.com.br
mydestination = $myhostname, $mydomain, localhost.$mydomain, ns1.$mydomain,
  ns2.$mydomain, www.$mydomain, webmail.$mydomain, ftp.$mydomain, numaboa.org
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
local_transport = local:$myhostname
home_mailbox = Maildir/
mail_spool_directory = /home/postfix

Assim como no modelo anterior, esta solução exige que cada usuário tenha uma conta Unix, ou seja, sobra novamente para o administrador do sistema :nuts:

Existe um problema adicional neste tipo de solução. Digamos que exista um usuário local registrado como maria, que queira um endereço adicional como usuário maricota e que toda a correspondência seja entregue na mesma caixa postal. Não tem como fazer! O administrador do sistema vai precisar criar dois usuários locais que terão caixas de correio separadas. Mas a encrenca não pára por aí: o usuário maria vai receber não só os emails que tenham o endereço maria@numaboa.com.br, como também os que tenham o endereço maria@numaboa.org!

Mas nem tudo é desvantagem. Com esta solução, um administrador que tenha vários domínios sob a sua responsabilidade pode, por exemplo, criar um usuário postmaster e, independentemente do domínio que conste no endereço (postmaster@numaboa.com.br, postamaster@numaboa.org, etc), todos os emails enviados para postmaster irão para a mesma caixa postal. Sob este aspecto, isto facilita a vida do administrador. Mesmo assim não vale a pena, pois o trabalho de gerenciar o resto é um tormento.

Domínios separados + contas Unix

Para evitar os problemas de domínios compartilhados, o jeito é separar o domínio canônico dos domínios hospedados declarando os domínios hospedados como domínios virtuais. As contas Unix de usuários de domínios canônicos são encontradas pelo sistema porque estão num mapa próprio (unix:passwd.byname). Quando criamos um domínio virtual, os endereços também são virtuais e precisam ser apontados para usuários locais que tenham contas Unix. É aí que entra um mapa de aliases que fará a "tradução" de endereços para usuários.

Para declarar um domínio como virtual, existe o parâmetro virtual_alias_domains e, para declarar o mapa de aliases, há o parâmetro virtual_alias_maps. Além disso, mais duas coisas devem ser observadas: os domínios virtuais NÃO podem ser listados no parâmetro mydestination porque senão o agente de entrega fica todo embananado e os domínios virtuais NÃO podem constar no parâmetro relay_domains. Veja como fica a configuração em /etc/postfix/main.cf:

myhostname = mail.numaboa.com.br
mydomain = numaboa.com.br
mydestination = $myhostname, $mydomain, localhost.$mydomain, ns1.$mydomain,
  ns2.$mydomain, www.$mydomain, webmail.$mydomain, ftp.$mydomain (não pode ter numaboa.org)
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
local_transport = local:$myhostname
home_mailbox = Maildir/
mail_spool_directory = /home/postfix
virtual_alias_domains = numaboa.org
virtual_alias_maps = hash:/etc/postfix/mapa_virtual

Observe que os dois novos parâmetros estão no plural (domains e maps). Isto significa que podemos declarar vários domínios virtuais e vários mapas virtuais. No parâmetro virtual_alias_maps informamos que o mapa é do tipo hash, está no diretório /etc/postfix/ e se chama mapa_virtual. Se tivermos dois usuários registrados (teste e teste1), um exemplo de mapa de aliases seria:

numaboa.org            DOMÍNIO

info@numaboa.org       teste
contato@numaboa.org    teste

duvidas@numaboa.org    teste1

# Qualquer endereço não resolvido
@numaboa.org           teste1

A primeira linha diz que numaboa.org é um domínio virtual (a porção da direita, DOMÍNIO, é ignorada). Isto parece chover no molhado porque já declaramos numaboa.org como sendo um domínio virtual com alias usando o parâmetro virtual_alias_domains. Acontece que, se esta declaração não existir, as mensagens serão rejeitadas com "relay access denied" ou .

As linhas em branco ou iniciadas com # são ignoradas. Os endereços completos apontam para usuários locais e @numaboa.org é chamado de catch all (pega tudo) porque aponta para um usuário local todos os endereços que não estejam referidos. Não costumo usar o catch all porque acabo recebendo um caminhão de spams, principalmente daqueles engraçadinhos que criam endereços de A a Z para determinado domínio!

O domínio virtual possui seu próprio espaço de nomes de usuários. Isto significa que os nomes dos usuários locais não são visíveis num domínio virtual com alias. Tá complicado? É o seguinte... se enviarmos um email para teste@numaboa.org, este endereço não existe. Isto significa que o usuário local teste não é visível no domínio numaboa.org (e nem em qualquer outro domínio virtual). Se quisermos que este seja um endereço válido, ele precisaria estar declarado no mapa de aliases, ou seja, precisaríamos adicionar a linha

teste@numaboa.org       teste

Caso você tenha mais de um domínio virtual, não é preciso criar um mapa de aliases para cada um deles. Um único mapa de aliases pode declarar vários domínios virtuais e múltiplos endereços para usuários com contas Unix. A desvantagem desta solução continua sendo a criação das contas locais. Já a vantagem é que um mesmo usuário vai poder ter quantos endereços quiser (tanto no domínio canônico quanto nos domínios virtuais), com a correspondência centralizada numa única caixa postal.

Mas ainda falta uma etapa para fazer este modelo funcionar. O mapa de aliases precisa ser transformado num arquivo indexado e o Postfix precisa ser informado das mudanças. Usamos a ferramenta postmap para indexar o mapa_virtual e criar o arquivo mapa_virtual.db.

# postmap /etc/postfix/mapa_virtual
# postfix reload

Para testar esta configuração basta enviar um email para qualquer um dos usuários configurados no mapa usando o mailto ou um cliente de email. Não se esqueça que este email vai parar na caixa postal do usuário local teste ou teste1.

Informações adicionais