# Capítulo 28. Correio Eletrônico

Esta tradução pode estar desatualizada. Para ajudar com as traduções, acesse a ferramenta de traduções do FreeBSD.

## 28.1. Sinopse

O "Electronic Mail", mais conhecido como email, é uma das formas de comunicação mais utilizadas atualmente. Este capítulo fornece uma introdução básica à execução de um servidor de email no FreeBSD, bem como uma introdução ao envio e recebimento de email usando o FreeBSD. Para uma cobertura mais completa deste assunto, consulte os livros listados em Bibliografia.

Depois de ler este capítulo, você saberá:

- Quais softwares estão envolvidos no envio e recebimento de mensagens de email.

- Onde os arquivos básicos de configuração do Sendmail estão localizados no FreeBSD.

- A diferença entre caixas de correio remotas e locais.

- Como bloquear spammers de utilizar ilegalmente um servidor de email como relay.

- Como instalar e configurar um Mail Transfer Agent, substituindo o Sendmail.

- Como solucionar problemas comuns de servidor de email.

- Como configurar o sistema para apenas enviar email.

- Como usar email com uma conexão discada.

- Como configurar a autenticação SMTP para segurança adicional.

- Como instalar e usar um Mail User Agent, como o mutt, para enviar e receber email.

- Como baixar emails de um servidor remoto utilizando POP ou IMAP.

- Como aplicar automaticamente filtros e regras ao email recebido.

Antes de ler este capítulo, você deve:

- Configurar corretamente uma conexão de rede (Rede Avançada).

- Configure corretamente as informações de DNS para um host de email (Servidores de Rede).

- Saber como instalar software adicional de terceiros (Instalando Aplicativos. Pacotes e Ports).

## 28.2. Componentes de Email

Há cinco partes principais envolvidas em uma troca de email: o Mail User Agent (MUA), o Mail Transfer Agent (MTA), um host de email, uma caixa de correio remota ou local e DNS. Esta seção fornece uma visão geral desses componentes.

Mail User Agent (MUA)

  O Mail User Agent (MUA) é um aplicativo que é usado para redigir, enviar e receber emails. Este aplicativo pode ser um programa de linha de comando, como o utilitário `mail` interno ou um aplicativo de terceiros da Coleção de Ports, como mutt, alpine ou elm. Dezenas de programas gráficos também estão disponíveis na Coleção de Ports, incluindo o Claws Mail, Evolution e Thunderbird. Algumas organizações fornecem um programa web de email que pode ser acessado por meio de um navegador. Mais informações sobre como instalar e usar um MUA no FreeBSD podem ser encontradas em Mail User Agents.

Mail Transfer Agent (MTA)

  O Mail Transfer Agent (MTA) é responsável por receber emails de entrada e entregar emails de saída. O FreeBSD vem com o Sendmail como o MTA padrão, mas também suporta vários outros daemons de servidor de email, incluindo Exim, Postfix e qmail. A configuração do Sendmail é descrita em Arquivos de Configuração do Sendmail. Se outro MTA estiver instalado usando a Coleção de Ports, consulte sua mensagem de pós-instalação para detalhes de configuração específicos do FreeBSD e o site do aplicativo para obter instruções de configuração mais completas.

Servidor de Email e Caixas de Correio

  O servidor de email é um servidor responsável por entregar e receber emails para um host ou uma rede. O servidor de email coleta todas as mensagens enviadas para o domínio e as armazena no mbox padrão ou no formato alternativo Maildir, dependendo da configuração. Uma vez que o email foi armazenado, ele pode ser lido localmente usando um MUA ou acessado e coletado remotamente usando protocolos como POP ou IMAP. Se o email for lido localmente, não é necessário instalar um servidor POP ou IMAP.

  Para acessar as caixas de email remotamente, é necessário um servidor POP ou IMAP, pois esses protocolos permitem que os usuários se conectem a suas caixas de correio de locais remotos. O IMAP oferece várias vantagens sobre o POP. Isso inclui a capacidade de armazenar uma cópia de mensagens em um servidor remoto após o download e atualizações simultâneas. O IMAP pode ser útil em links de baixa velocidade, pois permite aos usuários buscar a estrutura das mensagens sem baixá-las. Ele também pode executar tarefas como pesquisas no servidor para minimizar a transferência de dados entre clientes e servidores.

  Vários servidores POP e IMAP estão disponíveis na Coleção de Ports. Estes incluem o mail/qpopper, mail/imap-uw, mail/courier-imap e mail/dovecot2 .

  | Deve-se notar que o POP e o IMAP transmitem informações, incluindo nome de usuário e senha, em texto não criptografado. Para garantir a segurança na transmissão de informações entre esses protocolos, considere a utilização de túneis seguros com ssh(1) (Tunelamento SSH) ou utilize SSL (OpenSSL).

Sistema de Nomes de Domínio (DNS)

  O Sistema de Nomes de Domínio (DNS) e seu daemon `named` desempenham um grande papel na entrega de email. Para enviar emails de um site para outro, o MTA procurará o site remoto por DNS para determinar qual host receberá os emails para o destino. Esse processo também ocorre quando o email é enviado de um host remoto para o MTA.

  Além de mapear nomes de hosts para endereços de IP, o DNS é responsável por armazenar informações específicas da entrega de emails, conhecidas como Mail eXchanger MX. O registro MX especifica quais hosts receberão mensagens de um domínio em particular.

  Para visualizar os registros MX de um domínio, especifique o tipo de registro. Consulte host(1), para mais detalhes sobre este comando:

      % host -t mx FreeBSD.org
      FreeBSD.org mail is handled by 10 mx1.FreeBSD.org

  Consulte Sistema de Nomes de Domínio (DNS) para mais informações sobre DNS e sua configuração.

## 28.3. Arquivos de Configuração do Sendmail

Sendmail é o MTA padrão instalado com o FreeBSD. Ele aceita emails de MUAs e os entrega ao host de email apropriado, conforme definido por sua configuração. O Sendmail também pode aceitar conexões de rede e enviar mensagens para caixas de correio locais ou para outro programa.

Os arquivos de configuração do Sendmail estão localizados em /etc/mail. Esta seção descreve esses arquivos em mais detalhes.

/etc/mail/access

  Este arquivo de acesso define quais hosts ou endereços de IP têm acesso ao servidor de email local e que tipo de acesso eles possuem. Os hosts listados como `OK`, que é a opção padrão, têm permissão para enviar emails para esse host, desde que o destino final do email seja a máquina local. Os hosts listados como `REJECT` são rejeitados para todas as conexões de email. Os hosts listados como `RELAY` têm permissão para enviar emails para qualquer destino usando este servidor de email. Os hosts listados como `ERROR` terão seus emails retornados com o erro de email especificado. Se um host estiver listado como `SKIP`, o Sendmail interromperá a pesquisa atual por esta entrada sem aceitar ou rejeitar o email. Os hosts listados como `QUARANTINE` terão suas mensagens retidas e receberão o texto especificado como o motivo da retenção.

  Exemplos de uso destas opções para endereços IPv4 e IPv6 podem ser encontrados na configuração de exemplo do FreeBSD, /etc/mail/access.sample:

      # $FreeBSD: head/pt_BR.ISO8859-1/books/handbook/book.xml 53984 2020-03-15 16:03:31Z dbaio $
      #
      # Mail relay access control list.  Default is to reject mail unless the
      # destination is local, or listed in /etc/mail/local-host-names
      #
      ## Examples (commented out for safety)
      #From:cyberspammer.com          ERROR:"550 We don't accept mail from spammers"
      #From:okay.cyberspammer.com     OK
      #Connect:sendmail.org           RELAY
      #To:sendmail.org                RELAY
      #Connect:128.32                 RELAY
      #Connect:128.32.2               SKIP
      #Connect:IPv6:1:2:3:4:5:6:7     RELAY
      #Connect:suspicious.example.com QUARANTINE:Mail from suspicious host
      #Connect:[127.0.0.3]            OK
      #Connect:[IPv6:1:2:3:4:5:6:7:8] OK

  Para configurar o arquivo de acesso, use o formato mostrado no exemplo para adicionar entradas em /etc/mail/access, mas não coloque um símbolo de comentário (`#`) na frente das entradas. Crie uma entrada para cada host ou rede cujo acesso deve ser configurado. Os remetentes de email que correspondem ao lado esquerdo da tabela são afetados pela ação no lado direito da tabela.

  Sempre que este arquivo for atualizado, atualize seu banco de dados e reinicie o Sendmail:

      # makemap hash /etc/mail/access < /etc/mail/access
      # service sendmail restart

/etc/mail/aliases

  Este arquivo aliases contém uma lista de caixas de correio virtuais que são expandidas para usuários, arquivos, programas ou outros aliases. Aqui estão algumas entradas para ilustrar o formato do arquivo:

      root: localuser
      ftp-bugs: joe,eric,paul
      bit.bucket:  /dev/null
      procmail: "|/usr/local/bin/procmail"

  O nome da caixa de correio no lado esquerdo dos dois pontos é expandido para o(s) alvo(s) à direita. A primeira entrada expande a caixa de correio `root` para a caixa de correio `localuser`, que é então pesquisada no /etc/mail/aliases. Se nenhuma correspondência for encontrada, a mensagem será entregue para `localuser`. A segunda entrada mostra uma lista de email. Um email para `ftp-bugs` é expandido para as três caixas de correio locais `joe`, `eric` e `paul`. Uma caixa de correio remota pode ser especificada como user@example.com. A terceira entrada mostra como escrever mensagens em um arquivo, neste caso, /dev/null. A última entrada demonstra como enviar email para um programa, /usr/local/bin/procmail, através de um pipe UNIX™. Consulte aliases(5) para obter mais informações sobre o formato desse arquivo.

  Sempre que este arquivo for atualizado, execute `newaliases` para atualizar e inicializar o banco de dados de aliases.

/etc/mail/sendmail.cf

  Este é o arquivo de configuração principal do Sendmail. Ele controla o comportamento geral do Sendmail, incluindo tudo desde a tradução de endereços de email até a impressão de mensagens de rejeição para servidores de email remotos. Assim, este arquivo de configuração é bastante complexo. Felizmente, esse arquivo raramente precisa ser alterado para servidores de email padrão.

  O arquivo de configuração master do Sendmail pode ser criado a partir de macros m4(1) que definem os recursos e o comportamento do Sendmail. Consulte /usr/src/contrib/sendmail/cf/README para mais detalhes.

  Sempre que alterações nesse arquivo são feitas, o Sendmail precisa ser reiniciado para que as alterações entrem em vigor.

/etc/mail/virtusertable

  Esse arquivo mapeia endereços de email de domínios virtuais para caixas de correio usuários reais. Essas caixas de correio podem ser locais, remotas, aliases definidas em /etc/mail/aliases ou arquivos. Isso permite que vários domínios virtuais sejam hospedados em uma máquina.

  O FreeBSD fornece um exemplo de arquivo de configuração em /etc/mail/virtusertable.sample para demonstrar ainda mais seu formato. O exemplo a seguir demonstra como criar entradas personalizadas usando esse formato:

      root@example.com                root
      postmaster@example.com          postmaster@noc.example.net
      @example.com                    joe

  Este arquivo é processado pela primeira entrada que for correspondida. Quando um endereço de email corresponde ao endereço à esquerda, ele é mapeado para a caixa de correio local listada à direita. O formato da primeira entrada neste exemplo mapeia um endereço de email específico para uma caixa de correio local, enquanto o formato da segunda entrada mapeia um endereço de email específico para uma caixa de correio remota. Por fim, qualquer endereço de email de `example.com` que não correspondeu a nenhuma das entradas anteriores corresponderá ao último mapeamento e será enviado para a caixa de correio local `joe`. Ao criar entradas personalizadas, use este formato e adicione-as ao /etc/mail/virtusertable. Sempre que este arquivo for editado, atualize seu banco de dados e reinicie o Sendmail:

      # makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
      # service sendmail restart

/etc/mail/relay-domains

  Em uma instalação padrão do FreeBSD, o Sendmail é configurado para enviar apenas mensagens provenientes do host em que está sendo executado. Por exemplo, se um servidor POP estiver disponível, os usuários poderão verificar os emails de locais remotos, mas não poderão enviar emails de domínios externos. Normalmente, após alguns momentos da tentativa, um email será enviado de `MAILER-DAEMON` com uma mensagem `5.7 Relaying Denied`.

  A solução mais simples é adicionar o FQDN do ISP ao /etc/mail/relay-domains. Se vários endereços forem necessários, adicione-os um por linha:

      your.isp.example.com
      other.isp.example.net
      users-isp.example.org
      www.example.org

  Depois de criar ou editar este arquivo, reinicie o Sendmail com `service sendmail restart`.

  Agora, qualquer mensagem enviada pelo sistema por qualquer domínio dessa lista, desde que o usuário tenha uma conta no sistema, será aceita. Isso permite que os usuários enviem emails de domínios remotos do sistema sem precisar liberar acesso externo ao sistema, evitando SPAM da Internet.

## 28.4. Alterando o Mail Transfer Agent

O FreeBSD vem com o Sendmail já instalado como MTA, que é responsável pelos emails enviados e recebidos. No entanto, o administrador do sistema pode alterar o MTA do sistema. Uma ampla lista de alternativas de MTAs está disponível na categoria `mail` da Coleção de Ports do FreeBSD.

Uma vez que um novo MTA esteja instalado, configure e teste o novo software antes de substituir o Sendmail. Consulte a documentação do novo MTA para obter informações sobre como configurar o software.

Uma vez que o novo MTA estiver funcionando, use as instruções nesta seção para desativar o Sendmail e configurar o FreeBSD para usar o MTA substituto.

### 28.4.1. Desativar o Sendmail

| Se o serviço de email de saída do Sendmail estiver desabilitado, é importante que ele seja substituído por um sistema de entrega de email alternativo. Caso contrário, as funções do sistema, como periodic(8), não poderão entregar seus resultados por email. Muitas partes do sistema esperam um MTA funcional. Se os aplicativos continuarem a usar os binários do Sendmail para tentar enviar emails depois que eles forem desativados, o email poderá entrar em uma fila inativa do Sendmail e nunca será entregue.

Para desabilitar completamente o Sendmail, adicione ou edite as seguintes linhas no /etc/rc.conf:

    sendmail_enable="NO"
    sendmail_submit_enable="NO"
    sendmail_outbound_enable="NO"
    sendmail_msp_queue_enable="NO"

Para desabilitar somente o serviço de email de entrada do Sendmail, use apenas esta entrada no /etc/rc.conf:

    sendmail_enable="NO"

Mais informações sobre as opções de inicialização do Sendmail estão disponíveis em rc.sendmail(8).

### 28.4.2. Substitua o MTA Padrão

Quando um novo MTA é instalado usando a Coleção de Ports, seu script de inicialização também é instalado e as instruções de inicialização são mencionadas em sua mensagem de pacote. Antes de iniciar o novo MTA, pare os processos do Sendmail em execução. Este exemplo interrompe todos esses serviços e em seguida, inicia o serviço Postfix:

    # service sendmail stop
    # service postfix start

Para configurar a substituição MTA na inicialização do sistema, adicione sua linha de configuração ao /etc/rc.conf. Esta entrada habilita o MTA Postfix:

    postfix_enable="YES"

Algumas configurações adicionais são necessárias, pois o Sendmail é tão onipresente que alguns softwares assumem que ele já está instalado e configurado. Verifique o /etc/periodic.conf e certifique-se de que esses valores estejam configurados como `NO`. Se este arquivo não existir, crie-o com estas entradas:

    daily_clean_hoststat_enable="NO"
    daily_status_mail_rejects_enable="NO"
    daily_status_include_submit_mailq="NO"
    daily_submit_queuerun="NO"

Alguns MTAs alternativos fornecem suas próprias implementações compatíveis de linha de comando do Sendmail para facilitar o uso delas como substitutos para o Sendmail. No entanto, alguns MUAs podem tentar executar binários padrão do Sendmail em vez dos binários do novo MTA. O FreeBSD usa o /etc/mail/mailer.conf para mapear os binários esperados do Sendmail para o local dos novos binários. Mais informações sobre esse mapeamento podem ser encontradas em mailwrapper(8).

O /etc/mail/mailer.conf padrão se parece com isto:

    # $FreeBSD: head/pt_BR.ISO8859-1/books/handbook/book.xml 53984 2020-03-15 16:03:31Z dbaio $
    #
    # Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
    #
    sendmail        /usr/libexec/sendmail/sendmail
    send-mail       /usr/libexec/sendmail/sendmail
    mailq           /usr/libexec/sendmail/sendmail
    newaliases      /usr/libexec/sendmail/sendmail
    hoststat        /usr/libexec/sendmail/sendmail
    purgestat       /usr/libexec/sendmail/sendmail

Quando qualquer um dos comandos listados à esquerda é executado, o sistema na verdade executa o comando associado mostrado à direita. Esse sistema facilita a alteração de quais binários são executados quando esses binários padrões são chamados.

Alguns MTAs, quando instalados usando a Coleção de Ports, solicitarão a atualização deste arquivo para os novos binários. Por exemplo, o Postfix atualizará o arquivo da seguinte forma:

    #
    # Execute the Postfix sendmail program, named /usr/local/sbin/sendmail
    #
    sendmail        /usr/local/sbin/sendmail
    send-mail       /usr/local/sbin/sendmail
    mailq           /usr/local/sbin/sendmail
    newaliases      /usr/local/sbin/sendmail

Se a instalação do MTA não atualizar automaticamente o /etc/mail/mailer.conf, edite esse arquivo em um editor de texto para que ele aponte para os novos binários. Este exemplo aponta para os binários instalados pelo mail/ssmtp:

    sendmail        /usr/local/sbin/ssmtp
    send-mail       /usr/local/sbin/ssmtp
    mailq           /usr/local/sbin/ssmtp
    newaliases      /usr/local/sbin/ssmtp
    hoststat        /usr/bin/true
    purgestat       /usr/bin/true

Depois que tudo estiver configurado, é recomendável reinicializar o sistema. A reinicialização oferece a oportunidade de garantir que o sistema esteja configurado corretamente para iniciar o novo MTA automaticamente no boot.

## 28.5. Solução de problemas

### 28.5.1. Por que preciso usar o FQDN para hosts no meu site?

O host pode, na verdade, estar em um domínio diferente. Por exemplo, para um host em `foo.bar.edu` se conectar a um host chamado `mumble` no domínio `bar.edu`, faça a referência pelo Nome de Domínio Totalmente Qualificado (Fully-Qualified Domain Name) FQDN, `mumble.bar.edu`, em vez de apenas `mumble`.

Isso ocorre porque a versão do BIND que vem com o FreeBSD não fornece mais abreviações padrão para não-FQDNs que não sejam o domínio local. Um host não qualificado como `mumble` deve ser encontrado como `mumble.foo.bar.edu`, ou ele será procurado no domínio raiz.

Nas versões mais antigas do BIND, a pesquisa continuava em `mumble.bar.edu` e `mumble.edu`. A RFC 1535 detalha por que isso é considerado uma má prática ou até mesmo uma falha de segurança.

Como uma boa solução, coloque a linha:

    search foo.bar.edu bar.edu

em vez do anterior:

    domain foo.bar.edu

no /etc/resolv.conf. No entanto, certifique-se de que a ordem de pesquisa não ultrapasse o limite "entre administração local e pública", como a RFC 1535 a chama.

### 28.5.2. Como posso executar um servidor de email em um host PPP dial-up?

Conecte-se a um gateway de email FreeBSD na LAN. A conexão PPP não é dedicada.

Uma maneira de fazer isso é obter um servidor de Internet em tempo integral para fornecer serviços MX secundários para o domínio. Neste exemplo, o domínio é `example.com` e o ISP configurou `example.net` para fornecer o serviço de MX secundário para o domínio:

    example.com.          MX        10      example.com.
                          MX        20      example.net.

Apenas um host deve ser especificado como o destinatário final. Para Sendmail, adicione `Cw example.com` em /etc/mail/sendmail.cf em `example.com`.

Quando o MTA de envio tentar entregar o email, ele tentará conectar ao sistema, `example.com`, através do link PPP. Isso expirará se o destino estiver offline. O MTA irá entregá-lo automaticamente ao site MX secundário no Provedor de Serviços de Internet (ISP), `example.net`. O site secundário de MX tentará conectar-se periodicamente ao host primário MX, `example.com`.

Use algo assim como um script de login:

    #!/bin/sh
    # Put me in /usr/local/bin/pppmyisp
    ( sleep 60 ; /usr/sbin/sendmail -q ) &
    /usr/sbin/ppp -direct pppmyisp

Ao criar um script de login separado para usuários, use `sendmail -qRexample.com` no script acima. Isso forçará todos os emails na fila para que `example.com` sejam processados imediatamente.

Um refinamento adicional da situação pode ser visto neste exemplo na lista de discussão Lista de discussão de provedor de serviços de Internet do FreeBSD:

    > we provide the secondary MX for a customer. The customer connects to
    > our services several times a day automatically to get the mails to
    > his primary MX (We do not call his site when a mail for his domains
    > arrived). Our sendmail sends the mailqueue every 30 minutes. At the
    > moment he has to stay 30 minutes online to be sure that all mail is
    > gone to the primary MX.
    >
    > Is there a command that would initiate sendmail to send all the mails
    > now? The user has not root-privileges on our machine of course.

    In the privacy flags section of sendmail.cf, there is a
    definition Opgoaway,restrictqrun

    Remove restrictqrun to allow non-root users to start the queue processing.
    You might also like to rearrange the MXs. We are the 1st MX for our
    customers like this, and we have defined:

    # If we are the best MX for a host, try directly instead of generating
    # local config error.
    OwTrue

    That way a remote site will deliver straight to you, without trying
    the customer connection.  You then send to your customer.  Only works for
    hosts, so you need to get your customer to name their mail
    machine customer.com as well as
    hostname.customer.com in the DNS.  Just put an A record in
    the DNS for customer.com.

## 28.6. Tópicos Avançados

Esta seção aborda tópicos mais envolvidos, como configuração de email e configuração de email para um domínio inteiro.

### 28.6.1. Configuração básica

Fora da caixa, pode-se enviar email para hosts externos desde que /etc/resolv.conf esteja configurado ou a rede tenha acesso a um servidor DNS. Para ter um email entregue ao MTA em um host FreeBSD, siga um destes procedimentos:

- Execute um servidor DNS para o domínio.

- Tenha o email entregue diretamente para o FQDN para a máquina.

Para que o email seja entregue diretamente a um host, ele deve ter um endereço IP estático permanente, não um endereço IP dinâmico. Se o sistema estiver protegido por um firewall, ele deverá ser configurado para permitir o tráfego SMTP. Para receber mensagens diretamente em um host, um desses dois deve ser configurado:

- Certifique-se de que o registro MX de menor numeração no DNS aponte para o endereço IP estático do host.

- Certifique-se de que não exista nenhuma entrada MX no DNS para o host.

Qualquer um dos itens acima permitirá que o correio seja recebido diretamente no host.

Tente isto:

    # hostname
    example.FreeBSD.org
    # host example.FreeBSD.org
    example.FreeBSD.org has address 204.216.27.XX

Neste exemplo, as mensagens enviadas diretamente para yourlogin@exemplo.FreeBSD.org devem funcionar sem problemas, supondo que o Sendmail esteja sendo executado corretamente em `example.FreeBSD.org`.

Para este exemplo:

    # host example.FreeBSD.org
    example.FreeBSD.org has address 204.216.27.XX
    example.FreeBSD.org mail is handled (pri=10) by nevdull.FreeBSD.org

Todas as mensagens enviadas para `exemple.FreeBSD.org` serão coletadas no `hub` sob o mesmo nome de usuário, em vez de serem enviadas diretamente para o seu host.

As informações acima são tratadas pelo servidor DNS. O registro DNS que possui as informações de roteamento de email é a entrada MX. Se não existir nenhum registro MX, os emails serão entregues diretamente ao host por meio de seu endereço IP.

A entrada MX de `freefall.FreeBSD.org` uma vez foi assim:

    freefall		MX	30	mail.crl.net
    freefall		MX	40	agora.rdrop.com
    freefall		MX	10	freefall.FreeBSD.org
    freefall		MX	20	who.cdrom.com

`freefall` teve muitas entradas MX. O menor número MX é o host que recebe email diretamente, se disponível. Se não for acessível por algum motivo, o próximo host de número mais baixo aceitará as mensagens temporariamente e as transmitirá quando um host de número inferior for disponibilizado.

Sites alternativos de MX devem ter conexões de Internet separadas para serem mais úteis. Seu ISP pode fornecer este serviço.

### 28.6.2. Email para um Domínio

Ao configurar um MTA para uma rede, qualquer mensagem enviada para hosts em seu domínio deve ser desviada para o MTA para que os usuários possam receber seus emails no servidor de email principal.

Para tornar a vida mais fácil, uma conta de usuário com o mesmo username deve existir tanto no MTA como no sistema com o MUA. Use adduser(8) para criar as contas de usuário.

O MTA deve ser o servidor de mensagens designado para cada estação de trabalho na rede. Isso é feito na configuração DNS com um registro MX:

    example.FreeBSD.org	A	204.216.27.XX		; Workstation
    			MX	10 nevdull.FreeBSD.org	; Mailhost

Isso redirecionará o email para a estação de trabalho para o MTA, não importa onde o registro A aponta. O email é enviado para o host MX.

Isso deve ser configurado em um servidor DNS. Se a rede não executar seu próprio servidor DNS, fale com o ISP ou provedor DNS.

A seguir, um exemplo de hospedagem de email virtual. Considere um cliente com o domínio `customer1.org`, onde todas as mensagens para `customer1.org` devem ser enviadas para `mail.myhost.com`. A entrada DNS deve ficar assim:

    customer1.org		MX	10	mail.myhost.com

Um registro `A`> não é necessário em `customer1.org` para que seja enviado emails para esse domínio. No entanto, um `ping` em `customer1.org` não funcionará, a menos que exista um registro `A` para ele.

Diga ao MTA quais domínios e/ou nomes de host que ele deve aceitar emails. Qualquer um dos itens a seguir funcionará para o Sendmail:

- Adicione os hosts ao /etc/mail/local-host-names ao usar `FEATURE (use_cw_file)`.

- Adicione uma linha `Cwyour.host.com` em /etc/sendmail.cf.

## 28.7. Configurando Apenas Envio

Há muitos casos em que muitas instâncias podem querer enviar email através de um relay. Alguns exemplos são:

- O computador é uma máquina desktop que precisa usar programas como mail(1), usando o relay de email do ISP.

- O computador é um servidor que não manipula emails localmente, mas precisa passar todos os emails para um relay para processamento.

Embora qualquer MTA seja capaz de preencher esse nicho específico, pode ser difícil configurar adequadamente um MTA com todos os recursos apenas para lidar com o descarregamento de email. Programas como Sendmail e Postfix são um exagero para esse uso.

Além disso, um acordo típico de serviço de acesso à Internet pode proibir a execução de um "servidor de email".

A maneira mais fácil de atender a essas necessidades é instalar o port mail/ssmtp:

    # cd /usr/ports/mail/ssmtp
    # make install replace clean

Uma vez instalado, o mail/ssmtp pode ser configurado em /usr/local/etc/ssmtp/ssmtp.conf:

    root=yourrealemail@example.com
    mailhub=mail.example.com
    rewriteDomain=example.com
    hostname=_HOSTNAME_

Use o endereço de email real para `root`. Insira a retransmissão de mensagens de saída do ISP no lugar de `mail.example.com`. Alguns ISPs chamam isso de "servidor de email de saída" ou "servidor SMTP".

Certifique-se de desativar o Sendmail, incluindo o serviço de envio de mensagens. Veja Desativar o Sendmail para detalhes.

mail/ssmtp tem algumas outras opções disponíveis. Consulte os exemplos em /usr/local/etc/ssmtp ou na página de manual do ssmtp para obter mais informações.

A configuração do ssmtp dessa maneira permite que qualquer software no computador que precise enviar mensagens funcione corretamente, sem violar a política de uso dos ISPs ou permitindo que o computador seja sequestrado para envio de spam.

## 28.8. Usando Email com uma Conexão Dialup

Ao usar um endereço IP estático, não é necessário ajustar a configuração padrão. Configure o nome do host para o nome da Internet designado e o Sendmail fará o resto.

Ao usar um endereço IP atribuído dinamicamente e uma conexão PPP de discagem à Internet, geralmente há uma caixa de correio no servidor de email do ISP. Neste exemplo, o domínio do ISP é `example.net`, o nome de usuário é `user`, o nome do host é `bsd.home`, e o ISP permitiu `relay.example.net` como um relay de email.

Para baixar emails da caixa de correio do ISP, instale um agente pela coleção de ports. O mail/fetchmail é uma boa escolha, pois suporta muitos protocolos diferentes. Normalmente, o ISP fornecerá POP. Ao usar o usuário PPP, o email pode ser baixado automaticamente quando uma conexão com a Internet é estabelecida com a seguinte entrada em /etc/ppp/ppp.linkup:

    MYADDR:
    !bg su user -c fetchmail

Ao usar o Sendmail para entregar emails em contas não locais, configure o Sendmail para processar a fila de mensagens assim que a conexão com a Internet for estabelecida. Para fazer isso, adicione esta linha após a entrada `fetchmail` acima em /etc/ppp/ppp.linkup:

      !bg su user -c "sendmail -q"

Neste exemplo, há uma conta para `user` em `bsd.home`. No diretório home de `user` em `bsd.home`, crie um .fetchmailrc que contenha esta linha :

    poll example.net protocol pop3 fetchall pass MySecret

Este arquivo não deve ter permissão de leitura para ninguém, exceto pelo `user`, pois contém a senha `MySecret`.

Para enviar emails com o cabeçalho correto `from:`, configure o Sendmail para usar user@example.net em vez de user@bsd.home e para enviar todos os emails através de `relay.example.net`, permitindo uma transmissão de email mais rápida.

O seguinte .mc deve ser suficiente:

    VERSIONID(`bsd.home.mc version 1.0')
    OSTYPE(bsd4.4)dnl
    FEATURE(nouucp)dnl
    MAILER(local)dnl
    MAILER(smtp)dnl
    Cwlocalhost
    Cwbsd.home
    MASQUERADE_AS(`example.net')dnl
    FEATURE(allmasquerade)dnl
    FEATURE(masquerade_envelope)dnl
    FEATURE(nocanonify)dnl
    FEATURE(nodns)dnl
    define(`SMART_HOST', `relay.example.net')
    Dmbsd.home
    define(`confDOMAIN_NAME',`bsd.home')dnl
    define(`confDELIVERY_MODE',`deferred')dnl

Consulte a seção anterior para obter detalhes sobre como converter esse arquivo no formato sendmail.cf. Não esqueça de reiniciar o Sendmail após atualizar o sendmail.cf.

## 28.9. Autenticação SMTP

Configurar a autenticação SMTP no MTA oferece vários benefícios. A autenticação SMTP adiciona uma camada de segurança ao Sendmail e fornece aos usuários móveis que alternam os hosts a capacidade de usar o mesmo MTA sem a necessidade de reconfigurar as configurações de seus clientes de email a cada vez.

1. Instale o security/cyrus-sasl2 da Coleção de Ports. Este port suporta várias opções de tempo de compilação. Para o método de autenticação SMTP demonstrado neste exemplo, certifique-se de que `LOGIN` não esteja desabilitado.

2. Depois de instalar o security/cyrus-sasl2, edite o /usr/local/lib/sasl2/Sendmail.conf, ou crie-o se ele não existir, e adicione a seguinte linha :

       pwcheck_method: saslauthd

3. Em seguida, instale o security/cyrus-sasl2-saslauthd e adicione a seguinte linha ao /etc/rc.conf:

       saslauthd_enable="YES"

   Finalmente, inicie o daemon saslauthd:

       # service saslauthd start

   Este daemon serve como um intermediário para o Sendmail autenticar no banco de dados do FreeBSD o passwd(5). Isso evita o trabalho de criar um novo conjunto de nomes de usuário e senhas para cada usuário que precise usar a autenticação SMTP e mantém a senha de login e email igual.

4. Em seguida, edite o /etc/make.conf e adicione as seguintes linhas:

       SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL
       SENDMAIL_LDADD=/usr/local/lib/libsasl2.so

   Essas linhas fornecem ao Sendmail as opções de configuração apropriadas para vincular ao cyrus-sasl2 em tempo de compilação. Certifique-se de que o cyrus-sasl2 tenha sido instalado antes de recompilar o Sendmail.

5. Recompile o Sendmail executando os seguintes comandos:

       # cd /usr/src/lib/libsmutil
       # make cleandir && make obj && make
       # cd /usr/src/lib/libsm
       # make cleandir && make obj && make
       # cd /usr/src/usr.sbin/sendmail
       # make cleandir && make obj && make && make install

   Esta compilação não deve ter nenhum problema se o /usr/src não foi alterado extensivamente e as bibliotecas compartilhadas necessárias estiverem disponíveis.

6. Depois que o Sendmail tenha sido compilado e reinstalado, edite o /etc/mail/freebsd.mc ou o arquivo local .mc. Muitos administradores optam por usar a saída de hostname(1) como o nome de .mc para exclusividade. Adicione estas linhas:

       dnl set SASL options
       TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl
       define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl

   Essas opções configuram os diferentes métodos disponíveis para que o Sendmail autentique usuários. Para usar um método diferente de pwcheck, consulte a documentação do Sendmail.

7. Finalmente, execute make(1) enquanto estiver em /etc/mail. Isso executará o novo .mc e criará um .cf chamado freebsd.cf ou o nome usado para o arquivo local .mc. Em seguida, execute `make install restart`, que copiará o arquivo para o sendmail.cf, e reinicie corretamente o Sendmail. Para mais informações sobre este processo, consulte /etc/mail/Makefile.

Para testar a configuração, use um MUA para enviar uma mensagem de teste. Para investigações posteriores, defina o `LogLevel` do Sendmail como `13` e verifique o /var/log/maillog para quaisquer erros.

Para mais informações, consulte autenticação SMTP.

## 28.10. Mail User Agents

Um MUA é um aplicativo usado para enviar e receber emails. À medida que o email "evolui" e se torna mais complexo, os MUAs estão se tornando cada vez mais poderosos e fornecem aos usuários maior funcionalidade e flexibilidade. A categoria `mail` da Coleção de Ports do FreeBSD contém numerosos MUAs. Eles incluem clientes de email gráficos como Evolution ou Balsa e clientes baseados em console, como mutt ou alpine.

### 28.10.1. `mail`

mail(1) é o MUA padrão instalado com o FreeBSD. É um MUA baseado em console que oferece a funcionalidade básica necessária para enviar e receber email em texto. Ele fornece suporte limitado a anexos e só pode acessar caixas de correio locais.

Embora o `mail` não suporte nativamente a interação com os servidores POP ou IMAP, essas caixas de correio podem ser baixadas para um arquivo mbox local usando um aplicativo como fetchmail.

Para enviar e receber email, execute `mail`:

    % mail

O conteúdo da caixa de correio do usuário em /var/mail é lido automaticamente pelo `mail`. Se a caixa de correio estiver vazia, o utilitário sairá com uma mensagem indicando que nenhum email foi encontrado. Se o email existir, a interface do aplicativo será iniciada e uma lista de mensagens será exibida. As mensagens são numeradas automaticamente, como pode ser visto no exemplo a seguir:

    Mail version 8.1 6/6/93.  Type ? for help.
    "/var/mail/marcs": 3 messages 3 new
    >N  1 root@localhost        Mon Mar  8 14:05  14/510   "test"
     N  2 root@localhost        Mon Mar  8 14:05  14/509   "user account"
     N  3 root@localhost        Mon Mar  8 14:05  14/509   "sample"

Agora as mensagens podem ser lidas digitando `t` seguido pelo número da mensagem. Este exemplo lê o primeiro email:

    & t 1
    Message 1:
    From root@localhost  Mon Mar  8 14:05:52 2004
    X-Original-To: marcs@localhost
    Delivered-To: marcs@localhost
    To: marcs@localhost
    Subject: test
    Date: Mon,  8 Mar 2004 14:05:52 +0200 (SAST)
    From: root@localhost (Charlie Root)

    This is a test message, please reply if you receive it.

Como visto neste exemplo, a mensagem será exibida com cabeçalhos completos. Para exibir novamente a lista de mensagens, pressione `h`.

Se o email exigir uma resposta, pressione as teclas `R` ou `r` no `mail`. `R` instrui o `mail` a responder apenas ao remetente do email, enquanto `r` responde a todos os outros destinatários da mensagem. Esses comandos podem ser sufixados com o número do email. Depois de digitar a resposta, o final da mensagem deve ser marcado por um único `.` em sua própria linha. Um exemplo pode ser visto abaixo:

    & R 1
    To: root@localhost
    Subject: Re: test

    Thank you, I did get your email.
    .
    EOT

Para enviar um novo email, pressione `m`, seguido pelo endereço de email do destinatário. Vários destinatários podem ser especificados separando cada endereço com o delimitador `,`. O assunto da mensagem pode então ser inserido, seguido pelo conteúdo da mensagem. O final da mensagem deve ser especificado colocando um único `.` em sua própria linha.

    & mail root@localhost
    Subject: I mastered mail

    Now I can send and receive email using mail ... :)
    .
    EOT

Enquanto estiver usando o `mail`, pressione `?` para exibir a ajuda a qualquer momento. Consulte mail(1) para obter mais detalhes sobre como usar o `mail`.

| O mail(1) não foi projetado para manipular anexos e, portanto, lida mal com eles. Novos MUAs lidam com anexos de uma maneira mais inteligente. Usuários que preferem usar `mail` podem preferir o port converters/mpack.

### 28.10.2. mutt

O mutt é um poderoso MUA, com muitos recursos, incluindo:

- A capacidade de enviar mensagens.

- Suporte PGP para assinatura digital e criptografia de email.

- Suporte MIME.

- Suporte Maildir.

- Altamente personalizável.

Consulte http://www.mutt.org para mais informações sobre o mutt.

O mutt pode ser instalado usando o port mail/mutt. Após o port ter sido instalado, o mutt pode ser iniciado com o seguinte comando:

    % mutt

O mutt irá automaticamente ler o conteúdo da caixa de correio do usuário em /var/mail. Se nenhum email for encontrado, o mutt aguardará os comandos do usuário. O exemplo abaixo mostra o mutt exibindo uma lista de mensagens:

Para ler um email, selecione-o usando as teclas de cursor e pressione `Enter`. Um exemplo de email exibido pelo mutt pode ser visto abaixo:

Semelhante ao mail(1), o mutt pode ser usado para responder apenas ao remetente da mensagem, bem como para todos os destinatários. Para responder apenas ao remetente do email, pressione `r`. Para enviar uma resposta de grupo ao remetente original e a todos os destinatários da mensagem, pressione `g`.

| Por padrão, o mutt usa o editor vi(1) para criar e responder emails. Cada usuário pode personalizar isso criando ou editando o .muttrc em seu diretório home e configurando a variável `editor` ou definindo a variável de ambiente `EDITOR`. Consulte http://www.mutt.org/ para obter mais informações sobre como configurar o mutt.

Para escrever uma nova mensagem de email, pressione `m`. Depois que um assunto válido foi dado, mutt iniciará o vi(1) para que o email possa ser escrito. Quando o conteúdo do email estiver completo, salve e saia do `vi`. O mutt será retomado, exibindo uma tela de resumo do email que será enviado. Para enviar o email, pressione `y`. Um exemplo da tela de resumo pode ser visto abaixo:

O mutt contém manuais extensos que podem ser acessados pela maioria dos menus pressionando `?`. A linha superior também exibe os atalhos de teclado, quando apropriado.

### 28.10.3. alpine

O alpine é destinado a um usuário iniciante, mas também inclui alguns recursos avançados.

| O alpine teve várias vulnerabilidades remotas descobertas no passado, que permitiam que atacantes remotos executassem código arbitrário como usuários no sistema local, pela ação de enviar um email especialmente preparado. Enquanto problemas conhecidos foram corrigidos, o código alpine foi escrito em um estilo inseguro e o FreeBSD Security Officer acredita que provavelmente há outras vulnerabilidades não descobertas. Os usuários instalam o alpine por sua conta e risco.

A versão atual do alpine pode ser instalada usando o port mail/alpine. Após a instalação do port, o alpine pode ser iniciado executando o seguinte comando:

    % alpine

A primeira vez que o alpine é executado, ele exibe uma página de saudação com uma breve introdução, bem como uma solicitação da equipe de desenvolvimento do alpine para enviar uma mensagem de email anônima para que eles saibam quantos usuários estão usando o seu cliente. Para enviar esta mensagem anônima, pressione `Enter`. Como alternativa, pressione `E` para sair da saudação sem enviar uma mensagem anônima. Um exemplo da página de saudação é mostrado abaixo:

O menu principal é então apresentado, o qual pode ser navegado usando as teclas de cursor. Esse menu principal fornece atalhos para a composição de novos emails, navegação em diretórios de email e administração de entradas do catálogo de endereços. Abaixo do menu principal, são mostrados os atalhos de teclado relevantes para executar funções específicas da tarefa em questão.

O diretório padrão aberto pelo alpine é o inbox. Para visualizar o índice da mensagem, pressione `I` ou selecione a opção MESSAGE INDEX mostrada abaixo:

O índice de mensagens mostra mensagens no diretório atual e pode ser navegado usando as teclas de cursor. As mensagens destacadas podem ser lidas pressionando `Enter`.

Na captura de tela abaixo, uma mensagem de exemplo é exibida pelo alpine. Atalhos de teclado contextuais são exibidos na parte inferior da tela. Um exemplo de um atalho é `r`, que diz ao MUA para responder à mensagem atual sendo exibida.

A resposta de um email pelo alpine é feita usando o editor pico, que é instalado por padrão com o alpine. O pico facilita a navegação na mensagem e é mais fácil de ser usado por usuários iniciantes do que o vi(1) ou mail(1). Quando a resposta estiver completa, a mensagem pode ser enviada pressionando `Ctrl`+`X`. O alpine solicitará confirmação antes de enviar a mensagem.

O alpine pode ser personalizado usando a opção SETUP no menu principal. Consulte http://www.washington.edu/alpine/ para mais informações.

## 28.11. Usando o fetchmail

O fetchmail é um cliente IMAP e POP completo. Ele permite que os usuários baixem automaticamente emails de servidores IMAP e POP remotos e os salvem em caixas de correio locais, onde podem ser acessados mais facilmente. O fetchmail pode ser instalado usando o port mail/fetchmail e oferece vários recursos, incluindo:

- Suporte para os protocolos POP3, o APOP, o KPOP, o IMAP, o ETRN e o ODMR.

- Capacidade de encaminhar emails usando SMTP, que permite que a filtragem, o encaminhamento e aliases funcionem normalmente.

- Pode ser executado no modo daemon para verificar periodicamente novas mensagens.

- Pode buscar várias caixas de correio e encaminhá-las, com base na configuração, para diferentes usuários locais.

Esta seção explica alguns dos recursos básicos do fetchmail. Este utilitário requer uma configuração .fetchmailrc no diretório pessoal do usuário para que seja executado corretamente. Este arquivo inclui informações do servidor, bem como credenciais de login. Devido à natureza sensível do conteúdo deste arquivo, é aconselhável torná-lo legível apenas pelo usuário, com o seguinte comando:

    % chmod 600 .fetchmailrc

O seguinte .fetchmailrc serve como um exemplo para fazer o download de uma única caixa de correio de usuário usando POP. Ele diz ao fetchmail para se conectar ao `example.com` usando um nome de usuário `joesoap` e uma senha de `XXX`. Este exemplo pressupõe que o usuário `joesoap` exista no sistema local.

    poll example.com protocol pop3 username "joesoap" password "XXX"

O próximo exemplo conecta-se a vários servidores POP e IMAP e redireciona para diferentes nomes de usuários locais quando aplicável:

    poll example.com proto pop3:
    user "joesoap", with password "XXX", is "jsoap" here;
    user "andrea", with password "XXXX";
    poll example2.net proto imap:
    user "john", with password "XXXXX", is "myth" here;

fetchmail pode ser executado no modo daemon executando-o com `-d`, seguido pelo intervalo (em segundos) que o fetchmail deve pesquisar servidores listados em .fetchmailrc. O exemplo a seguir configura o fetchmail para pesquisar a cada 600 segundos:

    % fetchmail -d 600

Mais informações sobre o fetchmail podem ser encontradas em http://www.fetchmail.info/.

## 28.12. Usando o procmail

O procmail é um poderoso aplicativo usado para filtrar mensagens recebidas. Ele permite que os usuários definam "regras" que podem ser correspondidas aos emails recebidos para executar funções específicas ou para redirecionar o email para caixas de correio alternativas ou endereços de email. O procmail pode ser instalado usando o port mail/procmail. Uma vez instalado, ele pode ser diretamente integrado na maioria dos MTAs. Consulte a documentação do MTA para mais informações. Alternativamente, procmail pode ser integrado adicionando a seguinte linha a um .forward no diretório pessoal do usuário:

    "|exec /usr/local/bin/procmail || exit 75"

A seção a seguir exibe algumas regras básicas do procmail, além de breves descrições do que elas fazem. As regras devem ser inseridas em um .procmailrc, que deve residir no diretório pessoal do usuário.

A maioria dessas regras pode ser encontrada em procmailex(5).

Para encaminhar todos os emails de user@example.com para um endereço externo de goodmail@example2.com:

    :0
    * ^From.*user@example.com
    ! goodmail@example2.com

Para encaminhar todos os emails com menos de 1000 bytes para um endereço externo de goodmail@example2.com:

    :0
    * < 1000
    ! goodmail@example2.com

Para enviar todas as mensagens enviadas para alternate@example.com para uma caixa de correio chamada alternate:

    :0
    * ^TOalternate@example.com
    alternate

Para enviar todas as mensagens com um assunto de "Spam" para /dev/null:

    :0
    ^Subject:.*Spam
    /dev/null

Uma receita útil que analisa listas de discussão `do FreeBSD.org` e coloca cada lista em sua própria caixa de correio:

    :0
    * ^Sender:.owner-freebsd-\/[^@]+@FreeBSD.ORG
    {
    	LISTNAME=${MATCH}
    	:0
    	* LISTNAME??^\/[^@]+
    	FreeBSD-${MATCH}
    }

Última alteração em: 9 de março de 2024 por Danilo G. Baio

Anterior
Início
Próximo