Postfix: Fazendo Relay SMTP do Gmail/Google Apps

Após: 2 dias, 12 tutoriais, sonhar com o problema, dores de cabeça constantes, leve vontade de matar alguem…
Resolvi compartilhar com vocês uma solução definitiva de como usar o Postfix para fazer um Relay Server usando o SMTP do GMail ou Google Apps.
Estou citando Google Apps, pois muitos usam seus dominios próprios no google apps (ex: http://google.com/a/seudominio.com.br/).

Veja o exemplo de topologia da rede em que foi implementada a solução.

Esquema da Rede

O Problema: Determinados usuários fazem uso de um sistema e com ele gostariam de enviar e-mails, assim, agilizando o dia-a-dia. Mas o sistema em questão apenas pede 2 parâmetros: ip do servidor smtp + porta! ¬¬
Meu primeiro pensamento foi “eu adoraria dar uma tapa na cara do programador disso” e o segundo pensamento foi…

A Solução: Como o sistema apenas pede os parâmetros ip do servidor + porta, a solução escolhida por para conseguir enviar e-mails usando a próprio servidor da empresa seria um Relay SMTP repassando os e-mails ao GMail!
Lembrando que, como a empresa usa o google apps, não havia um servidor postfix local, então, o postfix implementado nesta solução foi unicamente para ser um Relay SMTP 😉

# não use o nome de seu dominio em um servidor relay


1º Passo: Criar os certificados necessários

Iremos criar os certificados em uma pasta temporária, usar oque for necessário e deletar as sobras
vá para seu home:
# cd ~

Crie o ceritificado CA usando:
Os parâmetros usados devem ser modificados por você!
Escolha sua senha!
# /usr/lib/ssl/misc/CA.pl -newca

Making CA certificate …
Generating a 1024 bit RSA private key
…….++++++
……………….++++++
writing new private key to ‘./demoCA/private/cakey.pem’
Enter PEM pass phrase: password
Verifying – Enter PEM pass phrase: password
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [US]:BR
State or Province Name (full name) [New York]:Sao Paulo
Locality Name (eg, city) []:Sao Paulo
Organization Name (eg, company) []:EMPRESA LTDA

Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:Luno de Souza
Email Address []:username@email.com

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok


2º Passo: Criar os certificados do servidor

Os parâmetros usados devem ser modificados por você!
Devem ser os mesmos que você colocou ao criar os certificados CA!!!
Caso você opite por mudar “SERVER-key.pem -out SERVER-req.pem" para outros nomes, lembre-se que essa alteração deverá ser feita em todo esse artigo ;)

# openssl req -new -nodes -subj '/CN=EMPRESA LTDA/O=APELIDO EMPRESA/C=BR/ST=SAO PAULO/L=SAO PAULO/emailAddress=username@mail.com' -keyout SERVER-key.pem -out SERVER-req.pem -days 3650


3º Passo: Assinar o certificado

Deverá usar senha senha!
# openssl ca -out SERVER-cert.pem -infiles SERVER-req.pem

Using configuration from
/usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok

4º Passo: Copiar os certificados para a pasta do Postfix com suas permições
# cp demoCA/cacert.pem SERVER-key.pem SERVER-cert.pem /etc/postfix
# chmod 644 /etc/postfix/SERVER-cert.pem /etc/postfix/cacert.pem
# chmod 400 /etc/postfix/SERVER-key.pem

5º Passo: Copiar os certificados para a pasta do Postfix com suas permições
O Gmail usa o certificado Thawte Premium Server CA. Então adicione isso no final do arquivo /etc/postfix/cacert.pem
OBS: Essa é a versão atual do certificado 😉

—–BEGIN CERTIFICATE—–
MIIDNjCCAp+gAwIBAgIQNhIilsXjOKUgodJfTNcJVDANBgkqhkiG9w0BAQUFADCB
zjELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ
Q2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UE
CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhh
d3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNl
cnZlckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIxMDEwMTIzNTk1OVow
gc4xCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcT
CUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNV
BAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRo
YXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1z
ZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560
ZXUCTe/LCaIhUdib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j
+ao6hnO2RlNYyIkFvYMRuHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/
BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQBlkKyID1bZ5jA01CbH0FDxkt5r1DmI
CSLGpmODA/eZd9iy5Ri4XWPz1HP7bJyZePFLeH0ZJMMrAoT4vCLZiiLXoPxx7JGH
IPG47LHlVYCsPVLIOQ7C8MAFT9aCdYy9X9LcdpoFEsmvcsPcJX6kTY4XpeCHf+Ga
WuFg3GQjPEIuTQ==
—–END CERTIFICATE—–

OBS: Caso você esteja em um futuro e acusar o erro de certificado inválido como aconteseu comigo, você deverá acessar: https://www.geotrust.com/resources/root-certificates/index.html ,  (Base-64 encoded X.509) e fazer download da “nova versão” do certificado!
Após o download basta um cat Equifax_Secure_CA.pem >> /etc/posfix/cacert.pem

6º Passo: Configurando o main.cf
Irei passar o meu atual main.cf que está em funcionamento, afinal não haverá problemas em usa-lo para fazer um “Relay Server”
Fique atento as linhas em negrito e meus comentários nelas!

—–CORTE AQUI—–

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA’s job.
append_dot_mydomain = no

# Uncomment the next line to generate “delayed mail” warnings
#delay_warning_time = 4h

readme_directory = no
# mude para seu hostname
myhostname = servnet2.localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases.db
myorigin = /etc/mailname
# não use o nome de seu dominio em um servidor relay
mydestination = servnet1.localhost, localhost.localdomain, localhost
relayhost =
transport_maps = hash:/etc/postfix/transport
# coloque a range de ip usada em sua rede
mynetworks = 127.0.0.0/8 192.168.12.0/24
mailbox_command = procmail -a “$EXTENSION”
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

## TLS Settings
#
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_tls_cert_file = /etc/postfix/SERVER-cert.pem
smtp_tls_key_file = /etc/postfix/SERVER-key.pem
smtp_tls_session_cache_database = btree:/var/run/smtp_tls_session_cache
smtp_use_tls = yes
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_cert_file = /etc/postfix/SERVER-cert.pem
smtpd_tls_key_file = /etc/postfix/SERVER-key.pem
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:/var/run/smtpd_tls_session_cache
smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom

#
## SASL Settings
#This is going in to THIS server
smtpd_sasl_auth_enable = no
# usei essa opção para o postfix não pedir senha ao meu sistema!!!
smtp_auth_enable = no

# We need this
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtpd_sasl_local_domain = $myhostname
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtpd_sasl_application_name = smtpdinet_protocols = ipv4
—–CORTE AQUI—–

7º Passo: Criando o arquivc transport
Crie o arquivo /etc/postfix/transport com o seguinte conteudo:
# /etc/postfix/transport
#
# Relay de emails para o Gmail
* smtp:[smtp.gmail.com]:587
#

8º Passo: Criando o arquivo sasl_passwd
Crie o arquivo /etc/postfix/sasl_passwd com o seguinte conteudo:
# /etc/postfix/sasl_passwd
# Caso use Gmail
#[smtp.gmail.com]:587 usuario@seudominio.com.br:senha
#
# Caso tenha seu dominio no Google Apps
[smtp.gmail.com]:587 usuario@seudominio.com.br:senha

9º Passo: Criando arquivo generic e usando o postconf para criar os Hash’s
# touch generic
#
postmap /etc/postfix/sasl_passwd;postmap /etc/postfix/generic

10º Passo: Limpando os lixos e vamos ao teste! 🙂
Limpando...
# cd ~
#
rm SERVER-req.pem SERVER-cert.pem SERVER-key.pem && rm -r demoCA/

Testando…
# echo “Test SMTP Relay” | mailx -s ‘Test 123’ seumail@seudominio.com.br

Verificando o teste…
# tail -f /var/log/mail.log

Se seguiu este tutorial passo-a-passo deverá correr tudo ok 😀
Algumas dicas:
Verificando e-mail na fila e envio:
# postqueue -p
ou
# mailq

Deletando todas as menssagens pendentes:
# postsuper -d ALL

Conclusões:
EM CONSTRUÇÃO 😉

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

3 Resultados

  1. Netim disse:

    OOO Luno, Ficou muito bom esse artigo, muito bem explicado, excelente 😀 .

  2. Ficou bala! Ja tava na hora eheheheh
    Mas parabéns pela iniciativa kkk

  3. Alessandro disse:

    Cara muito bom mesmo!!!! (puxando seu saco aqui..hihih..ahuauh)

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *