Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

06 - Outros Comandos

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Outros Comandos SMTP

1. Definição

Além do conjunto mínimo de comandos (HELO, MAIL, RCPT, DATA, QUIT), o SMTP define uma série de comandos adicionais padronizados nas RFCs 5321 (base) e 4954 (autenticação). Estes comandos expandem o protocolo para suportar extensões (EHLO), autenticação (AUTH), criptografia (STARTTLS), verificação de destinatários (VRFY, EXPN) e operações de controle de sessão (NOOP, RSET, HELP). O conjunto completo é frequentemente chamado de ESMTP (Extended SMTP).

Comandos ESMTP Principais

Comando Função RFC
EHLO Saudação estendida (anuncia extensões) 5321
AUTH Autenticação do cliente 4954
STARTTLS Upgrade para TLS 3207
VRFY Verifica existência de mailbox 5321
EXPN Expande lista de distribuição 5321
NOOP Testa conexão (no-op) 5321
RSET Cancela transação atual 5321
HELP Lista comandos suportados 5321
BDAT Dados binários por chunk 3030

2. EHLO — Saudação Estendida

O comando EHLO (Extended HELO) foi introduzido na RFC 1869 (1995) para permitir que o servidor anuncie as extensões suportadas. Em resposta, o servidor retorna múltiplas linhas 250- (continuação) e uma linha final 250 (fim). Se o servidor não suportar ESMTP, responde 500 Syntax error, e o cliente deve recuar para HELO.

C: EHLO mail.exemplo.com
S: 250-mail.exemplo.com Hello you
S: 250-SIZE 52428800
S: 250-PIPELINING
S: 250-STARTTLS
S: 250-AUTH PLAIN LOGIN CRAM-MD5
S: 250-ENHANCEDSTATUSCODES
S: 250-8BITMIME
S: 250 CHUNKING

As extensões anunciadas determinam quais comandos adicionais o cliente pode usar e quais parâmetros extras são aceitos em MAIL FROM (ex.: SIZE, BODY=8BITMIME, AUTH=).

3. AUTH — Autenticação

O comando AUTH (RFC 4954) autentica o cliente no servidor, normalmente exigido em MSA (Mail Submission Agent) na porta 587 para evitar relay aberto. Os mecanismos mais comuns são:

Mecanismo Descrição Segurança
PLAIN Base64 de \0user\0pass Requer TLS
LOGIN Challenge-response em Base64 Requer TLS
CRAM-MD5 HMAC-MD5 com challenge do servidor Protege senha
GSSAPI Kerberos 5 Alta (SSO)
OAUTHBEARER OAuth 2.0 token bearer Alta
SCRAM-SHA-256 Salted Challenge Response Alta

Exemplo Prático com PLAIN

# Gerar token Base64: \0usuario\0senha
printf '\0usuario\0senha' | base64
# saida: AHVzdWFyaW8Ac2VuaGE=
openssl s_client -starttls smtp -crlf -connect smtp.exemplo.com:587

Sessão resultante:

C: AUTH PLAIN
S: 334
C: AHVzdWFyaW8Ac2VuaGE=
S: 235 2.7.0 Authentication successful

4. STARTTLS — Upgrade para TLS

Definido na RFC 3207, STARTTLS permite que uma conexão TCP em texto puro (porta 25 ou 587) seja elevada a TLS sem precisar de porta dedicada (como a 465 para SMTPS implícito). Após EHLO, o cliente envia STARTTLS, faz o handshake TLS e reenvia EHLO sobre o canal cifrado — necessário porque o servidor pode anunciar AUTH apenas após TLS.

C: EHLO cliente
S: 250-STARTTLS
C: STARTTLS
S: 220 2.0.0 Ready to start TLS
[handshake TLS]
C: EHLO cliente
S: 250-AUTH PLAIN LOGIN

A verificação de certificado deve ser feita pelo cliente. Configuração no Postfix:

smtp_tls_security_level = may
smtp_tls_verify_cert_match = hostname
smtpd_tls_auth_only = yes

5. VRFY e EXPN — Verificação de Usuários

O comando VRFY valida se uma mailbox existe. EXPN expande listas de distribuição (mailing lists). Ambos são desabilitados por padrão em servidores modernos porque facilitam enumeração de contas por spammers.

C: VRFY postmaster
S: 250 2.1.5 <postmaster@exemplo.com>
C: EXPN vendas
S: 250-2.1.5 <joao@exemplo.com>
S: 250 2.1.5 <maria@exemplo.com>

Configuração típica no Postfix para desativar:

disable_vrfy_command = yes
smtpd_noop_commands =

Muitos servidores respondem 252 Cannot VRFY user (resposta ambígua proposital) para não confirmar nem negar a existência.

6. NOOP, RSET e HELP — Controle de Sessão

NOOP

NOOP (No Operation) apenas verifica se a conexão está ativa. O servidor responde 250 OK sem alterar estado da transação, útil para manter keepalive em conexões persistentes.

C: NOOP
S: 250 2.0.0 OK

RSET

RSET aborta a transação atual, descartando MAIL FROM e RCPT TO previamente definidos, mas mantém a sessão autenticada e a conexão:

C: MAIL FROM:<rem@exemplo.com>
C: RCPT TO:<dest@exemplo.com>
C: RSET
S: 250 2.0.0 OK
C: MAIL FROM:<outro@exemplo.com>   # nova transação

HELP

HELP lista os comandos suportados pelo servidor ou detalha um comando específico. Resposta opcional e meramente informativa:

C: HELP
S: 214-2.0.0 This is Postfix
S: 214-2.0.0 Commands supported:
S: 214-2.0.0   HELO EHLO MAIL RCPT DATA
S: 214-2.0.0   NOOP QUIT RSET VRFY
S: 214 2.0.0 End of HELP

7. Resumo dos Códigos de Resposta

Código Significado Classe
220 Serviço pronto Sucesso
235 Autenticação bem-sucedida Sucesso
250 Comando OK Sucesso
252 Não é possível VRFY, mas aceita Sucesso
334 Challenge de servidor (AUTH) Intermediário
354 Inicie envio de dados (DATA) Intermediário
421 Serviço indisponível, fechando Temporário
450/451 Mailbox/erro local temporário Temporário
500 Erro de sintaxe Permanente
530 Autenticação requerida Permanente
535 Autenticação falhou Permanente
550/553 Mailbox indisponível/nome não permitido Permanente

Códigos 4xx são falhas temporárias (cliente deve retransmitir); 5xx são permanentes (rejeição definitiva). Há ainda BDAT/CHUNKING (RFC 3030), que substitui DATA enviando chunks com tamanho explícito (BDAT 1000 LAST), evitando o terminador <CRLF>.<CRLF> problemático para mensagens com linhas contendo apenas um ponto.

8. Diagnóstico Prático

# Sem criptografia (porta 25)
telnet smtp.exemplo.com 25

# Com STARTTLS (porta 587) ou SMTPS implicito (465)
openssl s_client -starttls smtp -crlf -connect smtp.exemplo.com:587
openssl s_client -crlf -connect smtp.exemplo.com:465

# Verificar extensões anunciadas e mecanismos AUTH
echo -e "EHLO test\nQUIT" | nc smtp.exemplo.com 25
swaks --auth --server smtp.exemplo.com:587 --tls --to dest@ex.com

9. Boas Práticas de Configuração

Prática Recomendação
Porta 25 Apenas MTA-to-MTA, sem AUTH, sem STARTTLS obrigatório
Porta 587 MSA, AUTH obrigatório, STARTTLS recomendado
Porta 465 SMTPS implícito (TLS direto), legado
VRFY/EXPN Desativar (disable_vrfy_command = yes)
AUTH sem TLS Proibir (smtpd_tls_auth_only = yes)
Relay aberto Negar por padrão, liberar apenas após AUTH
Cifras TLS Mínimo TLS 1.2, desativar RC4/3DES
Log Habilitar smtpd_tls_loglevel = 1

10. Conclusão

Os comandos ESMTP adicionais transformaram o SMTP simples de 1982 em um protocolo robusto capaz de autenticação, criptografia e operações de gerenciamento. EHLO é a porta de entrada para todas as extensões; AUTH e STARTTLS são essenciais para segurança moderna. VRFY e EXPN, embora padronizados, são desativados na prática. Para diagnóstico de problemas de e-mail, dominar o fluxo EHLO → STARTTLS → AUTH → MAIL → RCPT → DATA → QUIT via openssl s_client é uma habilidade indispensável para administradores de sistemas.