Translation(s): English - Italiano - Português Brasileiro


Visão Geral do Exim

O Exim é um agente de transporte de Mensagens (Message Transfer Agent - MTA).

Instalação

O Exim geralmente vem com a instalação padrão do Debian. Se você precisar usar o ACL e outros recursos, poderá ser necessário instalar o exim4-daemon-heavy

#apt-get install exim4-daemon-heavy

Configuração

O arquivo README.Debian.gz incluído nos pacotes exim4 detalha exaustivamente a configuração do estilo Debian.

#zless /usr/share/doc/exim4-config/README.Debian.gz

Geralmente, os pacotes Debian Exim 4 são configurados através do debconf. A instalação solicita perguntas durante a instalação do pacote e sua configuração inicial é criada a partir de suas respostas. Você pode repetir o processo de configuração a qualquer momento chamando:

 dpkg-reconfigure exim4-config

Apesar da configuração padrão ser estendida um pouco a partir do original a montante, é provável que você precise alterar manualmente a configuração do Exim com um editor, se você pretende fazer algo que não é coberto pela configuração automatizada do debconf. Nunca foi o intenção dos pacotes de oferecer todos os métodos de configuração possíveis através de debconf.

Existem três maneiras de configurar o exim4. O primeiro é um único arquivo monolítico, o segundo é um arquivo dividido e o terceiro é o seu próprio arquivo.

O arquivo de configuração é gerado a partir desses arquivos de configuração usando o comando (sim, ele possui .conf no nome)

update-exim4.conf

Após o qual você deve reiniciar o exim4 com algo como

service exim4 restart

Arquivo único de configuração do Exim4

Se você selecionar esta opção no debconf, a configuração será gerada a partir do arquivo /etc/exim4/exim4.conf.template.

O arquivo padrão é rico em recursos que podem ser ativados e controlados apenas definindo os valores de várias macros.

Aliás, o arquivo /etc/exim4/exim4.conf.localmacros será lido primeiro, o que o torna o local ideal para colocar as macros que você desejar definir. Usando esse arquivo, você pode controlar vários recursos (DKIM, por exemplo) e ainda obter os benefícios de não tocar nos arquivos fornecidos pelo Debian, buscando ter atualizações mais perfeitas.

Dividir o Arquivo

Nesses cenários, a configuração é dividida em vários arquivos menores na pasta /etc/exim4/conf.d/, que são juntados em um arquivo para você pelo comando update-exim4.conf. Cada seção do arquivo de configuração possui seu próprio subdiretório e os arquivos são concatenados em ordem alfabética. Como tal, provavelmente é uma boa ideia que seus arquivos personalizados sejam nomeados como 00_exim4-my-config, para que sejam incluídos primeiro.

Esse modo de operação permite que suas próprias seções de configuração sejam inseridas em qualquer local no arquivo de configuração final, sem tocar em nenhum dos arquivos fornecidos pelo pacote. A ideia é que as atualizações se tornem consistentes.

Seu próprio arquivo

Simplesmente coloque seu próprio arquivo em /etc/exim/exim4.conf e o exim o usará literalmente.

Para ter algo para começar, você pode usar como base o /etc/exim4/exim4.conf.template gerado na execução do update-exim4.conf --keepcomments --output /etc/exim4/exim4.conf ou usar a configuração padrão do upstream no arquivo /usr/share/doc/exim4-base/examples/example.conf.gz.

Você perderá toda a magia obtida pelo empacotamento, portanto, você precisa estar familiarizado com o Exim para criar uma configuração realmente funcional.

Observe que /etc/exim4/exim4.conf é lido diretamente pelo exim4 toda vez que o exim cria uma nova thread de execução. Portanto, se você editá-lo no lugar, cada conexão smtp realmente lerá um arquivo de configuração diferente!

Localização da configuração gerada automaticamente

Para referência, o arquivo gerado pelo update-exim4.conf fica em /var/lib/exim4/config.autogenerated

Faça uma cópia do arquivo para outro lugar antes de editar!

Exemplo de configuração em arquivo único

Essa configuração foi testada em um servidor e deve ser adequada para uso interno:

#dpkg-reconfigure exim4-config

General type of mail configuration:  internet site; mail is sent and received directly using SMTP.
System mail name: yourdomain.com
IP-addresses to listen on for incomming SMTP connections: // leave blank
Other destinations for which mail is accepted: yourdomain.com
Domains to relay mail for: // leave blank
Machines to relay mail for: // leave blank
Keep number of DNS-queries minimal (Dial-on-Demand) ?: No
Delivery method for local mail: Maildir format in home directory
Split configuration into small files ? : No

Isso grava a configuração em /etc/exim4/update-exim4.conf.conf.

Coias que você pode querer configurar

TLS e autenticação

gerar um certificado local

Gere um certificado usando:

#bash /usr/share/doc/exim4-base/examples/exim-gencert

Isto gerará os arquivos exim.crt e exim.key em /etc/exim4/

Em vez de gerar um certificado, você pode simplesmente copiar os certificados que você comprou ou gerou anteriormente.

Edite /etc/exim4/exim4.conf.localmacros adicionando a seguinte linha:

MAIN_TLS_ENABLE = yes

Como em qualquer alteração na configuração, execute update-exim4.conf e reinicie o exim (service exim4 restart).

comunicação com um smarthost

Se, como a maioria dos usuários domésticos, você não estiver executando um servidor da Internet, mas estiver usando contas de email de um ISP ou de outra empresa (por exemplo, gmail, hotmail, yahoo mail, etc.), será necessário comunicar com o servidor smtp dele para enviar email.

Toda empresa parece configurar seu servidor de maneira diferente e impõe restrições diferentes sobre como você pode enviar e-mails. Isso dificulta a descrição da configuração do Exim4 em um caso geral. Adicionar TLS torna as coisas ainda mais complicadas. No entanto, você deve sempre usar TLS (se disponível) para que seu login seja enviado criptografado.

Vou descrever uma configuração que deve funcionar na maioria dos casos, quando você envia emails usando uma única conta para um único smarthost.

  1. Selecione um das opções de smarthost quando rodar o dpkg-reconfigure exim4-config. Quando especificar o servidor inclua o nome do servidor e a porta (ex: exemplo.com::465). Note os dois pontos duplos.
  2. edite o /etc/exim4/passwd.client para usar a seguinte linha:
    • *:<username>:<user password> (e.g. *:mymail@exemplo.com:abdc1243)

    • Isto enviará todos e-mails do exim4 usando tais credenciais.
  3. Adicione as seguintes linhas ao /etc/exim4/exim4.conf.localmacros:
    • MAIN_TLS_ENABLE = 1
    • REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS = *
      • TLS_ON_CONNECT_PORTS = 465
      REQUIRE_PROTOCOL = smtps
  4. Adicione no arquivo /etc/exim4/exim4.conf.template depois do .ifdef:

REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS ... .endif

  1. Adicione o seguinte após o .ifdef MAIN_TLS_ENABLE
    • ifdef TLS_ON_CONNECT_PORTS
      • tls_on_connect_ports = TLS_ON_CONNECT_PORTS
    • endif
  2. rode update-exim4.conf seguido de um service exim4 restart

Filtro SPF

Isso é fornecido através da macro CHECK_RCPT_SPF, defina-a como true.

O Exim usa uma ferramenta auxiliar, que você precisará instalar ...

# apt-get install spf-tools-perl

Você deve então executar update-exim4.conf e reiniciar o exim.

Listas negras de DNS

Você pode configurar o exim para usar listas negras de DNS com a macro CHECK_RCPT_IP_DNSBLS:

CHECK_RCPT_IP_DNSBLS = zen.spamhaus.org

O comportamento padrão não é bloquear os hosts encontrados nas listas, mas apenas adicionar um cabeçalho de aviso. Para realmente bloquear os spammers, basta alterar 'warn' por 'deny' no seguinte bloco:

  .ifdef CHECK_RCPT_IP_DNSBLS
  warn # <--- deny
    dnslists = CHECK_RCPT_IP_DNSBLS
    add_header = X-Warning: $sender_host_address is listed at $dnslist_domain ($dnslist_value: $dnslist_text)
    log_message = $sender_host_address is listed at $dnslist_domain ($dnslist_value: $dnslist_text)
  .endif

Então reinicie o exim.

Sub-endereçamento de e-mail (e autenticação no Gmail)

Isso pode ser facilmente alcançado adicionando algo semelhante ao seguinte em uma das mais de suas definições de roteador

local_part_suffix = +* : -* : _*
local_part_suffix_optional

O exemplo acima fornceria user+example@domain.com, user-example@domain.com e user_example@domain.com para user@domain.com.

Da mesma forma, você pode usar um prefixo com essas opções com opções de nomes semelhantes

local_part_prefix = *+ : *- : *_
local_part_prefix_optional

O exemplo acima entregaria example+user@domain.com, example-user@domain.com e example_user@domain.com para user@domain.com.

Em ambos os casos, você pode usar a filtragem em partes, configurações espertas ou o seu cliente de email para modificar o endereço de e-mail da forma apropriada.

Instalar ferramentas de diagnóstico

#apt-get install swaks libnet-ssleay-perl

Teste a conexão:

$swaks -a -tls -q HELO -s localhost -au your_user -ap '<>'
 === Trying localhost:25...
 === Connected to localhost.
 <-  220 debianwb ESMTP Exim 4.76 Thu, 04 Aug 2011 14:22:02 +0600
  -> EHLO debianwb
 <-  250-debianwb Hello localhost [127.0.0.1]
 <-  250-SIZE 52428800
 <-  250-PIPELINING
 <-  250-STARTTLS
 <-  250 HELP
  -> STARTTLS
 <-  220 TLS go ahead
 === TLS started w/ cipher DHE-RSA-AES256-SHA
  ~> EHLO debianwb
 <~  250-debianwb Hello localhost [127.0.0.1]
 <~  250-SIZE 52428800
 <~  250-PIPELINING
 <~  250 HELP
  ~> QUIT
 <~  221 evie closing connection

Observe que acima estamos enviando uma senha vazia durante o teste com a ferramenta swaks.

Alguns ISPs podem bloquear a conexão com a porta 25 e também alguns clientes danificados insistem em usar o TLS na Porta 465.

Para suportá-los, altere /etc/default/exim4 para:

SMTPLISTENEROPTIONS='-oX 465:25 -oP /var/run/exim4/exim.pid'

Edite também /etc/exim4/exim4.conf.template:

#####################################################
### main/03_exim4-config_tlsoptions
#####################################################
tls_on_connect_ports=465
### main/03_exim4-config_tlsoptions
#################################

Cheque pkg-exim4.alioth.debian.org LEIA-ME (em inglês) para detalhes.

Autenticação do usuário

É possível adicionar autenticação do usuário usando ferramentas como Dovecot ou sasl2-bin. Para usuários do shell que preferem usar SASL e PAM para autenticação de senha, isso pode ser configurado da seguinte maneira:

#apt-get install sasl2-bin

Edite /etc/default/saslauthd para ativar o saslauth:

START=yes

Inicie o daemon:

#/etc/init.d/saslauthd start

Em /etc/exim4/exim4.conf.template, descomente as seguintes linhas para permitir a autenticação via saslauthd:

 plain_saslauthd_server:
    driver = plaintext
    public_name = PLAIN
    server_condition = ${if saslauthd{{$auth2}{$auth3}}{1}{0}}
    server_set_id = $auth2
    server_prompts = :
    .ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
    server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}}
    .endif

Adicione exim ao grupo sasl:

#adduser Debian-exim sasl

Reinicie o exim:

#/etc/init.d/exim4 restart

Teste a conexão usando seu nome de usuário:

#swaks -a -tls -q AUTH -s localhost -au your_user
Password:

Ative o acesso IMAP instalando Courier-Imap ou um Agente de Transporte e E-mail (Mail Transfer Agent - MTA) semelhante.

Detecção de spam

Existem várias maneiras de detectar spam.

O Exim possui uma configuração padrão para o spamassassin (exim4-daemon-heavy necessário).

#apt-get install spamassassin

Se você estiver usando o Debian Jessie ou posterior (com o systemd ativado por padrão), habilite e inicie o serviço usando systemctl;

#systemctl enable spamassassin.service

Em versões anteriores do Debian, edite /etc/default/spamassassin ...

ENABLED=1

... e após inicie o daemon do serviço.

#/etc/init.d/spamassassin start

Em todos os sistemas, edite /etc/exim4/exim4.conf.template conforme necessário para o seu sistema.

Primeiro, se necessário, defina o spamd_address:

# For spam scanning, there is a similar option that defines the interface to
# SpamAssassin. You do not need to set this if you are using the default, which
# is shown in this commented example. As for virus scanning, you must also
# modify the acl_check_data access control list to enable spam scanning.

spamd_address = 127.0.0.1 783

Em seguida, edite a seção acl_check_data para adicionar cabeçalhos de spam adequados:

### acl/40_exim4-config_check_data
#################################

# This ACL is used after the contents of a message have been received. This
# is the ACL in which you can test a message's headers or body, and in
# particular, this is where you can invoke external virus or spam scanners.

acl_check_data:
...
...
...
# See the exim docs and the exim wiki for more suitable examples.
#
# warn
#   spam = Debian-exim:true
#   add_header = X-Spam_score: $spam_score\n\
#             X-Spam_score_int: $spam_score_int\n\
#             X-Spam_bar: $spam_bar\n\
#             X-Spam_report: $spam_report

# put headers in all messages (no matter if spam or not)
 warn  spam = debian-spamd:true
     add_header = X-Spam-Score: $spam_score ($spam_bar)
     add_header = X-Spam-Report: $spam_report

# add second subject line with *SPAM* marker when message
# is over threshold
  warn  spam = debian-spamd
      add_header = Subject: ***SPAM (score:$spam_score)*** $h_Subject:

Observe que a configuração acima também adiciona no cabeçalho um X-Spam-Report nos e-mails enviados, violando o RFC2822. Alguns servidores de correio, em particular o servidor da lista de discussão Debian, simplesmente descartam esses e-mails fora do padrão. Veja também o bug do Debian ?DebianBug: 774553.

Para maiores informações sobre a configuração de filtros de spam, consulte o exim wiki.

Para testar sua configuração spamassassin, siga spamassassin https://wiki.apache.org/spamassassin/TestingInstallation e gtube.

Listas de Controle de Acesso Exim (Access Control Lists - ACLs)

O Exim fornece uma maneira flexível de definir a lista de controle de acesso. Para informações detalhadas, consulte a documentação da ACL na wiki do exim.

Por exemplo, se estamos tentando bloquear todos os emails de três provedores de serviços de email gratuitos (domain1.com, domain2.com, domain3.com) com base nos cabeçalhos Recebidos dos servidores, podemos usar as seguintes linhas:

deny
     condition = ${if match{$h_Received:}{\N\.(domain1|domain2|domain3)\.com\N}{yes}{no}}
     message = This mailbox does not support free e-mail services.

Smarthost com Autenticação

Comece reconfigurando o exim4:

sudo dpkg-reconfigure exim4-config

Selecione mail sent by smarthost, no local mail (a menos que você esteja configurando e-mail local, do qual a maioria das pessoas em casa não precisa).

Em seguida, edite o arquivo:

sudo vim /etc/exim4/passwd.client

E adicione a linha:

*:login:password

Substituindo o nome de login correto da conta de email por login e a correspondente senha. Os comentários no arquivo passwd.client fornecerão informações adicionais sobre as opções de configuração.

A maioria dos ISPs oferece várias contas de e-mail, portanto, pode ser sensato criar uma conta apenas para uso utilitário em segurança. Se seu host Linux for comprometido, você ficará satisfeito por ter uma conta de email utilitária separada.

NOTA: você também deve ver a seção https://wiki.debian.org/Exim#TLS_and_authentication (acima) sobre a configuração de tls. Você nunca deve se comunicar com um smarthost sem uma conexão criptografada.

Suporte ao DMARC

Nota O repositório de backports do Trisquel 8, exim4-daemon-heavy, possui suporte a DMARC embutido e é baseado na versão do ubuntu 18.04.

Você precisará compilar uma versão modificada do exim, editando algum dos arquivos de configuração EDITME em um patch como o abaixo. Na sua configuração, você precisará usar o spf compilado junto com o exim em vez do externo que a configuração padrão do Debian usa. A documentação desses recursos está em https://github.com/Exim/exim/blob/master/doc/doc-txt/experimental-spec.txt

@@ -459,9 +462,9 @@
 # installed on your system (www.libspf2.org). Depending on where it is installed
 # you may have to edit the CFLAGS and LDFLAGS lines.

-# EXPERIMENTAL_SPF=yes
-# CFLAGS  += -I/usr/local/include
-# LDFLAGS += -lspf2
+EXPERIMENTAL_SPF=yes
+CFLAGS  += -I/usr/local/include
+LDFLAGS += -lspf2

 # Uncomment the following lines to add SRS (Sender rewriting scheme) support.
 # You need to have libsrs_alt installed on your system (srs.mirtol.com).
@@ -474,10 +477,10 @@

 # Uncomment the following line to add DMARC checking capability, implemented
 # using libopendmarc libraries.  You must have SPF support enabled also.
-# EXPERIMENTAL_DMARC=yes
-# DMARC_TLD_FILE= /etc/exim/opendmarc.tlds
-# CFLAGS += -I/usr/local/include
-# LDFLAGS += -lopendmarc
+EXPERIMENTAL_DMARC=yes
+DMARC_TLD_FILE= /etc/exim4/opendmarc.tlds
+CFLAGS += -I/usr/local/include
+LDFLAGS += -lopendmarc

 # Uncomment the following lines to add Brightmail AntiSpam support. You need
 # to have the Brightmail client SDK installed. Please check the experimental

O Exim terá novas dependências, libopendmarc2 e libspf2-2. E a versão dev deles para compilação.

Para rodar uma lista de e-mails e garantir que todos os e-mails enviados seguem a especificação do DMARC

Listas de e-mail podem ser facilmente configuradas erradas para enviar mensagens fora do padrão DMARC. Se forem configuradas certo, a assinatura DKIM não será modificada, e os e-mails estarão no padrão do DMARC e o cabeçalho dos e-mails não será modificado. Quando fora do padrão é modificado o remetente para list-* , e faz aparecerem mensagens de falha do DMARC. Exim pode passar a mensagem a diante nesse caso. Isso permite o Mailman filtrar o conteúdo e o exim modifica o cabeçalho quando isso acontece, já que o Mailman não é esperto o suficiente para modificar o cabeçalho nesse caso. Páginas relacionadas: https://wiki.list.org/DOC/What%20can%20I%20do%20about%20members%20being%20unsubscribed%20by%20bounces%20of%20Yahoo%20user%27s%20posts%20for%20DMARC%20policy%20reasons%3F https://wiki.list.org/DEV/DMARC

Requer suporte ao DMARC (veja a seção acima desta página wiki).

Edite exim-conf.d/acl/30_exim4-config_check_rcpt, comentando fora uma linha

  accept
    hosts = +relay_from_hosts
    control = submission/sender_retain
    # commented out, we need dkim from localhost for dmarc
#    control = dkim_disable_verify

Adicione ao seu rcpt_local_acl

# for dmarc, we need to run spf beforehand
warn
  spf = !pass
  log_message = spf not pass

Adicione ao seu data_local_acl. (note que o trecho abaixo é um corte, veja a página bruta/fonte da wiki para ver a versão completa, a sintaxe da wiki e a configuração do exim tem conflitos de sintaxe)

# Here we do dmarc from: munging basically just like mailman does, as far as I can tell.
warn
  log_message = fsf-exim-dmarc-munging
  # for dmarc, we only care about messages that mailman sends out,
  # and in our case, that runs on the same machine.
  hosts = <; 127.0.0.1 ; ::1
  dmarc_status = reject:quarantine
  remove_header = Reply-to:
  # Add from: to reply-to:.
  add_header = Reply-to: ${if def:h_reply-to: {$h_reply-to:, }{}}$h_from:
  remove_header = From:
  # The main from munge is done in the next line
  # example input and outputs of it:
  # input:
  # List-Id: <libreplanet-discuss.libreplanet.org>
  # From: joe@wackydomain.com
  # output:
  # From: joe--- via <libreplanet-discuss@libreplanet.org>
  #
  # input:
  # List-Id: GNU emacs discussion
  #  <gnu-emacs.gnu.org>
  # From: "P xxx person" <aperson@wackydomain.com>
  # output:
  # From: "P xxx person" via GNU emacs discussion
  #   <gnu-emacs@gnu.org>
  #
  # how this works:
  # sg = subsitute globally, works like perl
  # first 2 sgs operate on original from header.
  # inner sg removes <.*, outer sg does s/@.*/---/.
  #
  # The final sg operates on list-id header, replaces the second to last . with an @
  # Note, this means if we ever use any list that uses 3+ part domain, this
  # will need adjusting, for example if we made somelist@savannah.gnu.org
  #
  # I imagine its possible for someone to have a crazy from: header and
  # screw this up somehow. 
  #
  # Note, at least for emacs mail client, when doing reply-all for these
  # messages, it uses reply-to: and to:, not the from:
  add_header = From: ${sg{${sg{$h_from:}{\N *<.*\N}{

{@.*}{---}} via ${sg{$h_list-id:}{\N\.([.]+\.[.]+)$\N}{@\$1}}

}}}

Perguntas Frequentes dos usuários Exim4 no Debian

Há uma página Wiki com ?Perguntas Frequentes do Exim4.


Veja também