Usando seu provedor de hospedagem como relay de email no Postfix

Este post eu havia prometido a um tempo atrás, mas acabei deixando de lado por um tempo pois o Gmail como Relay estava atendendo bem. Mas na realidade é sempre interessante experimentar um pouco mais além as soluções, principalmente porque sempre temos a possibilidade de usar um pouco melhor os recursos que temos, por exemplo, em provedores de hospedagem externos.

Um fenômeno que aconteceu nos últimos anos foi que as hospedagens de sites se tornaram muito baratas. Hoje, a maioria lhe fornece espaço ilimitado, tendo em vista que o custo do GB caiu demais. Assim, muitas empresas pequenas ou médias estão levando em conta que vale a pena minimizar o uso de recursos internos, hospedando seus sites e emails fora da empresa.

Se a sua empresa faz uso destes recursos, mas por exemplo, quer controlar algumas coisas a mais que provedores de hospedagem não fazem você pode montar um gateway de email onde você faria estes controles.

Na realidade, você simplesmente usaria o seu provedor de hospedagem como um relay do seu servidor local de smtp.

O modo de fazer isto, é literalmente idêntico ao que eu já expliquei no post do Gmail.

Mas, para quem caiu direto aqui neste post, eu vou explicar passo a passo novamente como fazer.

Este post é baseado no Fedora, mas pode ser facilmente traduzido para o CentOS e outras distribuições.

O primeiro passo para iniciar o processo é ter o postfix instalado :

# yum install postfix -y

Depois, você deve criar a autoridade certificadora. Na realidade, ela vai ser necessária para criar as chaves necessárias para a comunicação TLS entre os servidores. O comando para criação da autoridade certificadora é :

# /etc/pki/tls/misc/CA -newca

Siga os prompts e os responda com cuidado. Na realidade você precisa de um cuidado bem grande aqui organizationalUnitName pois vocẽ não pode criar dois certificados para a mesma unidade organizacional. Assim, para a unidade certificadora, coloque, por exemplo, isto aqui como Central.

Logo após, vamos criar as chaves e certificados do cliente ( novamente, tome cuidado aqui no organizationalUnitName pois ele pode lhe causar problema na hora de atualizar a base de dados do TLS. Ou seja, por exemplo, para esta chave, um exemplo, seria criar o campo citado como Email ), tendo certeza de usar o mesmo common name e códigos de país, estado, etc.

cd /etc/postfix
openssl genrsa -out postfixclient.key 1024
openssl req -new -key postfixclient.key -out postfixclient.csr
openssl ca -out ./postfixclient.pem -infiles postfixclient.csr

Com tudo isto criado, agora é só ir para a configuração do postfix propriamente dita. Primeiro, vamos aos pontos. Na Dreamhost, provedor de hospedagem que eu uso, todo o domínio tem o mail.dominio.com. Ou seja, o ataliba.eti.br tem o mail.ataliba.eti.br. No seu provedor de hospedagem isto pode ser diferente, mas sempre tem um tutorial lhe falando qual é o seu servidor de smtp.

Assim, vou usar de exemplo, o mail.dominio.com. Portanto, o main.cf vai ficar do seguinte modo :

relayhost = [mail.dominio.com]:25
smtp_connection_cache_destinations = mail.dominio.com
relay_destination_concurrency_limit = 1
default_destination_concurrency_limit = 5
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_use_tls = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_tls_note_starttls_offer = yes
tls_random_source = dev:/dev/urandom
smtp_tls_scert_verifydepth = 5
smtp_tls_key_file=/etc/postfix/postfixclient.key
smtp_tls_cert_file=/etc/postfix/postfixclient.pem
smtp_tls_enforce_peername = no
smtpd_tls_req_ccert =no
smtpd_tls_ask_ccert = yes
soft_bounce = yes

Vá ao seu cpanel e crie um email ou então no painel da Dreamhost  e faça o mesmo. Criado o email, crie um arquivo chamado sasl_passwd :

mail.dominio.com usuario@dominio.com:senha

Salve o arquivo, e torne-o legível para o postfix:

# postmap sasl_passwd

Finalizado isto, é só inicializar o postfix :

# service postfix start

E pronto. Com isto você já tem o serviço rodando sem problemas. Agora, é só testar com o envio de uma mensagem, via telnet, ou caso seja um Desktop, configure seu cliente de email para utilizar o localhost como saída de smtp.

Bom, feito o teste, você tem que ter no seu log algo parecido com isto:

Aug 16 21:23:42 neo postfix/smtpd[4053]: connect from localhost[::1]
Aug 16 21:24:01 neo postfix/smtpd[4053]: 348BB1894DA: client=localhost[::1]
Aug 16 21:24:10 neo postfix/cleanup[4058]: 348BB1894DA: message-id=<20090817002401.348BB1894DA@neo.ataliba.eti.br>
Aug 16 21:24:10 neo postfix/qmgr[3825]: 348BB1894DA: from=<ataliba@rootshellsolutions.com>, size=392, nrcpt=1 (queue active)
Aug 16 21:24:13 neo postfix/smtp[4060]: certificate verification failed for mail.rootshellsolutions.com[208.97.132.20]:25: untrusted issuer /C=US/ST=California/L=Los Angeles/O=New Dream Network, LLC/OU=Security/CN=New Dream Network Certificate Authority/emailAddress=support@dreamhost.com
Aug 16 21:24:15 neo postfix/smtp[4060]: 348BB1894DA: to=<ataliba@gmail.com>, relay=mail.rootshellsolutions.com[208.97.132.20]:25, delay=20, delays=15/0.03/4.8/0.47, dsn=2.0.0, status=sent (250 Ok: queued as 61E911FCA6)
Aug 16 21:24:15 neo postfix/qmgr[3825]: 348BB1894DA: removed

Agora, é só procurar aplicações para esta dica. Eu pessoalmente já vi algumas bem interessante desde que implementei isto no Postfix.

Principalmente, porque, neste caso o sender não é sobrescrito, tal qual acontece com a solução utilizando o Gmail.

Sim, em breve, esta mesma solução implementada no Exim, tal qual eu já prometi.