Tutorial

Como Instalar e Configurar o Postfix como um Servidor SMTP Apenas para Envio no Ubuntu 18.04

EmailUbuntu 18.04

O autor selecionou o Free and Open Source Fund para receber uma doação como parte do programa Write for DOnations.

Introdução

O Postfix é um agente de transferência de e-mail (MTA), uma aplicação utilizada para enviar e receber e-mails. Ele pode ser configurado para enviar e-mails apenas de uma aplicação local. Isso é útil em situações em que você precisa enviar regularmente notificações por e-mail de seus apps ou, simplesmente, ter um grande tráfego de saída que um provedor de serviço de e-mail de terceiros não permitiria. Ele também é uma alternativa mais leve do que executar um servidor SMTP completo, enquanto mantém a funcionalidade necessária.

Neste tutorial, você instalará e configurará o Postfix como um servidor SMTP apenas para envio. Você também solicitará certificados TLS gratuitos do Let’s Encrypt para seu domínio e você criptografará os e-mails de saída com eles.

Pré-requisitos

  • Um servidor Ubuntu 18.04 configurado de acordo com o tutorial de Configuração Inicial de Servidor com o Ubuntu 18.04, incluindo a criação de um usuário sudo não root.
  • Um nome de domínio totalmente registrado. Este tutorial utilizará o your_domain durante todo o processo. Você pode comprar um nome de domínio em Namecheap, obter um gratuitamente em Freenom ou usar o registrador de domínios de sua escolha.
  • Um registro de DNS de tipo A com o your_domain apontando para o endereço IP público do seu servidor. Você pode seguir esta Introdução ao DNS da DigitalOcean para obter mais detalhes sobre como adicioná-los.

Nota: o hostname do seu servidor e o nome do seu Droplet devem corresponder ao your_domain, pois a DigitalOcean define automaticamente os registros de PTR para o endereço IP do Droplet de acordo com o nome dele.

Você pode verificar o hostname do servidor digitando hostname no prompt de comando. A saída deve corresponder ao nome que você deu ao Droplet quando ele foi criado.

Passo 1 — Instalando o Postfix

Neste passo, você instalará o Postfix. A maneira mais rápida é instalar o pacote mailutils, que inclui os pacotes do Postfix com alguns programas suplementares que você utilizará para testar o envio de e-mail.

Primeiro, atualize o banco de dados de pacotes:

  • sudo apt update

Em seguida, instale o Postfix executando o seguinte comando:

  • sudo apt install mailutils

Perto do final do processo de instalação, será mostrada a janela de configuração do Postfix:

Selecione Internet Site no menu e pressione TAB para selecionar<Ok>, depois ENTER

A opção padrão é Internet Site Essa é a opção recomendada para seu caso de uso. Então, pressione TAB e, depois, ENTER. Se você só vir o texto de descrição, pressione TAB para selecionar OK, depois ENTER.

Se ele não aparecer automaticamente, execute o seguinte comando para iniciá-lo:

  • sudo dpkg-reconfigure postfix

Após isso, você receberá outro prompt de configuração sobre o nome do sistema de e-mail:

Digite seu nome de domínio e, depois, pressione TAB para selecionar<Ok>, ENTER

O nome do sistema de e-mail deve ser o mesmo que você atribuiu ao seu servidor quando você o estava criando. Quando você terminar, pressione TAB, seguido de ENTER.

Agora você instalou o Postfix e está pronto para iniciar a configuração dele.

Passo 2 — Configurando o Postfix

Neste passo, você configurará o Postfix para enviar e receber e-mails apenas do servidor no qual ele está em execução — ou seja do localhost

Para que isso aconteça, o Postfix precisa ser configurado para escutar apenas na interface loopback, a interface de rede virtual que o servidor utiliza para se comunicar internamente. Para fazer as alterações, você precisará editar o arquivo de configuração principal do Postfix chamado main.cf, armazenado em etc/postfix.

Abra-o para edição utilizando seu editor de texto favorito:

  • sudo nano /etc/postfix/main.cf

Procure as seguintes linhas:

/etc/postfix/main.cf
. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
. . .

Defina o valor da configuração inet_interfaces para loopback-only:

/etc/postfix/main.cf
. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
. . .

Outra diretiva que você precisará modificar é a mydestination, que é usada para especificar a lista de domínios que são entregues através do transporte de entrega de e-mail local_transport. Por padrão, os valores são semelhantes a estes:

/etc/postfix/main.cf
. . .
mydestination = $myhostname, your_domain, localhost.com, , localhost
. . .

Altere a linha para que ela fique como esta:

/etc/postfix/main.cf
. . .
mydestination = localhost.$mydomain, localhost, $myhostname
. . .

Se o domínio é na verdade um subdomínio, e você gostaria que as mensagens de e-mail parecessem ter sido enviadas do domínio principal, adicione a seguinte linha ao final do main.cf:

/etc/postfix/main.cf
...
masquerade_domains = your_main_domain

A configuração opcional masquerade_domains especifica para quais domínios a parte do subdomínio será retirada no endereço de e-mail.

Quando terminar, salve e feche o arquivo.

Nota: se você está hospedando vários domínios em um único servidor, os outros domínios podem também ser passados para o Postfix utilizando a diretiva mydestination.

Em seguida, reinicie o Postfix executando o seguinte comando:

  • sudo systemctl restart postfix

Você configurou o Postfix para enviar e-mails apenas do seu servidor. Agora, você irá testá-lo enviando uma mensagem de exemplo para um endereço de e-mail.

Passo 3 — Testando o Servidor SMTP

Neste passo, você testará se o Postfix pode enviar e-mails para uma conta de e-mail externa usando o comando mail, que faz parte do pacote mailutils que você instalou no primeiro passo.

Para enviar um e-mail de teste, execute o seguinte comando:

  • echo "This is the body of the email" | mail -s "This is the subject line" your_email_address

Você pode alterar o corpo e o assunto do e-mail ao seu gosto. Lembre-se de substituir your_email_address por um endereço de e-mail válido que você possa acessar.

Agora, verifique o endereço de e-mail para o qual você enviou esta mensagem. Você deve ver a mensagem em sua caixa de entrada. Se ele não estiver lá, verifique sua pasta de spam. Neste ponto, todos os e-mails que você envia não são criptografados, o que faz com que os prestadores de serviços pensem que ele é provavelmente spam. Você configurará a criptografia mais tarde, no passo 5.

Se você receber um erro do comando mail, ou se não tiver recebido uma mensagem após períodos prolongados de tempo, verifique se a configuração do Postfix que você editou é válida e que o nome e o hostname do seu servidor estão configurados para o seu domínio.

Observe que com esta configuração, o endereço no campo From para os e-mails de teste que você envia estará na forma de your_user_name@your_domain, onde your_user_name é o nome de usuário do servidor com o qual você executou o comando.

Agora, você enviou um e-mail do seu servidor e verificou se ele foi recebido com sucesso. No próximo passo, você configurará o encaminhamento de e-mail para root.

Passo 4 — Sistema de Encaminhamento de E-mail

Neste passo, você configurará o encaminhamento e-mail para o usuário root, para que as mensagens geradas pelo sistema enviadas a ele em seu servidor sejam encaminhadas para um endereço de e-mail externo.

O arquivo /etc/aliases contém uma lista de nomes alternativos para os destinatários de e-mail. Abra o Caddyfile​​​ para edição:

  • sudo nano /etc/aliases

No estado padrão, ele se parece com isto:

/etc/aliases
# See man 5 aliases for format
postmaster:    root

A única diretiva presente especifica que os e-mails gerados pelo sistema são enviados para o root.

Adicione a linha seguinte ao final do arquivo:

/etc/aliases
...
root:          your_email_address

Com esta linha, você especifica que e-mails enviados para o root acabam sendo encaminhados para um endereço de e-mail. Lembre-se de substituir your_email_address pelo seu endereço de e-mail pessoal. Quando terminar, salve e feche o arquivo.

Para que a mudança entre em vigor, execute o seguinte comando:

  • sudo newaliases

A execução do newaliases irá construir um banco de dados de aliases que o comando mail utiliza, que são pegos do arquivo de configuração que você acabou de editar.

Teste se o envio de e-mails para o root funciona executando:

  • echo "This is the body of the email" | mail -s "This is the subject line" root

Você deve receber o e-mail em seu endereço e-mail. Se ele não estiver lá, verifique sua pasta de spam.

Neste passo, você configurou o encaminhamento de mensagens geradas pelo sistema para seu endereço de e-mail. Agora, você habilitará a criptografia de mensagens para que todos os e-mails que seu servidor enviar sejam imunizados contra adulteração em trânsito e sejam vistos como mais legítimos.

Passo 5 — Habilitando a Criptografia SMTP

Agora, você habilitará a criptografia SMTP solicitando um certificado TLS gratuito do Let’s Encrypt para seu domínio (usando o Certbot) e configurando o Postfix para usá-lo ao enviar mensagens.

O Ubuntu inclui o Certbot em seu repositório de pacotes padrão, mas pode acontecer de ele estar desatualizado. Em vez disso, você adicionará o repositório oficial executando o seguinte comando:

  • sudo add-apt-repository ppa:certbot/certbot

Pressione ENTER quando solicitado a aceitar. Em seguida, atualize o cache do gerenciador de pacotes do seu servidor:

  • sudo apt update

Por fim, instale a versão mais recente do Certbot:

  • sudo apt install certbot -y

Como parte da configuração inicial de servidor nos pré-requisitos, você instalou o ufw, o firewall descomplicado. Você precisará configurá-lo para permitir a porta HTTP 80, para que a verificação de domínios possa ser concluída. Execute o comando a seguir para habilitá-lo:

  • sudo ufw allow 80

O resultado ficará parecido com este:

Output
Rule added Rule added (v6)

Agora que a porta está aberta, execute o Certbot para obter um certificado:

  • sudo certbot certonly --standalone --rsa-key-size 4096 --agree-tos --preferred-challenges http -d your_domain

Este comando ordena que o Certbot emita certificados com um tamanho de chaves RSA de 4096 bits para executar um servidor web temporário (--standalone) para verificação, e para verificar através da porta 80 (--preferred-challenges http). Lembre-se de substituir your_domain pelo seu domínio antes de executar o comando e digite seu endereço de e-mail quando solicitado.

O resultado será semelhante a este:

Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator standalone, Installer None Obtaining a new certificate Performing the following challenges: http-01 challenge for `your_domain` Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2020-07-11. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

Como escrito nas notas, seu certificado e o arquivo de chave privada foram salvos em /etc/letsencrypt/live/your_domain.

Agora que você tem seu certificado, abra o main.cf para edição:

  • sudo nano /etc/postfix/main.cf

Procure a seguinte sessão:

/etc/postfix/main.cf
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Modifique-o para se parecer com isto, substituindo your_domain pelo seu domínio onde necessário, o que irá atualizar suas configurações TLS para o Postfix:

/etc/postfix/main.cf
# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/your_domain/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/your_domain/privkey.pem
smtp_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Quando terminar, salve e feche o arquivo.

Aplique as alterações reiniciando o Postfix:

  • sudo systemctl restart postfix

Agora, tente enviar um e-mail novamente:

  • echo "This is the body of an encrypted email" | mail -s "This is the subject line" your_email_address

Em seguida, verifique o endereço de e-mail que você forneceu. É possível que você veja a mensagem em sua caixa de entrada imediatamente, pois os provedores de e-mail são muito mais propensos a marcar mensagens não criptografadas como spam.

Você pode verificar as informações técnicas sobre a mensagem de e-mail em seu cliente para ver que a mensagem está de fato criptografada.

Conclusão

Agora, você tem um servidor de e-mail apenas para envio, equipado com o Postfix. Criptografar todas as mensagens de saída é um bom primeiro passo para que os provedores de e-mail não marquem suas mensagens como spam sem motivo. Se você estiver fazendo isso em um cenário de desenvolvimento, então, esta medida deve ser o suficiente.

No entanto, se o caso de uso for para enviar e-mails para os potenciais usuários do site (como e-mails de confirmação para uma inscrição no quadro de mensagens), você deve estudar a configuração de registros de SPF, para que os e-mails do seu servidor tenham mais probabilidade de serem vistos como legítimos.

Creative Commons License