Tutorial

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

Published on May 12, 2020
Português
Como Instalar e Configurar o Postfix como um Servidor SMTP Apenas para Envio no Ubuntu 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:

  1. sudo apt update

Em seguida, instale o Postfix executando o seguinte comando:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. sudo apt update

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

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. sudo systemctl restart postfix

Agora, tente enviar um e-mail novamente:

  1. 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.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors
Default avatar
Savic

author


Default avatar
finid

author



Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
1 Comments


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

I did the above configuration and it didn’t work.

I ran the telnet command smtp.kinghost.net 465 on the server and it returned

Trying 191.6.216.100… Trying 191.6.216.99… Trying 2804:10:8016::216:99… Trying 2804:10:8016::216:100… telnet: Unable to connect to remote host: Network is unreachable

But when I run it on my machine it works.

What can I do?

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.