Neste artigo, exploraremos como configurar nosso próprio servidor SMTP (Simple Mail Transfer Protocol) em nosso ambiente local e usá-lo para enviar e-mails de nosso servidor remoto. Para alcançar esse objetivo, utilizaremos o servidor Postfix em conjunto com Docker e a plataforma Gmail. Abordaremos os seguintes tópicos:
- Entendendo o SMTP e Servidor SMTP
- O que é o Postfix?
- Senha de Aplicativo do Gmail: O que é e como obtê-la?
- Configurando nosso Servidor SMTP em um Ambiente Docker
1. Entendendo o SMTP e Servidor SMTP
O SMTP, ou Protocolo de Transferência de Email Simples, é um protocolo de comunicação essencial para o envio de e-mails. Um servidor SMTP, por outro lado, é um servidor que lida com o encaminhamento de e-mails, tanto os recebidos quanto os enviados, por meio desse protocolo. O processo de envio de uma mensagem por meio de um servidor SMTP envolve as seguintes etapas:
- O remetente cria uma mensagem de e-mail, especificando o destinatário, o assunto e o conteúdo, usando um cliente de e-mail (como Outlook, Thunderbird ou Gmail).
- O cliente de e-mail estabelece uma conexão com o servidor SMTP, geralmente por meio da porta 25 usando TCP/IP.
- O servidor SMTP autentica o remetente e realiza todas as ações necessárias para encaminhar a mensagem ao servidor de destino, incluindo a verificação dos endereços de destinatários e a formatação correta da mensagem.
- Após a entrega bem-sucedida ao servidor de destino, a mensagem é depositada na caixa de entrada do destinatário.
É importante notar que um servidor SMTP também pode ser usado para recuperar e-mails, mas neste artigo, focaremos apenas na configuração do servidor para envio.
2. O que é o Postfix?
O Postfix é um software de servidor de e-mail amplamente utilizado em sistemas operacionais baseados em Unix. Funcionando como um Agente de Transferência de Correio (MTA), o Postfix facilita a transmissão e a distribuição de e-mails. É conhecido por ser altamente confiável, escalável e de alto desempenho, além de ser uma solução de código aberto. O Postfix utiliza o protocolo SMTP para lidar com operações de envio, recebimento e encaminhamento de e-mails.
3. Senha de Aplicativo do Gmail: O que é e como obtê-la?
Uma senha de aplicativo do Gmail é uma medida de segurança projetada para permitir o acesso a aplicativos ou dispositivos de terceiros usando uma conta do Gmail sem a necessidade da senha regular da conta. Essas senhas de aplicativo são especialmente úteis para contas que têm a autenticação de dois fatores (2FA) ativada. Para enviar e-mails de um servidor próprio usando uma conta do Gmail, é necessário usar uma senha de aplicativo, pois não é possível autenticar diretamente pelo servidor Postfix com 2FA ativada.
Após criar uma senha de aplicativo, poderemos prosseguir com a etapa 4.
4. Configurando nosso Servidor SMTP em um Ambiente Docker
Agora, vamos iniciar o processo de criação do servidor SMTP usando Docker. Utilizaremos uma imagem Docker já configurada para funcionar como um servidor SMTP. Para começar, instale o Postfix em uma imagem Ubuntu e configure todas as opções necessárias:
FROM ubuntu:latest
ARG EMAIL
ARG EMAIL_PASSWORD
ARG MAIL_NAME
ARG SMTP_DOMAIN
ARG SMTP_PORT
RUN apt-get update && \
apt-get install -y mailutils && \
apt install -y postfix
COPY main.cf /etc/postfix/main.cf
RUN sh -c 'echo "root: ${EMAIL}" >> /etc/aliases' && \
sh -c 'echo "${MAIL_NAME}" >> /etc/mailname' && \
sh -c 'echo "[${SMTP_DOMAIN}]:${SMTP_PORT} ${EMAIL}:${EMAIL_PASSWORD}" >> /etc/postfix/sasl_passwd' && \
postmap /etc/postfix/sasl_passwd && \
chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
CMD service postfix restart && tail -f /dev/null
Aqui estão as principais etapas do Dockerfile:
- Selecionamos a imagem Ubuntu mais recente como nossa base.
- Definimos variáveis para os valores necessários, que serão passados durante a construção da imagem.
- Atualizamos e instalamos os pacotes necessários, incluindo o Postfix.
- Copiamos nosso arquivo de configuração main.cf para o local adequado.
- Configuramos os aliases, o arquivo mailname e as informações de autenticação SMTP.
- Finalmente, reiniciamos o serviço Postfix e mantemos o contêiner em execução.
Além disso, é necessário criar o arquivo main.cf com as configurações apropriadas. Este arquivo determina como o servidor SMTP funcionará. O Dockerfile já foi configurado para copiar este arquivo para o local certo. Aqui estão as configurações do main.cf:
# Consulte /usr/share/postfix/main.cf.dist para uma versão comentada e mais completa.
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 3.6
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, /etc/mailname, localhost, localhost.localdomain, localhost
relayhost = [smtp.gmail.com]:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = all
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_use_tls = yes
smtp_tls_CAfile = /etc/
ssl/certs/ca-certificates.crt
Agora, para criar e executar o contêiner, crie um arquivo docker-compose.yml:
version: '3.8'
services:
smtp-server:
build:
context: .
args:
EMAIL: ${EMAIL}
EMAIL_PASSWORD: ${EMAIL_PASSWORD}
MAIL_NAME: ${MAIL_NAME}
SMTP_DOMAIN: ${SMTP_DOMAIN}
SMTP_PORT: ${SMTP_PORT}
ports:
- ${PORT}:25
Este arquivo docker-compose.yml define um serviço chamado smtp-server. Ele utiliza o Dockerfile que configuramos anteriormente e passa as variáveis de ambiente necessárias.
Por fim, crie um arquivo .env com as informações sensíveis, como seu endereço de e-mail, senha de aplicativo do Gmail e outras configurações específicas:
[email protected]
EMAIL_PASSWORD=sua_senha_de_aplicativo
MAIL_NAME=seu_nome_de_email
SMTP_DOMAIN=smtp.gmail.com
SMTP_PORT=587
PORT=25
Substitua as informações acima pelos seus próprios detalhes de conta.
Agora você pode construir e executar o servidor SMTP com o seguinte comando:
docker-compose up --build
Após a conclusão deste processo, seu servidor SMTP estará pronto para ser usado. Você pode enviar e-mails do seu servidor remoto usando o servidor Postfix que configurou.
Sou um profissional na área de Tecnologia da informação, especializado em monitoramento de ambientes, Sysadmin e na cultura DevOps. Possuo certificações de Segurança, AWS e Zabbix.