Tutorial
Como instalar e configurar o Postfix no Ubuntu 20.04
Uma versão anterior deste tutorial foi escrita por Justin Ellingwood.
Introdução
O Postfix é um Agente de Transferência de E-mail (MTA) de código aberto popular que pode ser usado para rotear e entregar e-mails em um sistema Linux. Estima-se que cerca de 25% dos servidores públicos de e-mail na internet executem o Postfix.
Neste guia, você irá aprender como instalar e configurar o Postfix em um servidor Ubuntu 20.04. Em seguida, você irá testar se o Postfix é capaz de encaminhar e-mail corretamente instalando o s-nail
, um Mail User Agent (MUA), também conhecido como um cliente de e-mail.
Observe que o objetivo deste tutorial é ajudá-lo a colocar o Postfix funcionando rapidamente com apenas algumas funcionalidades básicas de e-mail. Você não terá um servidor de e-mail completo ao final deste guia, mas você terá alguns dos componentes fundamentais dessa configuração para ajudá-lo a começar.
Pré-requisitos
Para seguir este guia, você precisará do seguinte:
- Um servidor executando Ubuntu 20.04 para funcionar como seu servidor de e-mail do Postfix. O servidor deve ter um usuário não-root com privilégios
sudo
e um firewall configurado com UFW. Siga nosso guia de configuração inicial do servidor Ubuntu 20.04 para configurar isto. - Um nome de domínio totalmente qualificado apontado para o seu servidor Ubuntu 20.04. Você pode encontrar ajuda para configurar seu nome de domínio com a DigitalOcean seguindo nossa documentação de rede sobre domínios e DNS. Esteja ciente de que se você planeja acessar e-mails de um local externo, você também precisará certificar-se de que tem um registro MX apontando para seu servidor de e-mail.
Observe que este tutorial assume que você está configurando um host que tenha o FQDN de mail.example.com
. Sempre que necessário, certifique-se de alterar example.com
ou mail.example.com
para refletir seu próprio FQDN.
Passo 1 — Instalando o Postfix
O Postfix está incluído nos repositórios padrão do Ubuntu, assim você pode instalá-lo com o APT.
Para começar, atualize seu cache de pacotes apt
local:
- sudo apt update
Em seguida, instale o pacote postfix
com o seguinte comando. Observe que aqui passamos a variável de ambiente DEBIAN_PRIORITY=low
neste comando de instalação. Isso fará com que o processo de instalação solicite que você configure algumas opções adicionais:
- sudo DEBIAN_PRIORITY=low apt install postfix
O processo de instalação abrirá uma série de prompts interativos. Para os propósitos deste tutorial, use as seguintes informações para preencher seus prompts:
- General type of mail configuration?: para isto, escolha Internet Site uma vez que isso atende às nossas necessidades de infraestrutura.
- System mail name: este é o domínio base usado na construção de um endereço de e-mail válido quando apenas a parte da conta do endereço é fornecida. Por exemplo, digamos que o nome de host do seu servidor é
mail.example.com
. Você provavelmente desejará definir o nome do correio do sistema comoexample.com
para que, dado o usuáriouser1
, o Postfix usará o endereçouser1@example.com
. - Root and postmaster mail recipient: esta é a conta Linux em que serão encaminhados e-mails destinados a
root@
epostmaster@
. Use sua conta principal para isso. Neste caso de exemplo, sammy. - Other destinations to accept mail for: define os destinos de e-mail que essa instância do Postfix aceitará. Se você precisar adicionar outros domínios pelos quais este servidor será responsável por receber, adicione-os aqui. Caso contrário, o padrão será suficiente.
- Force synchronous updates on mail queue?: uma vez que você provavelmente está usando um sistema de arquivos registrados em diário, aceite a opção No aqui.
- Local networks: esta é uma lista das redes para as quais seu servidor de e-mail está configurado para retransmitir as mensagens. O padrão deve funcionar para a maioria dos cenários. Se você optar por modificá-la, certifique-se de ser muito restritivo em relação à faixa da rede.
- Mailbox size limit: isso pode ser usado para limitar o tamanho das mensagens. Definindo-o para
0
desativa qualquer restrição de tamanho. - Local address extension character: este é o caractere que pode ser usado para separar a parte regular do endereço de uma extensão (usado para criar pseudônimos dinâmicos). O padrão,
+
irá funcionar para este tutorial. - Internet protocols to use: escolha se vai restringir a versão de IP que o Postfix suporta. Para os fins deste tutorial, escolha all.
Para ser explícito, estas são as configurações usadas neste guia:
- General type of mail configuration?: Internet Site
- System mail name:
example.com
(e nãomail.example.com
) - Root and postmaster mail recipient: o nome de usuário da sua conta principal do Linux (sammy em nossos exemplos)
- Other destinations to accept mail for:
$myhostname, example.com, mail.example.com, localhost.example.com, localhost
- Force synchronous updates on mail queue?: No
- Local networks:
127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
- Mailbox size limit:
0
- Local address extension character:
+
- Internet protocols to use: all
Nota: Se você precisar retornar para alterar essas configurações, poderá fazê-lo digitando:
- sudo dpkg-reconfigure postfix
Os prompts estarão pré-preenchidos com suas respostas anteriores.
Quando o processo de instalação terminar, você está pronto para fazer algumas atualizações nas configurações do seu Postfix.
Passo 2 — Alterando a configuração do Postfix
Agora você pode ajustar algumas configurações que o processo de instalação do pacote não solicitou. Muitas definições de configuração do Postfix estão definidas no arquivo /etc/postfix/main.cf
. Em vez de editar este arquivo diretamente, você pode usar o comando postconf
do Postfix, para consultar ou definir itens de configuração.
Para começar, defina a localização para a caixa de correio do seu usuário não-root do Ubuntu. Neste guia, usaremos o formato Maildir, que separa mensagens em arquivos individuais que são então movidos entre diretórios baseados na ação do usuário. A opção alternativa que não está coberta neste guia é o formato mbox, que armazena todas as mensagens dentro de um único arquivo.
Defina a variável home_mailbox
para Maildir/
. Mais tarde, você criará uma estrutura de diretórios nesse nome dentro do diretório home do usuário. Configure a home_mailbox
digitando:
- sudo postconf -e 'home_mailbox= Maildir/'
Em seguida, defina a localização da tabela virtual_alias_maps
, que mapeia contas de e-mail arbitrárias para contas do sistema Linux. Execute o seguinte comando, que mapeia a localização da tabela para um arquivo hash de banco de dados chamado /etc/postfix/virtual
:
- sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'
Agora que você definiu a localização do arquivo de mapas virtuais em seu arquivo main.cf
, você pode criar o próprio arquivo e começar a mapear contas de e-mail para contas de usuário em seu sistema Linux. Crie o arquivo com seu editor de texto preferido; neste exemplo, vamos usar o nano
:
- sudo nano /etc/postfix/virtual
Liste quaisquer endereços para os quais você deseja aceitar e-mail, seguido por um espaço em branco e o usuário do Linux para o qual você gostaria que o e-mail fosse entregue.
Por exemplo, se você quiser aceitar e-mails para contact@example.com
e admin@example.com
e que esses e-mails sejam entregues ao usuário Linux sammy, você poderia configurar seu arquivo dessa forma:
contact@example.com sammy
admin@example.com sammy
Após mapear todos os endereços para as contas apropriadas do servidor, salve e feche o arquivo. Se você usou o nano
, faça isso pressionando as teclas CTRL + X
, Y
e depois ENTER
.
Aplique o mapeamento digitando:
- sudo postmap /etc/postfix/virtual
Reinicie o processo do Postfix para ter certeza de que todas as alterações foram aplicadas:
- sudo systemctl restart postfix
Supondo que você tenha seguido os pré-requisitos do guia de configuração inicial do servidor, você terá configurado um firewall com o UFW. Este firewall irá bloquear conexões externas aos serviços no seu servidor por padrão, a menos que essas conexões sejam explicitamente permitidas, então você terá que adicionar uma regra de firewall para permitir uma exceção para o Postfix.
É possível permitir conexões ao serviço digitando:
- sudo ufw allow Postfix
Com isso, o Postfix está configurado e pronto para aceitar conexões externas. No entanto, você ainda não está pronto para testá-lo com um cliente de e-mail. Antes que você possa instalar um cliente e usá-lo para interagir com o e-mail sendo entregue ao seu servidor, você precisará fazer algumas alterações na configuração do seu servidor Ubuntu.
Passo 3 — Instalando o cliente de e-mail e inicializando a estrutura do Maildir
Para interagir com o e-mail que está sendo entregue, este passo irá conduzi-lo através do processo de instalação do pacote s-nail
. Esta é uma variante rica em recursos do cliente BSD xmail
, que pode lidar com o formato Maildir corretamente.
Antes de instalar o cliente, porém, seria prudente certificar-se de que sua variável de ambiente MAIL
esteja definida corretamente. O s-nail
irá procurar esta variável para descobrir onde encontrar e-mail para seu usuário.
Para garantir que a variável MAIL
esteja definida, independentemente de como você acesse sua conta — seja através do ssh
, su
, su -
, ou sudo
, por exemplo — você precisará definir a variável no arquivo /etc/bash.bashrc
e adicioná-la a um arquivo dentro de /etc/profile.d
para certificar-se de que ela está definida para todos os usuários por padrão.
Para adicionar a variável a esses arquivos, digite:
- echo 'export MAIL=~/Maildir' | sudo tee -a /etc/bash.bashrc | sudo tee -a /etc/profile.d/mail.sh
Para ler a variável em sua sessão atual, faça um source no arquivo /etc/profile.d/mail.sh
:
- source /etc/profile.d/mail.sh
Uma vez feito isso, instale o cliente de e-mail s-nail
com o APT:
- sudo apt install s-nail
Antes de executar o cliente, há algumas configurações que você precisa ajustar. Abra o arquivo /etc/s-nail.rc
no seu editor:
- sudo nano /etc/s-nail.rc
No final do arquivo, adicione as seguintes opções:
. . .
set emptystart
set folder=Maildir
set record=+sent
Aqui está o que estas linhas fazem:
set emptystart
: permite que o cliente abra mesmo com uma caixa de entrada vaziaset folder=Maildir
: define o diretórioMaildir
para a variável internafolder
set record =+sent
cria um arquivo mboxsent
para armazenar e-mails enviados dentro do diretório que for definido como a variávelfolder
, neste casoMaildir
Salve e feche o arquivo quando você terminar. Agora você está pronto para inicializar a estrutura Maildir do seu sistema.
Uma maneira rápida de criar a estrutura Maildir dentro do seu diretório home é enviar um e-mail para você mesmo com o comando s-nail
. Como o arquivo sent
estará disponível apenas após a criação do Maildir, você deve desativar a gravação nele para este e-mail inicial. Faça isso passando a opção -Snorecord
.
Envie o e-mail transmitindo uma string para o comando s-nail
. Ajuste o comando para marcar seu usuário Linux como o destinatário:
- echo 'init' | s-nail -s 'init' -Snorecord sammy
Nota: você pode obter a seguinte resposta:
OutputCan't canonicalize "/home/sammy/Maildir"
Isso é normal e pode apenas aparecer ao enviar essa primeira mensagem.
Você pode verificar para se certificar que o diretório foi criado procurando pelo seu diretório ~/Maildir
:
- ls -R ~/Maildir
Você verá que a estrutura de diretórios foi criada e que um novo arquivo de mensagem está no diretório ~/Maildir/new
:
Output/home/sammy/Maildir/:
cur new tmp
/home/sammy/Maildir/cur:
/home/sammy/Maildir/new:
1463177269.Vfd01I40e4dM691221.mail.example.com
/home/sammy/Maildir/tmp:
Agora que a estrutura de diretórios foi criada, você está pronto para testar o cliente s-nail
visualizando a mensagem init
que você enviou e enviando uma mensagem para um endereço de e-mail externo.
Passo 5 — Testando o cliente
Para abrir o cliente, execute o comando s-nail
:
- s-nail
Em seu console, você verá uma caixa de entrada rudimentar com a mensagem init
esperando:
Outputs-nail version v14.9.15. Type `?' for help
"/home/sammy/Maildir": 1 message 1 new
>N 1 sammy@example.com 2020-05-19 15:40 14/392 init
Pressione ENTER
para exibir a mensagem:
Output[-- Message 1 -- 14 lines, 369 bytes --]:
From sammy@example.com Tue May 19 15:40:48 2020
Date: Tue, 19 May 2020 15:40:48 +0000
To: sammy@example.com
Subject: init
Message-Id: <20160513220749.A278F228D9@mail.example.com>
From: sammy@example.com
init
Você pode voltar para a lista de mensagens digitando h
, e depois ENTER
:
- h
Output>R 1 sammy@example.com 2020-05-19 15:40 14/392 init
Observe que a mensagem agora tem um estado de R
, indicando que ela foi lida.
Como esta mensagem não é muito útil, você pode excluí-la pressionando d
, e depois ENTER
:
- d
Para voltar ao terminal, digite q
e depois ENTER
:
- q
Como um teste final, verifique se o s-nail
é capaz de enviar mensagens de e-mail corretamente. Para fazer isso, você pode fazer um pipe do conteúdo de um arquivo de texto para o processo do s-nail
, como você fez com a mensagem init
do passo anterior.
Comece escrevendo uma mensagem de teste em um editor de texto:
- nano ~/test_message
Dentro, digite algum texto que você gostaria de enviar:
Hello,
This is a test. Please confirm receipt!
Salve e feche o arquivo depois de escrever sua mensagem.
A seguir, use o comando cat
para fazer um pipe da mensagem para o processo do s-nail
. Você pode fazer isto com o seguinte exemplo, que usa essas opções:
-s
: isso define a linha de assunto da mensagem de e-mail-r
: uma alteração opcional no campo “De:” do e-mail. Por padrão, o usuário Linux com o qual você estiver logado será usado para preencher este campo. A opção-r
lhe permite substituir isto com um endereço válido, como um daqueles que você definiu no arquivo/etc/postfix/virtual
. Para ilustrar, o seguinte comando usacontact@example.com
Além disso, certifique-se de alterar user@email.com
para um endereço de e-mail válido que você tenha acesso:
- cat ~/test_message | s-nail -s 'Test email subject line' -r contact@example.com user@email.com
Em seguida, navegue até a caixa de entrada do endereço de e-mail para o qual você enviou a mensagem. Você verá sua mensagem logo em seguida.
Nota: se a mensagem não estiver em sua caixa de entrada, ela pode ter sido entregue na sua pasta de Spam.
Você pode ver suas mensagens enviadas dentro do seu cliente s-nail
. Inicie o cliente interativo novamente:
- s-nail
No cliente de email, visualize suas mensagens enviadas digitando:
- file +sent
Você verá um resultado como esse:
Output+[/home/sammy/Maildir/]sent: 1 message 1 new
▸N 1 contact@example.com 2020-05-19 15:47 12/297 Test email subject line
Você pode gerenciar os e-mails enviados usando os mesmos comandos que você usa para os e-mails recebidos.
Conclusão
Agora você tem o Postfix configurado em seu servidor Ubuntu 20.04. O gerenciamento de servidores de e-mail pode ser uma tarefa difícil para novos administradores de sistema, mas com esta configuração, você deve ter funcionalidade de email MTA suficiente para começar.