03 - Protocolo IMAP (143)
video: https://youtu.be/... no frontmatter da nota.Protocolo IMAP (Internet Message Access Protocol) - Porta 143
O IMAP (Internet Message Access Protocol), padronizado na RFC 3501 (2003), substituindo a RFC 2060 (1996), é o protocolo da camada de aplicação que permite a clientes de e-mail acessarem e manipularem mensagens armazenadas em um servidor remoto. Diferente do POP3, que tradicionalmente baixa as mensagens para o dispositivo local e as remove do servidor, o IMAP mantém as mensagens centralizadas no servidor, permitindo acesso sincronizado de múltiplos dispositivos simultaneamente — característica essencial na era de smartphones, tablets e notebooks compartilhando a mesma caixa de entrada.
1. Características Fundamentais
| Atributo | Valor |
|---|---|
| RFC principal | RFC 3501 (IMAP4rev1), RFC 9051 (IMAP4rev2) |
| Porta padrão | TCP 143 (plain) |
| Porta segura | TCP 993 (IMAPS, implícito TLS) |
| Transporte | TCP, orientado a conexão |
| Estado | Mantém estado de sessão no servidor |
| Sincronização | Multi-device, mensagens ficam no servidor |
| Modelo | Cliente-Servidor, comandos tagged |
Por que IMAP em vez de POP3?
- Acesso Multi-dispositivo: Mensagens permanecem no servidor; smartphones, tablets e desktops veem o mesmo estado.
- Pastas server-side: Suporte a criação de pastas no servidor (
INBOX,Sent,Drafts,Trash,Junk), ao contrário do POP3 que só temINBOX. - Flags de mensagem: Suporte a marcadores como
\Seen,\Answered,\Flagged,\Deleted,\Draft. - Busca server-side: Permite buscar mensagens no servidor sem baixá-las (ex:
SEARCH UNSEEN FROM "alice"). - Acesso parcial: Permite baixar apenas cabeçalhos ou partes MIME específicas (ex: apenas texto sem anexos).
2. Estados da Sessão IMAP
Uma sessão IMAP passa por estados bem definidos, cada um com comandos permitidos distintos:
Comandos por Estado
| Estado | Comandos Permitidos |
|---|---|
| NON-AUTHENTICATED | CAPABILITY, NOOP, LOGOUT, STARTTLS, LOGIN, AUTHENTICATE |
| AUTHENTICATED | SELECT, EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, LIST, LSUB, STATUS, APPEND, LOGOUT |
| SELECTED | CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, UID |
Fluxo típico: NON-AUTHENTICATED → (LOGIN/AUTHENTICATE) → AUTHENTICATED → (SELECT) → SELECTED → (CLOSE/LOGOUT) → LOGOUT.
3. Comandos Essenciais
3.1 Capacidade e Login
C: A001 CAPABILITY
S: * CAPABILITY IMAP4rev1 STARTTLS AUTH=PLAIN AUTH=CRAM-MD5
S: A001 OK CAPABILITY completed
C: A002 LOGIN alice secretpass
S: A002 OK LOGIN completed
3.2 Seleção de Pasta e Busca
C: A003 SELECT INBOX
S: * 23 EXISTS
S: * OK [UIDVALIDITY 1234567890] UIDs valid
S: A003 OK [READ-WRITE] SELECT completed
C: A004 SEARCH UNSEEN FROM "boss@corp.com"
S: * SEARCH 15 18 22
S: A004 OK SEARCH completed
C: A005 FETCH 15:18 (FLAGS BODY.PEEK[HEADER.FIELDS (SUBJECT FROM DATE)])
S: * 15 FETCH (FLAGS (\Seen) BODY[HEADER.FIELDS (SUBJECT FROM DATE)] {78}
S: Subject: Re: Quarterly Report
S: From: boss@corp.com
S: )
S: A005 OK FETCH completed
3.3 Marcação e Exclusão
C: A006 STORE 15 +FLAGS (\Deleted)
S: A006 OK STORE completed
C: A007 EXPUNGE
S: * 15 EXPUNGE
S: A007 OK EXPUNGE completed
4. IMAPS e STARTTLS
Para proteger credenciais e conteúdo em trânsito, o IMAP utiliza TLS de duas formas:
IMAPS (Implicit TLS, Porta 993)
Conexão TCP já inicia em modo cifrado. Recomendado pela RFC 8314 (2017) como preferido para novos deployments. Exemplo:
openssl s_client -crlf -connect imap.exemplo.com:993
STARTTLS (Porta 143)
Conexão inicia em plaintext e o cliente envia comando STARTTLS para upgrade para TLS. Suportado por praticamente todos os servidores modernos (Dovecot, Cyrus, Courier) como alternativa de compatibilidade.
openssl s_client -crlf -starttls imap -connect imap.exemplo.com:143
5. Implementações e Softwares
| Software | Tipo | Licença | Destaque |
|---|---|---|---|
| Dovecot | Servidor | MIT/LGPLv2 | Mais usado (80%+ market share) |
| Cyrus IMAP | Servidor | BSD | Alto desempenho, Carnegie Mellon |
| Courier-IMAP | Servidor | GPL | Integrado com Courier-MTA |
| Microsoft Exchange | Servidor | Comercial | Requer Active Directory |
| Thunderbird | Cliente | MPL | Multiplataforma |
| Microsoft Outlook | Cliente | Comercial | Padrão corporativo |
| Apple Mail | Cliente | Proprietário | Padrão macOS/iOS |
Exemplo de Configuração Dovecot
# /etc/dovecot/dovecot.conf
protocols = imap imaps
ssl = required
ssl_cert = </etc/letsencrypt/live/imap.exemplo.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/imap.exemplo.com/privkey.pem
ssl_min_protocol = TLSv1.2
mail_location = maildir:~/Maildir
service imap-login {
inet_listener imap { port = 143 }
inet_listener imaps { port = 993; ssl = yes }
}
disable_plaintext_auth = yes
auth_mechanisms = plain login
6. Comparação IMAP vs POP3 vs Webmail
| Característica | POP3 (110) | IMAP (143/993) | Webmail (HTTPS) |
|---|---|---|---|
| Onde ficam msgs | Cliente | Servidor | Servidor |
| Multi-device | Não (restrito) | Sim | Sim |
| Pastas server-side | Não | Sim | Sim |
| Busca server-side | Não | Sim | Sim |
| Anexos sob demanda | Não | Sim | Sim |
| Offline reading | Sim (após download) | Limitado | Não |
| Largura de banda | Alto (download tudo) | Baixo (fetch sob demanda) | Variável |
7. Auditoria e Diagnóstico
# Teste manual IMAP via telnet/openssl (plain)
telnet imap.exemplo.com 143
A001 LOGIN alice password
A002 LIST "" "*"
A003 SELECT INBOX
A004 SEARCH UNSEEN
A005 LOGOUT
# Teste IMAPS (TLS implícito)
openssl s_client -crlf -connect imap.exemplo.com:993
# Logs Dovecot em tempo real
journalctl -u dovecot -f | grep imap
tail -f /var/log/dovecot.log
8. Resumo Técnico
| Atributo | Valor |
|---|---|
| RFC | 3501 (IMAP4rev1), 9051 (IMAP4rev2), 8314 (Implicit TLS) |
| Porta plain | TCP 143 |
| Porta TLS implícito | TCP 993 |
| Porta STARTTLS | TCP 143 (upgrade) |
| Transporte | TCP orientado a conexão |
| Estado | Stateful, sessão persistente |
| Comandos | Tagged, comandos assíncronos |
| Implementação popular | Dovecot, Cyrus, Courier |
| Mecanismos AUTH | PLAIN, LOGIN, CRAM-MD5, OAuth2 (RFC 6749) |
9. Conclusão
O Protocolo IMAP é o padrão moderno para acesso a e-mails, projetado desde o início para um mundo multi-device onde usuários acessam a mesma caixa de entrada de smartphones, tablets e desktops simultaneamente. Compreender os estados de sessão (NON-AUTHENTICATED → AUTHENTICATED → SELECTED → LOGOUT), dominar comandos essenciais (SELECT, FETCH, SEARCH, STORE, EXPUNGE), configurar corretamente IMAPS na porta 993 com TLS 1.2+ e auditar conexões via openssl s_client são competências essenciais para administradores de correio eletrônico em ambientes corporativos modernos. Em conjunto com o protocolo SMTP (envio) e Submission (RFC 6409, porta 587), o IMAP forma a tríade fundamental do e-mail corporativo contemporâneo, complementando protocolos auxiliares como JMAP (RFC 8620/8621) que prometem modernizar o acesso a mensagens via JSON API.