Auto-hospedado

Nossa solução de e-mail auto-hospedada, como todos os nossos produtos, é 100% open-source — tanto frontend quanto backend. Isso significa:

  1. Transparência completa:Cada linha de código que processa seus e-mails está disponível para análise pública
  2. Contribuições da Comunidade: Qualquer pessoa pode contribuir com melhorias ou corrigir problemas
  3. Segurança através da abertura:Vulnerabilidades podem ser identificadas e corrigidas por uma comunidade global
  4. Sem bloqueio de fornecedor:Você nunca depende da existência da nossa empresa

A base de código completa está disponível no GitHub em https://github.com/forwardemail/forwardemail.net, licenciado sob a Licença MIT.

A arquitetura inclui contêineres para:

  • Servidor SMTP para e-mail de saída
  • Servidores IMAP/POP3 para recuperação de e-mail
  • Interface web para administração
  • Banco de dados para armazenamento de configuração
  • Redis para cache e desempenho
  • SQLite para armazenamento seguro e criptografado de caixas de correio

Antes de executar o script de instalação, certifique-se de ter o seguinte:

  • Sistema operacional: Um servidor baseado em Linux (atualmente com suporte ao Ubuntu 22.04+).
  • Recursos: 1 vCPU e 2 GB de RAM
  • Acesso root: Privilégios administrativos para executar comandos.
  • Nome do domínio: Um domínio personalizado pronto para configuração de DNS.
  • IP limpo: Garanta que seu servidor tenha um endereço IP limpo, sem reputação de spam anterior, verificando listas negras. Mais informações aqui.
  • Endereço IP público com suporte à porta 25
  • Capacidade de definir PTR reverso
  • Suporte a IPv4 e IPv6

[!DICA] Veja nossa lista de provedores de servidores de e-mail incríveis

Cloud-init / Dados do usuário

A maioria dos fornecedores de nuvem oferece suporte a uma configuração cloud-init para quando o servidor virtual privado (VPS) é provisionado. Essa é uma ótima maneira de definir alguns arquivos e variáveis de ambiente com antecedência para uso pela lógica de configuração inicial dos scripts, o que evitará a necessidade de solicitar informações adicionais enquanto o script estiver em execução.

Opções

  • EMAIL - e-mail usado para lembretes de expiração do certbot
  • DOMAIN - domínio personalizado (por exemplo example.com) usado para configuração de auto-hospedagem
  • AUTH_BASIC_USERNAME - nome de usuário usado na primeira configuração para proteger o site
  • AUTH_BASIC_PASSWORD - senha usada na primeira configuração para proteger o site
  • /root/.cloudflare.ini - (Somente usuários do Cloudflare) arquivo de configuração do cloudflare usado pelo certbot para configuração de DNS. Ele requer que você defina seu token de API via dns_cloudflare_api_token. Leia mais aqui.

Exemplo:

#cloud-config
write_files:
  - path: /root/.cloudflare.ini
    content: |
      dns_cloudflare_api_token = "xxx"
    owner: root:root
    permissions: '0600'
  - path: /etc/profile.d/env.sh
    content: |
      export EMAIL="test@myemail.com"
      export DOMAIN="mydomain.com"

runcmd:

  • chmod +x /etc/profile.d/env.sh

Execute o seguinte comando no seu servidor para baixar e executar o script de instalação:

bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)

Script de instalação de depuração

Adicionar DEBUG=true na frente do script de instalação para saída detalhada:

DEBUG=true bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)

Avisos

1. Initial setup
2. Setup Backups
3. Setup Auto Upgrades
4. Renew certificates
5. Restore from Backup
6. Help
7. Exit
  • Configuração inicial: Baixe o código de e-mail de encaminhamento mais recente, configure o ambiente, solicite seu domínio personalizado e configure todos os certificados, chaves e segredos necessários.
  • Configurar backup: Configurará um cron para fazer backup do mongoDB e do redis usando um armazenamento compatível com S3 para armazenamento remoto seguro. Separadamente, o sqlite será feito backup no login se houver alterações para backups seguros e criptografados.
  • Atualização de configuração: Configure um cron para procurar atualizações noturnas que reconstruirão e reiniciarão com segurança os componentes da infraestrutura.
  • Renovar certificados: Certbot / lets encrypt é usado para certificados SSL e as chaves expirarão a cada 3 meses. Isso renovará os certificados para seu domínio e os colocará na pasta necessária para que os componentes relacionados consumam. Veja caminhos de arquivo importantes
  • Restaurar do backup: Irá acionar o mongodb e o redis para restaurar os dados de backup.

Configuração inicial (opção 1)

Escolha a opção 1. Initial setup para começar.

Uma vez concluído, você verá uma mensagem de sucesso. Você pode até mesmo executar docker ps ver o componentes girados. Mais informações sobre componentes abaixo.

Nome do serviçoPorta PadrãoDescrição
Rede443Interface da Web para todas as interações do administrador
API4000Camada de API para abstrair bancos de dados
BrisaNenhumTrabalho em segundo plano e executor de tarefas
SMTP465/587Servidor SMTP para e-mail de saída
SMTP BreeNenhumTrabalho em segundo plano SMTP
MX2525Troca de e-mail para e-mail de entrada e encaminhamento de e-mail
IMAP993/2993Servidor IMAP para e-mail de entrada e gerenciamento de caixa de correio
POP3995/2995Servidor POP3 para e-mail de entrada e gerenciamento de caixa de correio
SQLite3456Servidor SQLite para interações com bancos de dados sqlite
SQLite BreeNenhumTrabalho em segundo plano do SQLite
CalDAV5000Servidor CalDAV para gerenciamento de calendário
MongoDB27017Banco de dados MongoDB para a maioria dos gerenciamentos de dados
Redis6379Redis para cache e gerenciamento de estado
SQLiteNenhumBanco(s) de dados SQLite para caixas de correio criptografadas

Caminhos de arquivo importantes

Observação: Caminho do host abaixo é relativo a /root/forwardemail.net/self-hosting/.

ComponenteCaminho do hostCaminho do contêiner
MongoDB./mongo-backups/backups
Redis./redis-data/data
Sqlite./sqlite-data/mnt/{SQLITE_STORAGE_PATH}
Arquivo env./.env/app/.env
Certificados/chaves SSL./ssl/app/ssl/
Chave privada./ssl/privkey.pem/app/ssl/privkey.pem
Certificado de cadeia completa./ssl/fullchain.pem/app/ssl/fullchain.pem
CAs certificados./ssl/cert.pem/app/ssl/cert.pem
Chave privada DKIM./ssl/dkim.key/app/ssl/dkim.key

[!IMPORTANTE] Salve o .env arquivar com segurança. É crítico para recuperação em caso de falha. Você pode encontrar isso em /root/forwardemail.net/self-hosting/.env.

Configuração inicial de DNS

No seu provedor DNS de escolha, configure os registros DNS apropriados. Anote qualquer coisa entre colchetes (<>) é dinâmico e precisa ser atualizado com seu valor.

TipoNomeContenteTTL
A"@", "." ou em branco<endereço_ip>auto
CNAMEAPIs<nome_do_domínio>auto
CNAMECaldav<nome_do_domínio>auto
CNAMEfe-rebate<nome_do_domínio>auto
CNAMEimap<nome_do_domínio>auto
CNAMEMX-México<nome_do_domínio>auto
CNAMEpop3<nome_do_domínio>auto
CNAMESMTP<nome_do_domínio>auto
MX"@", "." ou em brancomx.<nome_do_domínio> (prioridade 0)auto
TXT"@", "." ou em branco"v=spf1 a -tudo"auto

Registro DNS/PTR reverso

DNS reverso (rDNS) ou registros de ponteiro reverso (registros PTR) são essenciais para servidores de e-mail porque ajudam a verificar a legitimidade do servidor que envia o e-mail. Cada provedor de nuvem faz isso de forma diferente, então você precisará pesquisar como adicionar "DNS reverso" para mapear o host e o IP para seu nome de host correspondente. Provavelmente na seção de rede do provedor.

Porta 25 bloqueada

Alguns ISPs e provedores de nuvem bloqueiam 25 para evitar atores mal-intencionados. Talvez seja necessário registrar um tíquete de suporte para abrir a porta 25 para SMTP/e-mail de saída.

  1. Abra a Landing Page Navegue até https://<domain_name>, substituindo <domain_name> pelo domínio configurado nas suas configurações de DNS. Você deverá ver a landing page Forward Email.

  2. Faça login e integre seu domínio

  • Entre com um e-mail e senha válidos.
  • Digite o nome de domínio que você deseja configurar (ele deve corresponder à configuração de DNS).
  • Siga as instruções para adicionar o necessário MX e TXT registros para verificação.
  1. Configuração completa
  • Após a verificação, acesse a página Aliases para criar seu primeiro alias.
  • Opcionalmente, configure SMTP para e-mail de saída no Configurações de domínio. Isso requer registros DNS adicionais.

[!NOTA] Nenhuma informação é enviada para fora do seu servidor. A opção de auto-hospedagem e a conta inicial são apenas para login de administrador e visualização da web para gerenciar domínios, aliases e configurações de e-mail relacionadas.

Criando seu primeiro alias

  1. Navegue até a página Aliases Abra a página de gerenciamento de alias:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
  1. Adicionar um novo alias
  • Clique Adicionar alias (canto superior direito).
  • Insira o nome do alias e ajuste as configurações de e-mail conforme necessário.
  • (Opcional) Habilitar IMAP/POP3/CalDAV suporte marcando a caixa de seleção.
  • Clique Criar Alias.
  1. Definir uma senha
  • Clique Gerar senha para criar uma senha segura.
  • Esta senha será necessária para efetuar login no seu cliente de e-mail.
  1. Configure seu cliente de e-mail
  • Use um cliente de e-mail como o Thunderbird.
  • Digite o nome do alias e a senha gerada.
  • Configurar o IMAP e SMTP configurações de acordo.

Configurações do servidor de e-mail

Nome de usuário: <alias name>

Tiponome de anfitriãoPortaSegurança de conexãoAutenticação
SMTPsmtp.<nome_do_domínio>465SSL / TLSSenha normal
IMAPimap.<nome_do_domínio>993SSL / TLSSenha normal

Enviando / Recebendo seu primeiro e-mail

Depois de configurado, você poderá enviar e receber e-mails no seu endereço de e-mail recém-criado e auto-hospedado!

Por que isso não funciona fora do Ubuntu

Atualmente, estamos procurando oferecer suporte ao Debian, MacOS e buscaremos outros. Por favor, abra um discussão ou contribua se quiser ver outros apoiados.

Por que o desafio certbot acme está falhando

A armadilha mais comum é que o certbot / letsencrypt às vezes solicitará 2 desafios. Você precisa ter certeza de adicionar BOTH registros txt.

Exemplo: Você pode ver dois desafios como este: _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"

Também é possível que a propagação do DNS não tenha sido concluída. Você pode usar ferramentas como: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>. Isso lhe dará uma ideia se as alterações do seu registro TXT devem ser refletidas. Também é possível que o cache DNS local no seu host ainda esteja usando um valor antigo e obsoleto ou não tenha captado as alterações recentes.

Outra opção é usar as alterações automatizadas de DNS do cerbot, definindo o /root/.cloudflare.ini arquivo com o token api em seu cloud-init / user-data na configuração inicial do VPS ou crie este arquivo e execute o script novamente. Isso gerenciará as alterações de DNS e as atualizações de desafio automaticamente.

Qual é o nome de usuário e a senha de autenticação básicos?

Para auto-hospedagem, adicionamos um pop-up de autenticação nativa do navegador pela primeira vez com um nome de usuário simples (admin) e senha (gerada aleatoriamente na configuração inicial). Nós apenas adicionamos isso como uma proteção caso a automação/raspadores de alguma forma o vençam para se inscrever pela primeira vez na experiência da web. Você pode encontrar essa senha após a configuração inicial em seu .env arquivar em AUTH_BASIC_USERNAME e AUTH_BASIC_PASSWORD.

Como sei o que está em execução

Você pode correr docker ps para ver todos os contêineres em execução que estão sendo gerados a partir do docker-compose-self-hosting.yml arquivo. Você também pode executar docker ps -a para ver tudo (incluindo contêineres que não estão em execução).

Como posso saber se algo que deveria estar funcionando não está funcionando?

Você pode correr docker ps -a para ver tudo (incluindo contêineres que não estão em execução). Você pode ver um log de saída ou nota.

Como encontro os logs

Você pode obter mais logs via docker logs -f <container_name>. Se algo saiu, provavelmente está relacionado ao .env arquivo está configurado incorretamente.

Na interface da web, você pode visualizar /admin/emails e /admin/logs para logs de e-mail de saída e logs de erro, respectivamente.

Por que meus e-mails enviados estão com o tempo limite esgotado?

Se você vir uma mensagem como Connection timed out ao conectar ao servidor MX... então você pode precisar verificar se a porta 25 está bloqueada. É comum que ISPs ou provedores de nuvem bloqueiem isso por padrão, onde você pode precisar entrar em contato com o suporte/registrar um ticket para abrir isso.

Quais ferramentas devo usar para testar as práticas recomendadas de configuração de e-mail e reputação de IP

Dê uma olhada em nosso Perguntas frequentes aqui.