Translation(s): English - Italiano
Contents
- Visão Geral do Exim
- Instalação
- Configuração
-
Coias que você pode querer configurar
- TLS e autenticação
- Filtro SPF
- Listas negras de DNS
- Sub-endereçamento de e-mail (e ações adicionais do Gmail)
- Email sub-addressing (plus-signs as in Gmail)
- Instalar ferramentas de diagnóstico
- User authentication
- Spam scanning
- Exim access control lists (ACLs)
- Smarthost with Authentication
- DMARC Support
- For running a mailing list and ensuring all sent mail is DMARC compliant
- Perguntas Frequentes dos usuários Exim4 no Debian
- Veja também
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 obtda do 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.
- 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.
- 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.
- 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
- Adicione no arquivo /etc/exim4/exim4.conf.template depois do .ifdef:
REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS ... .endif
- ifdef REQUIRE_PROTOCOL
- protocol = REQUIRE_PROTOCOL
- endif
- Adicione o seguinte após o .ifdef MAIN_TLS_ENABLE
- ifdef TLS_ON_CONNECT_PORTS
- tls_on_connect_ports = TLS_ON_CONNECT_PORTS
- endif
- ifdef TLS_ON_CONNECT_PORTS
- 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)
.endifEntão reinicie o exim.
Sub-endereçamento de e-mail (e ações adicionais do Gmail)
Email sub-addressing (plus-signs as in 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.
User authentication
Adding user authentication is possible using tools like Dovecot or sasl2-bin. For shell users who would like to use SASL and PAM for password authentication, that can setup this way:
#apt-get install sasl2-bin
Edit /etc/default/saslauthd to enable saslauth:
START=yes
Start the deamon:
#/etc/init.d/saslauthd start
In /etc/exim4/exim4.conf.template, uncomment the following lines to enable authentication 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}{}{}{*}}
.endifAdd exim to the sasl group:
#adduser Debian-exim sasl
Restart exim:
#/etc/init.d/exim4 restart
Test the connection using your username:
#swaks -a -tls -q AUTH -s localhost -au your_user Password:
Enable IMAP access by installing Courier-Imap or a similar MTA.
Spam scanning
There are several ways to detect spam.
Exim has default configuration for spamassassin (exim4-daemon-heavy required).
#apt-get install spamassassin
If you are using Debian Jessie or later (with systemd enabled by default), enable and start the service using systemctl;
#systemctl enable spamassassin.service
On earlier Debian releases, edit /etc/default/spamassassin ...
ENABLED=1
...and then start the daemon.
#/etc/init.d/spamassassin start
On all systems, edit /etc/exim4/exim4.conf.template as required for your system.
First, if necessary, set the 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
Next, edit the acl_check_data section to add suitable spam headers:
### 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:Note that the above configuration also adds an X-Spam-Report header in outgoing emails, thereby violating RFC2822. Some mail servers, in particular the Debian mailing-list server, simply drop such non-conformant emails. See also Debian bug 774553.
For more information about configuring spam filters, see the exim wiki.
To test your spamassassin setup follow spamassassin https://wiki.apache.org/spamassassin/TestingInstallation and gtube.
Exim access control lists (ACLs)
Exim provides flexible way to set access control list. For detailed information, see the ACL documentation on the exim wiki.
For example, if we are trying to deny all mail from three free email service providers (domain1.com, domain2.com, domain3.com) based on Received headers from the servers, we can use the following lines:
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 with Authentication
Start by reconfiguring exim4:
sudo dpkg-reconfigure exim4-config
Select mail sent by smarthost, no local mail (unless you are configuring local mail, which most folks at home do not need).
Then edit the file:
sudo vim /etc/exim4/passwd.client
And add the line:
*:login:password
Substituting the correct email account login name for login and corresponding password. Comments in the passwd.client file will provide additional information about configuration options.
Most ISPs offer multiple email accounts so it may make sense security wise to create an account just for utility use such as this. If your Linux host is ever compromised you will be glad you had a separate utility email account.
NOTE: you should also see the section https://wiki.debian.org/Exim#TLS_and_authentication (above) about configuring tls. You should never communicate with a smarthost without an encrypted connection.
DMARC Support
Note Trisquel 8 backports repository, exim4-daemon-heavy has DMARC support builtin, and is based on the version from ubuntu 18.04.
You will need to compile a modified version of exim, editing any of the EDITME configuration files in a patch like the one below. In your configuration, you will need to use the spf builtin to exim instead of the external one that Debian's default config ships with. Documentation of these features is in 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
Exim will also have new dependencies, libopendmarc2 and libspf2-2. And their dev version for building.
For running a mailing list and ensuring all sent mail is DMARC compliant
Mailman lists can easily be misconfigured to send out DMARC failing messages. If configured properly, it will not modify DKIM signatures, and send DMARC compliant mail without "munge from" set. However sometimes people misconfigure exim by using the default DKIM headers, which includes list-* headers, which sets up Mailman to send DMARC failing messages because it needs to modify them. Exim can do from munging in this case. This also allows Mailman lists to have content filtering turned on, and rely on exim to munge from when it happens, since Mailman isn't smart enough to only munge in that case. Related pages: 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
Requires DMARC support (see above section of this wiki).
Edit exim-conf.d/acl/30_exim4-config_check_rcpt, comment out a line
accept
hosts = +relay_from_hosts
control = submission/sender_retain
# commented out, we need dkim from localhost for dmarc
# control = dkim_disable_verifyAdd to your rcpt_local_acl
# for dmarc, we need to run spf beforehand warn spf = !pass log_message = spf not pass
Add to your data_local_acl. (note snippet below is cut short, view the raw wiki page to see the full section, the wiki syntax and exim config syntax conflict)
# 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.
