Gabriel Zuqueto Amaral
www.gabrielzuqueto.eti.br

Como criar servidor para envio de e-mail em massa

Neste post mostro como criar servidor para envio de e-mail em massa, gastando apenas $5 por mês.

Como criar servidor para envio de e-mail em massa

Hoje vou mostrar como criar servidor para envio de e-mail em massa, gastando apenas $5 por mês. Com seu próprio servidor de e-mail, você não irá precisar pagar muito para enviar alguns milhares de e-mails. Isso pode fazer com que suas campanhas fiquem bem mais baratas.

Vamos utilizar o CentOS como base do nosso servidor, por ser um sistema bem estável e robusto, como mencionei em outro post: Servidor Ragnarok CentOS: Como criar?.

Montaremos nosso servidor utilizando a menor e mais barata instância da Digital Ocean, mas isso não quer dizer que nosso servidor de e-mail será ruim! Os $5 que falei no primeiro parágrafo é exatamente o custo deste droplet (apelido dado pela Digital Ocean às suas instâncias).

Caso ainda não tenha um droplet criado na Digital Ocean, confira este post: Como criar servidor na Digital Ocean.

Para que um servidor de e-mail seja válido, ou seja, para que as mensagens enviadas através dele cheguem aos destinatários, temos que configurar tudo com base nas boas práticas, caso contrário, suas mensagens ficaram pelo meio do caminho, nos filtros anti-spam da rede.

Se seu servidor estiver por trás de um IP doméstico, automaticamente seu servidor cairá na Blacklist, pois as faixas de IPs domésticos já se encontram nesta lista. Estando na Blacklist, seus e-mails não irão chegar aos destinatários. Por esse motivo que sugeri a Digital Ocean.

Mãos à obra!

Parte 1 - Instalando e configurando o Postfix

Mas o que é Postfix? Vou responder a esta pergunta com uma definição clara e bem simples.

Postfix é um agente de transferência de e-mails (MTA) livre e de código aberto que encaminha e entrega e-mails, e tem como objetivo ser uma alternativa segura ao Sendmail, muito utilizado em servidores UNIX.

Fonte: Wikipédia

Instalando o Postfix

Instalar o Postfix é bem simples, basta executar a seguinte linha de comando como usuário root:

yum install postfix -y

Aguarde o fim da instalação e vamos para o próximo passo. Lembrando que o Postfix constuma vim instalado nos Droplets da Digital Ocean, porém não custa nada executar o comando pois vai que pare de vim instalado.

Configurando o Postfix

O arquivo de configuração do Postfix fica no seguinte caminho: /etc/postfix/main.cf

Vamor definir as seguintes configurações:

mydomain = DOMINIO_DO_SERVIDOR
myhostname = NOME_COMPLETO_DO_SERVIDOR_INCLUINDO_DOMINIO
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
inet_interfaces = loopback-only
mailbox_size_limit = 0
  • mydomain: é o domínio do servidor, exemplo: gabrielzuqueto.eti.br

  • myhostname: é o nome do servidor incluindo o domínio, exemplo: mail.gabrielzuqueto.eti.br

  • mydestination: indica quais nomes e domínio serão considerados endereços locais pelo servidor. Ou seja, se o nome do servidor é mail.gabrielzuqueto.eti.br e o domínio é gabrielzuqueto.eti.br, o servidor entenderá que tanto os e-mails endereçados a [email protected] quanto, [email protected], [email protected] e [email protected] são endereçados a ele mesmo.

  • inet_interfaces: define quais intefaces o servidor aceitará e-mails, definimos apenas local, logo, não iremos receber e-mails vindos de fora do servidor.

  • mailbox_size_limit: define o tamanho das caixas de e-mail, deixaremos zero pois não pretendemos receber e-mail algum.

Vou usar o myhostname = gabrielzuqueto.eti.br

Utilize o echo para adicionar as novas configurações no Postfix.

echo "mydomain = gabrielzuqueto.eti.br
myhostname = gabrielzuqueto.eti.br
mydestination = \$myhostname, localhost.\$mydomain, localhost, $mydomain
inet_interfaces = loopback-only
mailbox_size_limit = 0" >> /etc/postfix/main.cf

Agora precisamos habilitar o Postfix para enviar as mensagens pela porta 587, pois a Antispam.br determinou que a partir de 01/01/2013 o envio pela porta 25 seria descontinuado, isso significa que, se você tentar usar a porta 25 para o envio de e-mails, sua mensagem nunca chegará ao destinatário.

A configuração é simples, basta editar o arquivo /etc/postfix/master.cf com o seu editor de texto preferido.

Ao abrir o arquivo /etc/postfix/master.cf, você verá algo como isso:

Como criar servidor para envio de e-mail em massa - Postfix master.cf

Devemos comentar a linha:

smtp      inet  n       -       n       -       -       smtpd

E descomentar a linha:

#submission inet n       -       n       -       -       smtpd

No final ficará assim:

Como criar servidor para envio de e-mail em massa - Postfix master.cf

A linha comentada faz com que o Postfix não utilize mais a porta 25 e a linha que foi descomentada, faz com que ele utilize a porta 587.

Parte 2 - SPF (Sender Policy Framework)

O que é SPF? Agora utilizarei as palavras do CGI.br

SPF é uma tecnologia para combater a falsificação de endereços de retorno dos emails (return-path). O mecanismo permite ao administrador de um domínio definir e publicar uma política SPF, onde são designados os endereços das máquinas autorizadas a enviar mensagens em nome deste domínio.

Também permite ao administrador de um serviço de e-mail estabelecer critérios de aceitação de mensagens em função da checagem das políticas SPF publicadas para cada domínio.

O processo de publicação de uma política SPF é independente da implantação de checagem de SPF por parte do MTA, estes podem ou não ser feitos em conjunto.

Ao publicar uma política de SPF, o administrador de um domínio está autorizando determinados MTAs a enviar e-mails em nome deste domínio. O objetivo é evitar que terceiros enviem mensagem indevidamente em nome de seu domínio, e que mensagens de erro (bounces) causadas por spam com envelope falso sejam enviadas para o seu servidor.

Fonte: Antispam.br

Configurando o SPF

O SPF é configurado diretamente nos registros do DNS, mas não se preocupe pois a configuração é bem simples:

TXT @ "v=spf1 a mx -all"
  • TXT: é tipo de registro da zona DNS. Os registros SPF são escritos como registros TXT.

  • @: em um arquivo DNS, o símbolo @ é um espaço reservado usado para representar o domínio atual

  • v=spf1: identifica o registro TXT como um registro SPF, utilizando o SPF Versão 1

  • a: autoriza o servidor definido nos registros A do DNS, a enviar e-mail

  • mx: autoriza os servidores definidos nos registros MX do DNS, a enviar e-mail

  • -all: retorna falha, caso nenhuma das opções SPF sejam satisfeitas, ou seja, se for um servidor que não esteja no registro A e nem nos registros MX, a mensagem será invalidada

Daí você deve estar se perguntando: Mas meu servidor de e-mail não está listado em nenhum registro A ou MX do meu domínio, logo, como O SPF vai funcionar?

A resposta é simples! Crie um registro A dentro dos seus registros DNS e ponha o IP do seu servidor de e-mail. Após, crie uma entrada MX apontando para o registro A que acabou de criar. Você deve criar MX pois caso os servidores não encontrem este registro, iram perguntar aos A isso adiciona um delay a mais.

Vou exemplificar como fiz com o SPF:

A mail 165.227.0.178

MX @ mail.gabrielzuqueto.eti.br

No final, meus registros DNS ficaram assim:

Como criar servidor para envio de e-mail em massa - DNS

Lembrando que seus servidores de e-mail podem estar por trás de outro DNS, se este é seu caso, ignore o registro do A e adicione diretamente o DNS no seu MX.

Exemplo, se o DNS do meu servidor de e-mail fosse gza.com.br, eu adicionaria:

TXT @ "v=spf1 a mx -all"

MX @ gza.com.br

Repare que não registrei o A neste caso! :)

Parte 3 - DKIM (Domain Keys Identified Mail)

O que é DKIM? Mais uma vez, vamos de CGI.br

DKIM é uma especificação do IETF que define um mecanismo para autenticação de e-mail baseado em criptografia de chaves públicas. Através do uso do DKIM, uma organização assina digitalmente as mensagens que envia, permitindo ao receptor confirmar a autenticidade da mensagem. Para verificar a assinatura digital, a chave pública é obtida por meio de consulta ao DNS do domínio do assinante.

Ao contrário do SPF, que verifica somente o envelope, o DKIM verifica o cabeçalho da mensagem. Esta técnica acarreta um custo computacional adicional por mensagem, tanto para o MTA remetente quanto para o receptor.

Fonte: Antispam.br

Instalando o OpenDKIM

Primeiramente devemos instalar o OpenDKIM, porém este pacote não está disponível nos repositórios que vêm como padrão no yum, mas está disponível nos repositórios do CentOS 7 EPEL.

Para habilitar o repositório EPEL, utilize o seguinte comando:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

Após o término da instalação do EPEL, podemos instalar o OpenDKIM:

yum install opendkim -y

Vamos por o OpenDKIM para inicializar junto com o sistema:

chkconfig opendkim on

Configurando o OpenDKIM

O arquivo de configuração do OpenDKIM fica no seguinte caminho: /etc/opendkim.conf

Adicione as seguintes configurações no final do arquivo de configuração do OpenDKIM:

AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes
Canonicalization        relaxed/simple
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256
UserID                  opendkim:opendkim
Socket                  inet:[email protected]
  • AutoRestart: reinicia automaticamente o filtro em caso de falhas.

  • AutoRestartRate: especifica a taxa de reinício máxima do filtro, se o reinício começar a ocorrer mais rapidamente do que essa taxa, o filtro será encerrado; 10/1h - 10 reinícios/hora serão permitidos no máximo.

  • UMask: dá todas as permissões de acesso ao grupo de usuários definido pelo UserID e permite que outros usuários leiam e executem arquivos, neste caso, permitirá a criação e modificação de um arquivo Pid.

  • Syslog, SyslogSuccess, *LogWhy: esses parâmetros permitem o log detalhado através de chamadas para o syslog.

  • Canonicalization: define os métodos de canonização utilizados na assinatura de mensagens, o método simple permite quase nenhuma modificação enquanto o relaxed tolera mudanças menores, como substituição de espaços em branco; relaxed/simple - o cabeçalho da mensagem será processado com o algoritmo relaxed eo corpo com o simple.

  • ExternalIgnoreList: especifica os hosts externos que podem enviar e-mails através do servidor como um dos domínios de assinatura sem credenciais.

  • InternalHosts: define uma lista de hosts internos cujo correio não deve ser verificado, mas assinado em vez disso.

  • KeyTable: mapeia nomes de chaves para assinar chaves

  • SigningTable: lista as assinaturas para aplicar a uma mensagem com base no endereço encontrado no campo From: do cabeçalho

  • Mode: declara os modos de operação; Neste caso, o milter age como um assinante (s) e um verificador (v).

  • PidFile: o caminho para o arquivo Pid que contém o número de identificação do processo.

  • SignatureAlgorithm: seleciona o algoritmo de assinatura a ser usado ao criar assinaturas.

  • UserID: o processo do opendkim é executado sob esse usuário e grupo.

  • Socket: o milter irá ouvir no socket especificado aqui, o Posfix enviará mensagens para o opendkim para assinar e verificar através deste soquete; 12301 @ localhost define um soquete TCP que escuta no localhost, porta 12301

Configurando o par de chaves Pública/Privada

Primeiramente devemos criar o diretório que guardará o par de chave para o nosso domínimo.

mkdir /etc/opendkim/keys/DOMINIO_DO_SERVIDOR

Com o diretório criado, podemos gerar o par de chaves:

opendkim-genkey -D /etc/opendkim/keys/DOMINIO_DO_SERVIDOR/ -d DOMINIO_DO_SERVIDOR -s default

Agora devemos por o OpenDKIM como o proprietário do diretório das chaves:

chown -R opendkim: /etc/opendkim/keys/DOMINIO_DO_SERVIDOR

Agora vamos adicionar a chave ao mapeamento do OpenDKIM. Para isso adicione a seguinte linha em /etc/opendkim/KeyTable

default._domainkey.DOMINIO_DO_SERVIDOR DOMINIO_DO_SERVIDOR:default:/etc/opendkim/keys/DOMINIO_DO_SERVIDOR/default.private

Agora vamos adicionar o domínio na tabela de assinatura. Para isso adicione a seguinte linha em /etc/opendkim/SigningTable

*@DOMINIO_DO_SERVIDOR default._domainkey.DOMINIO_DO_SERVIDOR

Por fim, vamos adicionar o nosso IP local em /etc/opendkim/TrustedHosts. Para saber qual é o IP local da sua instância, utilize o seguinte comando:

ifconfig

Daí pegue o endereço IP (inet) da interface eth0.

Após, adicione no final do arquivo /etc/opendkim/TrustedHosts.

Agora temos que dizer ao Postfix que queremos usar o milter OpenDKIM. Edite /etc/postfix/main.cf e insira no final do arquivo:

smtpd_milters = inet:127.0.0.1:12301
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 6

Agora reinicie o OpenDKIM e o Postfix

service opendkim reload
service postfix reload

O último passo é adicionar a nossa chave pública no registro do DNS. Execute o seguinte comando para pegar a chave pública OpenDKIM do seu domínio:

cat /etc/opendkim/keys/DOMINIO_DO_SERVIDOR/default.txt

Irá retornar algo como isso aqui:

default._domainkey  IN  TXT ( "v=DKIM1; k=rsa; "
    "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZfST+s+4xo4qOFrjn/xhDbP9gCfvHgpIqxeWtJrgOSLC9nlsmKlEBiuVZ4bcXolSDU8XmYmBGRvdtPcEerF0MpYgoK5St3xXinCayO0sy6F9rwzfkn06enXumQuN7Xgoio0a3G0K9xrjMmzt1pzmLlKC7x2wMA3l8oOgKdQQ/AwIDAQAB" )  ; ----- DKIM key default for gabrielzuqueto.eti.br

Vou tomar esse retorno aí como exemplo para montar o registro no DNS.

TXT default._domainkey.gabrielzuqueto.eti.br "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZfST+s+4xo4qOFrjn/xhDbP9gCfvHgpIqxeWtJrgOSLC9nlsmKlEBiuVZ4bcXolSDU8XmYmBGRvdtPcEerF0MpYgoK5St3xXinCayO0sy6F9rwzfkn06enXumQuN7Xgoio0a3G0K9xrjMmzt1pzmLlKC7x2wMA3l8oOgKdQQ/AwIDAQAB"

Pronto! No final, meus registros DNS ficaram assim:

Como criar servidor para envio de e-mail em massa - DNS 2

Testando os registros DNS

Agora que terminamos de configurar tudo, utilizaremos o MX Toolbox para testar os registros do DNS.

Testando o registro MX

Como criar servidor para envio de e-mail em massa - DNS MX

Testando o registro SPF

Como criar servidor para envio de e-mail em massa - DNS SPF

Testando o registro DKIM

Como criar servidor para envio de e-mail em massa - DNS DKIM

Parece que está tudo ok! Agora vamos testar o envio de e-mail.

Testando o envio de e-mail

Primeiro teremos que instalarum cliente de e-mail:

yum install mailx -y

Após a instalação, basta executar o seguinte comando:

echo "Teste de envio de e-mail" | mail -s "Esse é apenas um teste" SEU_ENDERECO_DE_EMAIL_AQUI

Após execute o comando seguinte comando para ler os logs:

tail /var/log/maillog -f

Você terá algo como isso:

Como criar servidor para envio de e-mail em massa - Log

Repare que o OpenDKIM assinou a mensagem:

Aug 27 15:17:52 centos-512mb-smtp1 opendkim[711]: 2FCAD4073C: DKIM-Signature field added (s=default, d=gabrielzuqueto.eti.br)

Porém, ele não consegue enviar a mensagem para o Gmail:

Aug 27 15:18:22 centos-512mb-smtp1 postfix/smtp[9639]: connect to gmail-smtp-in.l.google.com[74.125.28.26]:25: Connection timed out

Isso se dá por que a Digital Ocean por padrão bloqueia a porta 587, para diminuir a possibilidade de SPAM.

Para contornar isso, basta abrir um chamado pedindo para liberar a porta 587. Eles iram pedir que confirme sua identidade, e após a confirmação das informações com sucesso, a porta será liberada e seu servidor estará pronto para enviar e-mails.

Vou solicitar a liberção da porta a eles, e assim que eu tiver com a porta 587 liberada, atualizo este post mostrando que o servidor está funcionando corretamente.

Espero que tenham aprendido como criar servidor para envio de e-mail em massa. Qualquer dúvida, crítica ou sugestão, deixem nos comentários. Muito obrigado e até a próxima!

https://gabrielzuqueto.eti.br/como-criar-servidor-para-envio-de-e-mail-em-massa 2017-08-26 21:23:44 -0300 gabrielzuqueto

Deixe seu comentário

Não perca mais nenhum post!

Cadastre-se e receba novos posts diretamente em seu e-mail.

Escolhidos para você

Segurança de servidores na nuvem da Digital Ocean
Segurança de servidores na nuvem da Digital Ocean

Como usar GitHub?
Como usar GitHub?

RSpec Stub AWS SQS
RSpec Stub AWS SQS