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.
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 contato@localhost 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:
Devemos comentar a linha:
smtp inet n - n - - smtpd
E descomentar a linha:
#submission inet n - n - - smtpd
No final ficará assim:
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:
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:12301@localhost
-
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:
Testando os registros DNS
Agora que terminamos de configurar tudo, utilizaremos o MX Toolbox para testar os registros do DNS.
Testando o registro MX
Testando o registro SPF
Testando o registro 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:
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!
Livros indicados
É vital que um profissional de T.I conheça boas práticas e saiba aplicá-las independente da linguagem ou ferramenta.
Pensando nisso, separei alguns títulos que fazem parte da minha bilioteca pessoal.
Aproveite e invista na sua educação, pois é a base de tudo para uma carreira incrível.
Deixe seu comentário
Atenção: Os comentários abaixo são de inteira responsabilidade de seus respectivos autores e não representam, necessariamente, a opinião do autor desse blog.
Não perca mais nenhum post!
Cadastre-se e receba novos posts diretamente em seu e-mail.
Escolhidos para você