Sign inSign up

aprendendolinux/exim-relay

By aprendendolinux

•Updated 11 months ago

Exim-Relay: Um Relay SMTP Simples com Docker e Exim4

Image
Networking
0

10K+

aprendendolinux/exim-relay repository overview

⁠Imagem Docker aprendendolinux/exim-relay

Exim Logo Docker Pulls Docker Image Size

⁠Visão Geral

A imagem Docker aprendendolinux/exim-relay oferece uma solução leve, segura e altamente configurável para relay de e-mails baseado no Exim. Projetada para aplicações ou serviços internos, ela permite o envio de e-mails através de servidores SMTP externos, como Gmail, SendGrid ou Amazon SES. Construída sobre o Alpine Linux, a imagem mantém um tamanho reduzido (~20-30 MB), tornando-a ideal para ambientes de desenvolvimento, teste ou produção com recursos limitados.

Com suporte a autenticação SASL, configuração via variáveis de ambiente, atrasos configuráveis no envio de e-mails, desabilitação de IPv6, logs persistentes mapeados para o host, decodificação de assuntos MIME e configuração de fuso horário, esta imagem é perfeita para quem busca um relay SMTP eficiente sem a complexidade de um servidor de e-mail completo.

Imagem no Docker Hub: aprendendolinux/exim-relay:latest
Repositório GitHub: github.com/clubenaval/docker-postfix-relay⁠
Autor: Henrique Fagundes, Analista de Infraestrutura GNU/Linux, Clube Naval

⁠Recursos Principais

  • Relay SMTP Simples: Encaminha e-mails para servidores SMTP externos com suporte a TLS/STARTTLS para maior segurança.
  • Autenticação SASL: Compatível com autenticação por usuário e senha para a maioria dos provedores SMTP.
  • Configuração Flexível: Todas as opções principais são configuráveis via variáveis de ambiente, eliminando a necessidade de editar arquivos manualmente.
  • Atraso Configurável: Adiciona um atraso (ex.: 10s) entre envios de e-mails para o mesmo destino, evitando sobrecarga ou limites de taxa; desative com false.
  • Desabilitação de IPv6: Permite operar apenas em IPv4, ideal para redes com restrições de IPv6.
  • Gerenciamento de Logs: Logs são salvos em um arquivo mapeado no host, com opção de decodificação de assuntos MIME para facilitar a leitura.
  • Suporte a Fuso Horário: Configurável via TZ (ex.: America/Sao_Paulo) para timestamps precisos nos logs.
  • Redes Personalizáveis: Restringe o relay a redes específicas via mynetworks, com suporte a IPv4 e IPv6.
  • Funcionalidades Avançadas: Inclui adição de headers, logging de assuntos, sobrescrita de remetentes, limites de tamanho de mensagens e suporte a UTF-8.
  • Segurança: Suporta leitura de credenciais de arquivos para evitar exposição de dados sensíveis.
  • Compatibilidade: Funciona com Docker Compose, Kubernetes ou standalone, testado em Linux, macOS e Windows (via WSL).

⁠Requisitos

  • Docker: Versão 20.10 ou superior.
  • Docker Compose: Versão 1.29 ou superior (recomendado para setups multi-container).
  • Servidor SMTP Externo: Endereço, porta e credenciais válidas (ex.: smtp.gmail.com:587 com App Password para Gmail).
  • Portas: Porta 25 (SMTP) deve ser exposta; configure firewalls para permitir tráfego.
  • Volumes: Mapeie /var/log/exim para persistência de logs no host.
  • Fuso Horário: Pacote tzdata incluído para suporte a configurações de timezone.

⁠Como Usar

⁠1. Puxar a Imagem do Docker Hub

Para começar, puxe a imagem pré-construída:

docker pull aprendendolinux/exim-relay:latest
⁠2. Executar o Container Standalone

Execute o container com configurações comuns, substituindo os valores pelos seus:

docker run -d \
  --name exim-relay \
  -p 25:25 \
  -e SMTP_SERVER=smtp.gmail.com \
  -e SMTP_PORT=587 \
  -e [email protected] \
  -e SMTP_PASSWORD=seu_app_password \
  -e SERVER_HOSTNAME=mail.seudominio.com \
  -e EXIM_DESTINATION_RATE_DELAY=10s \
  -e EXIM_INET_PROTOCOLS=ipv4 \
  -e EXIM_MAILLOG_FILE=/var/log/exim/mail.log \
  -e DEBUG=yes \
  -e LOG_SUBJECT=yes \
  -e DECODE_SUBJECT=yes \
  -e TZ=America/Sao_Paulo \
  -v /srv/exim/logs:/var/log/exim \
  aprendendolinux/exim-relay:latest
  • Monitoramento de Logs: Verifique os logs com tail -f /srv/exim/logs/mail.log no host.
  • Teste de Envio: Consulte a seção "Testando o Relay" abaixo.
  • Fuso Horário: O parâmetro -e TZ=America/Sao_Paulo garante que os timestamps nos logs reflitam o horário de São Paulo.
⁠3. Usando Docker Compose

Crie um arquivo docker-compose.yml para gerenciar o serviço (evite incluir credenciais sensíveis em repositórios públicos):

services:
  exim-relay:
    image: aprendendolinux/exim-relay:latest
    container_name: exim-relay
    restart: unless-stopped
    ports:
      - "25:25"
    environment:
      # Servidor SMTP externo (ex.: smtp.gmail.com)
      - SMTP_SERVER=smtp.gmail.com
      # Porta do servidor SMTP (587 para TLS, 465 para SSL)
      - SMTP_PORT=587
      # Usuário para autenticação SASL (ex.: seu e-mail)
      - [email protected]
      # Senha ou App Password para autenticação
      - SMTP_PASSWORD=seu_app_password
      # Hostname do servidor Exim (ex.: mail.seudominio.com)
      - SERVER_HOSTNAME=mail.seudominio.com
      # Atraso entre envios para o mesmo destino (ex.: 10s); use 'false' para desativar
      - EXIM_DESTINATION_RATE_DELAY=false
      # Protocolos de rede (ex.: ipv4 para desabilitar IPv6)
      - EXIM_INET_PROTOCOLS=ipv4
      # Caminho do arquivo de log no container
      - EXIM_MAILLOG_FILE=/var/log/exim/mail.log
      # Ativa logs de depuração (yes/no)
      - DEBUG=no
      # Registra o campo Subject nos logs (yes/no)
      - LOG_SUBJECT=no
      # Decodifica assuntos MIME nos logs (yes/no)
      - DECODE_SUBJECT=no
      # Fuso horário do container (ex.: America/Sao_Paulo)
      - TZ=America/Sao_Paulo
    volumes:
      - /srv/exim/logs:/var/log/exim
networks:
  default:
    driver: bridge

Inicie o serviço:

docker-compose up -d

Para parar:

docker-compose down

Nota: Ajuste o caminho /srv/exim/logs para um diretório válido no seu host. Para maior segurança, use Docker Secrets para credenciais em ambientes de produção.

⁠Opções de Configuração

As configurações são feitas via variáveis de ambiente no docker run ou docker-compose.yml. Veja a lista completa:

  • SMTP_SERVER (obrigatório): Endereço do servidor SMTP externo (ex.: smtp.gmail.com).
  • SMTP_PORT (opcional, padrão: 587): Porta do servidor SMTP (587 para STARTTLS, 465 para SSL).
  • SMTP_USERNAME (opcional): Nome de usuário para autenticação SASL.
  • SMTP_PASSWORD (opcional): Senha ou App Password; use arquivos para maior segurança.
  • SMTP_USERNAME_FILE (opcional): Caminho para arquivo com o nome de usuário.
  • SMTP_PASSWORD_FILE (opcional): Caminho para arquivo com a senha.
  • SERVER_HOSTNAME (obrigatório): Hostname do Exim (ex.: mail.seudominio.com).
  • DOMAIN (opcional): Derivado de SERVER_HOSTNAME se não especificado.
  • EXIM_DESTINATION_RATE_DELAY (opcional, padrão: 1s): Atraso entre envios para o mesmo destino; use false para desativar.
  • EXIM_INET_PROTOCOLS (opcional, padrão: all): Protocolos de rede (ipv4 para desabilitar IPv6).
  • EXIM_MAILLOG_FILE (opcional, padrão: /dev/stdout): Caminho do arquivo de log (ex.: /var/log/exim/mail.log).
  • DEBUG (opcional, padrão: no): Ativa logs de depuração com yes.
  • SMTP_NETWORKS (opcional): Redes permitidas para relay (ex.: 192.168.0.0/16).
  • ALWAYS_ADD_MISSING_HEADERS (opcional, padrão: no): Adiciona headers faltantes (ex.: Date) com yes.
  • SMTP_HEADER_TAG (opcional): Tag personalizada em headers (ex.: RelayTag: mytag).
  • LOG_SUBJECT (opcional, padrão: no): Registra o campo Subject nos logs com yes.
  • DECODE_SUBJECT (opcional, padrão: no): Decodifica assuntos MIME para legibilidade; requer LOG_SUBJECT=yes.
  • OVERWRITE_FROM (opcional): Sobrescreve o campo From: (ex.: [email protected]).
  • MESSAGE_SIZE_LIMIT (opcional): Limite de tamanho das mensagens em bytes (ex.: 10485760 para 10MB).
  • SMTPUTF8_ENABLE (opcional): Habilita suporte a UTF-8 com yes.
  • TZ (opcional, padrão: UTC): Fuso horário para logs (ex.: America/Sao_Paulo).

⁠Testando o Relay

  1. Iniciar o Container:

    docker-compose up -d
    
  2. Enviar um E-mail de Teste: Use mailx de outro container ou host na mesma rede:

    echo "Corpo do e-mail de teste" | mail -s "Assunto de Teste" -r [email protected] [email protected]
    

    Substitua [email protected] e [email protected] por endereços válidos. Certifique-se de que a porta 25 está acessível.

  3. Verificar os Logs: No host, execute:

    tail -f /srv/exim/logs/mail.log
    

    Procure por status=sent para confirmar o envio. Se DECODE_SUBJECT=yes, os assuntos codificados aparecerão legíveis. Verifique se os timestamps refletem o fuso horário configurado (ex.: America/Sao_Paulo).

  4. Confirmar o Fuso Horário: Verifique no container:

    docker exec -it exim-relay date
    

    O resultado deve mostrar a data/hora no fuso horário definido (ex.: Dom Out 12 18:30:00 -03 2025 para America/Sao_Paulo).

⁠Depuração e Logs

  • Localização dos Logs: Armazenados em /var/log/exim/mail.log no container e mapeados para o host. Se EXIM_MAILLOG_FILE não for definido, os logs vão para stdout (visível com docker logs exim-relay).

  • Modo Debug: Ative DEBUG=yes para logs detalhados, mostrando configurações aplicadas.

  • Verificar Configurações do Exim: Execute:

    docker exec -it exim-relay exim -bP
    

    Verifique configurações como primary_hostname, relay_to_domains e outras.

  • Confirmar Fuso Horário: Verifique com:

    docker exec -it exim-relay cat /etc/timezone
    

    Ou confira os timestamps nos logs.

  • Decodificação de Assuntos: Com DECODE_SUBJECT=yes e LOG_SUBJECT=yes, os assuntos codificados (ex.: MIME Quoted-Printable) são decodificados para facilitar a leitura.

⁠Solução de Problemas

  • Falha na Autenticação: Verifique SMTP_USERNAME, SMTP_PASSWORD e SMTP_PORT. Para Gmail, use um App Password.
  • IPv6 Não Funciona: Defina EXIM_INET_PROTOCOLS=ipv4 se a rede não suportar IPv6.
  • Logs Não Aparecem: Confirme o mapeamento de volume /var/log/exim e permissões no diretório do host.
  • Atraso Não Aplicado: Verifique com docker exec -it exim-relay exim -bP. Se EXIM_DESTINATION_RATE_DELAY=false, o atraso não será configurado.
  • Erros de TLS: Certifique-se de que o servidor SMTP suporta STARTTLS (porta 587) ou SMTPS (porta 465).
  • Decodificação Não Funciona: Confirme que LOG_SUBJECT=yes e DECODE_SUBJECT=yes. Verifique erros no docker logs.
  • Horário Errado nos Logs: Certifique-se de que TZ está definido (ex.: America/Sao_Paulo) e que tzdata está instalado. Verifique com docker exec -it exim-relay date.
  • Container Não Inicia: Inspecione logs com docker logs exim-relay para erros de configuração ou variáveis obrigatórias ausentes (SMTP_SERVER, SERVER_HOSTNAME).

Reporte problemas em GitHub Issues⁠.

⁠Monitoramento e Manutenção

  • Monitoramento de Logs: Use ferramentas como tail, less ou sistemas de monitoramento (ex.: ELK, Prometheus) para analisar /srv/exim/logs/mail.log. Procure por status=sent (sucesso) ou status=bounced (falhas).

  • Rotação de Logs: Configure rotação de logs no host (ex.: logrotate) para evitar consumo excessivo de disco.

  • Saúde do Container: Verifique o status com:

    docker ps -f name=exim-relay
    
  • Atualizações: Monitore o Docker Hub para novas versões da imagem. Para atualizar:

    docker pull aprendendolinux/exim-relay:latest
    docker-compose down
    docker-compose up -d
    
  • Backup dos Logs: Faça backup regular do diretório /srv/exim/logs para preservar históricos de envio.

⁠Suporte e Comunidade

Se você encontrar problemas ou tiver sugestões, abra um issue no GitHub⁠. Para dúvidas gerais, confira a documentação completa no repositório ou entre em contato com a comunidade no Docker Hub.

Se esta imagem foi útil, considere dar uma ⭐ no repositório GitHub⁠ e compartilhar com outros! Sua contribuição ajuda a manter o projeto ativo e a melhorar a experiência para todos os usuários.

Tag summary

Content type

Image

Digest

sha256:74ca9efc1…

Size

154.2 MB

Last updated

11 months ago

docker pull aprendendolinux/exim-relay