Ferramentas de Usuário

Ferramentas de Site


pt:buster:email:imap:dovecot

5.1.1 Servidor IMAP(S): Dovecot

Instalação de um servidor email com suporte para protocolo IMAPS.

Instalação

<sxh bash; highlight: [1]> root@server:~# apt install dovecot-imapd </sxh>

Configuração

Toda a configuração será guardada em diferentes ficheiros na diretoria /etc/dovecot/conf.d. Cada ficheiro de configuração é responsável por uma funcionalidade do dovecot.

O servidor de email dovecot só aceita ligações encriptadas via TLS (Transport Layer Security) ou SSL (Secure Sockets Layer). Ambos necessitam de certificados digitais.

Os certificados SSL para o dovecot são gerados automaticamente durante a instalação. No entanto, podemos utilizar os nosso próprios 3.5.1 Certificados Auto-Assinados ou os certificados 3.5.2 Certificados LetsEncrypt previamente gerados:

<sxh; highlight: [7,16-22]; title: /etc/dovecot/conf.d/10-ssl.conf> ## ## SSL settings ##

# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt> #ssl = no ssl = required

# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before # dropping root privileges, so keep the key file unreadable by anyone but # root. Included doc/mkcert.sh can be used to easily generate self-signed # certificate, just make sure to update the domains in dovecot-openssl.cnf #ssl_cert = </etc/dovecot/dovecot.pem #ssl_key = </etc/dovecot/private/dovecot.pem

# Certificados Let's Encrypt: #ssl_cert = </etc/letsencrypt/live/home.example.com/cert.pem #ssl_key = </etc/letsencrypt/live/home.example.com/privkey.pem

# Certificados auto-assinados: ssl_cert = </etc/ssl/certs/server.crt ssl_key = </etc/ssl/private/server.key

# […] </sxh>

Desativar ligações IMAP não seguras:

<sxh; highlight: [4-5]; title: /etc/dovecot/conf.d/10-master.conf> # […] service imap-login {

inet_listener imap {
  #port = 143
  port = 0
}

# […] </sxh>

A localização das caixas de correio também deve ser indicada, para evitar ambiguidades. Neste caso estão numa sub-directoria na directoria home de cada utilizador chamada “Maildir”:

<sxh; highlight: [31-32]; title: /etc/dovecot/conf.d/10-mail.conf> # […] ## ## Mailbox locations and namespaces ##

# Location for users' mailboxes. The default is empty, which means that Dovecot # tries to find the mailboxes automatically. This won't work if the user # doesn't yet have any mail, so you should explicitly tell Dovecot the full # location. # # If you're using mbox, giving a path to the INBOX file (eg. /var/mail/%u) # isn't enough. You'll also need to tell Dovecot where the other mailboxes are # kept. This is called the “root mail directory”, and it must be the first # path given in the mail_location setting. # # There are a few special variables you can use, eg.: # # %u - username # %n - user part in user@domain, same as %u if there's no domain # %d - domain part in user@domain, empty if there's no domain # %h - home directory # # See doc/wiki/Variables.txt for full list. Some examples: # # mail_location = maildir:~/Maildir # mail_location = mbox:~/mail:INBOX=/var/mail/%u # mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n # # <doc/wiki/MailLocation.txt> # #mail_location = mbox:~/mail:INBOX=/var/mail/%u mail_location = maildir:~/Maildir

# […] </sxh>

O máximo de ligações permitidas por endereço IP pode ser aumentado, caso se preveja a necessidade de efetuar muitas ligações a partir de um único endereço.

<sxh; highlight: [9-10]; title: /etc/dovecot/conf.d/20-imap.conf> # […]

protocol imap {

# Space separated list of plugins to load (default is global mail_plugins).
mail_plugins = $mail_plugins
# Maximum number of IMAP connections allowed for a user from each IP address.
# NOTE: The username is compared case-sensitively.
#mail_max_userip_connections = 10
mail_max_userip_connections = 20

}

# […] } […] </sxh>

Se existirem clientes mais antigos como o Outlook Express (Windows XP) ou o Microsoft Mail (Windows Vista), será necessário acrescentar o mecanismo de autenticação login, para além do plain. Apesar de estes serem mecanismos não encriptados, a opção disable_plaintext_auth = yes garante que estes só serão aceites através de uma ligação encriptada.

<sxh; highlight: [12,20]; title: /etc/dovecot/conf.d/10-auth.conf> # […]

## ## Authentication processes ##

# Disable LOGIN command and all other plaintext authentications unless # SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP # matches the local IP (ie. you're connecting from the same computer), the # connection is considered secure and plaintext authentication is allowed. # See also ssl=required setting. disable_plaintext_auth = yes

# […]

# Space separated list of wanted authentication mechanisms: # plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp skey # gss-spnego # NOTE: See also disable_plaintext_auth setting. auth_mechanisms = plain login

# […] </sxh>

A configuração pode ser verificada com o comando dovecot -n:

<sxh bash; highlight: [1]> root@server:~# dovecot -n # 2.2.27 (c0f36b0): /etc/dovecot/dovecot.conf # Pigeonhole version 0.4.16 (fed8554) # OS: Linux 4.9.0-3-amd64 x86_64 Debian 9.0 auth_mechanisms = plain login mail_location = maildir:~/Maildir namespace inbox {

inbox = yes
location =
mailbox Drafts {
  special_use = \Drafts
}
mailbox Junk {
  special_use = \Junk
}
mailbox Sent {
  special_use = \Sent
}
mailbox "Sent Messages" {
  special_use = \Sent
}
mailbox Trash {
  special_use = \Trash
}
prefix =

} passdb {

driver = pam

} protocols = “ imap” ssl = required ssl_cert = </etc/ssl/certs/server.crt ssl_key = # hidden, use -P to show it userdb {

driver = passwd

} protocol imap {

mail_max_userip_connections = 20

} </sxh>

A arborescência Maildir deverá ser criada sob a home de cada utilizador. Para isso deve ser usado o comando maildirmake.dovecot por cada utilizador já criado.

O comando abaixo muda temporariamente a identidade do utilizador corrente para um utilizador “fribeiro” e cria a arborescência Maildir na home desse utilizador. Este comando deve ser repetido para cada utilizador já existente:

<sxh bash; highlight: [1]> root@server:~# su - fribeiro -c 'maildirmake.dovecot ~/Maildir' </sxh>

Esta arborescência deve também ser criada sob a diretoria /etc/skel. O conteúdo de /etc/skel é utilizado como modelo para a directoria home dos utilizadores a serem criados futuramente. Assim, quando forem criados novos utilizadores, a arborescência Maildir será criada automaticamente:

<sxh bash; highlight: [1]> root@server:~# maildirmake.dovecot /etc/skel/Maildir </sxh>

Finalmente, reiniciar o servidor:

<sxh bash; highlight: [1]> root@server:~# systemctl restart dovecot </sxh>

Verificação

Verificar o serviço imap para endereços locais:

<sxh bash; highlight: [1,6,8,16]> root@server:~# telnet 127.0.0.1 imap Trying 127.0.0.1… Connected to 127.0.0.1. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN] Dovecot ready. a001 login fribeiro MyPassword a001 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE] Logged in a002 examine inbox * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) * OK [PERMANENTFLAGS ()] Read-only mailbox. * 0 EXISTS * 0 RECENT * OK [UIDVALIDITY 1498137163] UIDs valid * OK [UIDNEXT 1] Predicted next UID a002 OK [READ-ONLY] Examine completed (0.000 + 0.000 secs). a003 logout * BYE Logging out a003 OK Logout completed (0.000 + 0.000 secs). Connection closed by foreign host. </sxh>

A partir de outro sistema, verificar que são recusadas as ligações IMAP simples sem TLS por serem consideradas inseguras, uma vez que enviam as passwords em texto simples:

<sxh bash; highlight: [1,6,9]> fribeiro@laptop:~$ telnet 192.168.1.100 imap Trying 192.168.1.100… Connected to 192.168.1.100. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS LOGINDISABLED] Dovecot ready. a001 login fribeiro password * BAD [ALERT] Plaintext authentication not allowed without SSL/TLS, but your client did it anyway. If anyone was listening, the password was exposed. a NO [PRIVACYREQUIRED] Plaintext authentication disallowed on non-secure (SSL/TLS) connections. a002 logout * BYE Logging out a002 OK Logout completed. Connection closed by foreign host. </sxh>

No entanto, as ligações IMAPS deverão ser aceites a partir de qualquer sistema:

<sxh bash; highlight: [1,77,79,87]> fribeiro@laptop:~# openssl s_client -connect 192.168.1.100:imaps CONNECTED(00000003) depth=0 C = PT, ST = Portugal, O = My Home Lan, CN = *.home.lan verify error:num=18:self signed certificate verify return:1 depth=0 C = PT, ST = Portugal, O = My Home Lan, CN = *.home.lan verify return:1 — Certificate chain 0 s:/C=PT/ST=Portugal/O=My Home Lan/CN=*.home.lan

 i:/C=PT/ST=Portugal/O=My Home Lan/CN=*.home.lan

— Server certificate —–BEGIN CERTIFICATE—– MIIDEjCCAfoCCQC5Av+vK4F/cjANBgkqhkiG9w0BAQsFADBLMQswCQYDVQQGEwJQ VDERMA8GA1UECAwIUG9ydHVnYWwxFDASBgNVBAoMC015IEhvbWUgTGFuMRMwEQYD VQQDDAoqLmhvbWUubGFuMB4XDTE3MDYyMjEzMDYxN1oXDTE4MDYyMjEzMDYxN1ow SzELMAkGA1UEBhMCUFQxETAPBgNVBAgMCFBvcnR1Z2FsMRQwEgYDVQQKDAtNeSBI b21lIExhbjETMBEGA1UEAwwKKi5ob21lLmxhbjCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAKBV4aF2V0KzCf09rVWr0eDq+yp+jbGWYc3THrmasEhLho0b sDx4CxQM2x7y0Ywkbs+1DetiFT+cjVbdTiqp6xvOQ4dLcKxnqSvahuVy+oY7OosR VW+7ZhDpO0IcFWqhGG0P3s6sErbhFXER3BP+uBYL+6rUxO44C8uCE8EVPHFDOdGk r6+wDy92Xr+HBbET4YjKWKBVSN+So4eTOmeW5nkuujnT3S1VSWYNagoOBd7J79GI BAtocveKBmbxwa2ecqmHQ7RQdqQUHx0Q4x5eLE097tf07BOdYt6sT8L7895OFU 7JQ132fm0hn6lg2eCoG/VnMDqKT/BgDqRqNCHE0CAwEAATANBgkqhkiG9w0BAQsF AAOCAQEAByk4TGQ2W+wHKzy5f0t30R23nufgLKmgkJpHxUnAWB/qc7dk5O4eBO2F NWyL5Jt/B6nL1Vf6H3Y/SG+OiLho5hwSjshGOmPlURyqGTMG8VuUYxYitgBzNOp/ /fEJ6pa3Id89W6NZ+UjKwZxCGHA2/O9t7+Gc9mvnGqYTtEiombSiEnTzubhH1od5 ijMAvLSJu1ZSJmT05XEtH74m4CK5ft01LsLVylf1cQ6iZPNpWGbmFLok3khLorpW 3FdKvnU3KGx1B/fCpE14RuHqogiFSTC8kQhCpeTJq8ReZbMG72bMrCXCVSB8vpiH LEU1QQ7SbhlUE0VEz1w7N3nj6QexuQ== —–END CERTIFICATE—– subject=/C=PT/ST=Portugal/O=My Home Lan/CN=*.home.lan issuer=/C=PT/ST=Portugal/O=My Home Lan/CN=*.home.lan — No client certificate CA names sent Peer signing digest: SHA512 Server Temp Key: ECDH, P-384, 384 bits — SSL handshake has read 1480 bytes and written 334 bytes Verification error: self signed certificate — New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384 Session-ID: 640776EE6EF4A3093038CEEF0293EA2A4596FA4762D905EAD94D45CCE368D7BA Session-ID-ctx: Master-Key: 9972DB3D88FB643D81DB65EF131FFEBF4DC94B828D550F40D4804ED2A1B18B6BEA5594A37CFB0AB42A27D669CD51B033 PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 7200 (seconds) TLS session ticket: 0000 - a9 91 47 56 a3 4f f9 74-08 b1 8d 9d b2 e8 18 67 ..GV.O.t…….g 0010 - 45 e3 07 44 2b 21 f9 f8-f7 78 95 ef 0a 77 28 9d E..D+!…x…w(. 0020 - 4f 29 1b 8a bc 2e d6 fc-09 a6 63 ae b6 09 70 19 O)……..c…p. 0030 - f6 be da bd cf 56 9c c9-a9 5b 5d eb 60 d8 69 cc …..V…[].`.i. 0040 - 29 29 89 68 59 78 04 11-62 f1 2b 47 dc 07 5a 23 )).hYx..b.+G..Z# 0050 - 34 dd 97 18 9a 91 f4 0a-e4 eb 94 d0 1f 6e 63 fb 4…………nc. 0060 - b0 8d f1 48 cf 32 61 e7-92 3f 47 91 bf a1 48 da …H.2a..?G…H. 0070 - 1a 9b 2e a3 69 8f 25 b0-31 4f ac bf 1b 81 f9 14 ….i.%.1O…… 0080 - bb e0 6b 7e 7c 9b 76 24-f4 17 42 e6 65 5e 16 ea ..k~|.v$..B.e^.. 0090 - 50 c8 15 eb ef 6a f9 fb-d9 88 0d 82 a7 62 bf c3 P….j…….b.. Start Time: 1498137742 Timeout : 7200 (sec) Verify return code: 18 (self signed certificate) Extended master secret: yes — * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN] Dovecot ready. a001 login fribeiro MyPassword a001 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE] Logged in a002 examine inbox * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) * OK [PERMANENTFLAGS ()] Read-only mailbox. * 0 EXISTS * 0 RECENT * OK [UIDVALIDITY 1498137163] UIDs valid * OK [UIDNEXT 1] Predicted next UID a002 OK [READ-ONLY] Examine completed (0.000 + 0.000 secs). a003 logout * BYE Logging out a003 OK Logout completed (0.000 + 0.000 secs). closed </sxh> ===== Configuração clientes ===== Como verificação final poderá ser criada uma conta num cliente email, como o Thunderbird: deverá ser seleccionado protocolo IMAP, a ligação requer TLS (porta 143) ou SSL (porta 993) e o endereço será o do servidor (192.168.1.100 ou mail.home.lan, se tiver sido configurado um 3.1.3 Servidor DNS Local para a rede local). Se for configurado o acesso sem TLS ou SSL, o acesso será negado: ==== Certificados Auto-assinados ==== Dado que os certificados são auto-assinados, os clientes email alertarão para o facto de não conhecerem a autoridade de certificação. Alerta para a utilização de um certificado inválido Uma verificação deverá indicar que o certificado utilizado é realmente o que pretendemos: Verificação do conteúdo do certificado Uma vez verificado, o certificado poderá ser acrescentado à lista de excepções de segurança. ===== Referências ===== * Dovecot * Wikipedia: Imap * Wikipedia (en): Imap * OpenSSL * Wikipedia: OpenSSL * Wikipedia: TLS * Wikipedia (en): TLS * Securing Debian Manual, 5.6 Securing the mail service

pt/buster/email/imap/dovecot.txt · Última modificação em: 2020-08-02 20:10 (edição externa)

Excepto menção em contrário, o conteúdo neste wiki está sob a seguinte licença: CC Attribution-Noncommercial-Share Alike 4.0 International
CC Attribution-Noncommercial-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki