Table of Contents
*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
sudoe 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 the cloud provider 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 como<^>example.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
0desativa 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ão<^>mail.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 [email protected] e [email protected] e que esses e-mails sejam entregues ao usuário Linux sammy, você poderia configurar seu arquivo dessa forma:
[label /etc/postfix/virtual]
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:
[label /etc/s-nail.rc]
. . .
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 vazia
set folder=Maildir: define o diretórioMaildirpara a variável internafolder
set record =+sentcria um arquivo mboxsentpara 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:
[secondary_label Output]
Can'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:
[secondary_label 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:
[secondary_label Output]
s-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:
[secondary_label 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
[secondary_label 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:
[label ~/test_message]
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-rlhe 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 usa[email protected]
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:
[secondary_label 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.