Cosa fa#
SMTP è il protocollo che trasporta le email dal client al server e tra server — si occupa solo della consegna, non dello storage (quello è IMAP/POP3).
TL;DR#
SMTP → consegna (postino) porta 25 server-to-server, 587 client-to-server
IMAP → leggi le email (cassetta) porta 993
POP3 → scarica le email porta 995
SMTP non sa nulla della cassetta delle lettere.
Consegna e sparisce.Analogia postale#
Mittente Ufficio postale locale Ufficio postale remoto Destinatario
(scrive la lettera) --> (smista per zona) --> (smista localmente) --> (cassetta)
Stesso dominio (local delivery):
Mittente --> MTA locale --> cassetta destinatario
Domini diversi (outside delivery):
Mittente --> MTA mittente --> MTA destinatario --> cassetta destinatarioArchitettura — MUA e MTA#

| Componente | Sigla | Ruolo | Esempi |
|---|---|---|---|
| Mail User Agent | MUA | Client email — componi e leggi | Outlook, Thunderbird, Gmail web |
| Mail Transfer Agent | MTA | Server email — smista e consegna | Postfix, Exchange, Sendmail |
| Mail Delivery Agent | MDA | Deposita nella casella del destinatario | Dovecot (spesso integrato in MTA) |
| Mail Submission Agent | MSA | Riceve dal client MUA, porta 587 | Spesso è il MTA stesso |
Dal punto di vista network-defense interessa solo la coppia MUA → MTA e MTA → MTA.
Flusso stesso dominio:
MUA (user1@abc.com) --SMTP 587--> MTA (abc.com) --IMAP/POP3--> MUA (user2@abc.com)Flusso domini diversi:
MUA (user1@abc.com) --SMTP 587--> MTA (abc.com) --SMTP 25--> MTA (xyz.com) --IMAP/POP3--> MUA (user2@xyz.com)Il MTA usa DNS per trovare il server destinatario: cerca il record MX del dominio destinatario, poi apre una connessione SMTP sulla porta 25 verso quell'IP.
Porte SMTP#
| Porta | Uso | Note |
|---|---|---|
| 25 | Server-to-server (MTA → MTA) | Spesso bloccata dagli ISP per utenti normali — previene spam |
| 587 | Client-to-server (MUA → MTA) | Autenticata, con STARTTLS |
| 465 | SMTPS (SMTP over TLS) | Legacy ma ancora usata, connessione cifrata dall'inizio |
SMTP in chiaro — cosa si vede in Wireshark#
SMTP senza TLS è completamente leggibile in dfir. Una sessione tipica:
Client: EHLO mittente.com
Server: 250-smtp.destinatario.com Hello
Server: 250-STARTTLS
Server: 250 OK
Client: MAIL FROM:<user1@abc.com>
Server: 250 OK
Client: RCPT TO:<user2@xyz.com>
Server: 250 OK
Client: DATA
Server: 354 Start input, end with <CRLF>.<CRLF>
Client: From: user1@abc.com
To: user2@xyz.com
Subject: Test
[corpo email]
.
Server: 250 OK: queued
Client: QUIT
Server: 221 ByeSu connessioni SMTP in chiaro (no TLS), mittente, destinatario, subject e body sono visibili in chiaro nel dfir — come una cartolina postale. STARTTLS cifra la sessione dopo il comando iniziale.
DNS MX — stesso meccanismo del DNS web#
I record MX funzionano esattamente come i record A per il web — stessa catena resolver → root → TLD → authoritative NS. L'unica differenza:
# Web: record A → IP diretto
dig A gmail.com → 142.250.x.x
# Email: record MX → hostname, poi serve seconda query A
dig MX gmail.com → gmail-smtp-in.l.google.com (priority 5)
dig A gmail-smtp-in.l.google.com → 142.250.x.xI record MX hanno una priority — numero più basso = preferito. Se il server primario è down, il MTA prova il successivo in ordine di priorità. È un failover nativo del protocollo.
dig MX gmail.com
# gmail-smtp-in.l.google.com priority 5 ← primo tentativo
# alt1.gmail-smtp-in.l.google.com priority 10
# alt2.gmail-smtp-in.l.google.com priority 20
# alt3.gmail-smtp-in.l.google.com priority 30Flusso completo in dfir — 3 step#
Step 1 — Client → MTA locale (porta 587)#

Sequenza comandi nel TCP stream:
220 mail01 ESMTP Postfix (Ubuntu) ← server annuncia identità e software
EHLO [172.16.16.225] ← client si presenta con IP
250-STARTTLS ← server lista feature supportate
250-SIZE 10240000
250-VRFY
...
MAIL FROM:<user1@skynet.local> SIZE=556 ← mittente + dimensione
250 2.1.0 Ok
RCPT TO:<user2@cyberdyne.local> ← destinatario
250 2.1.5 Ok
DATA ← inizio trasmissione body
354 End data with <CR><LF>.<CR><LF> ← server pronto, termina con punto
[headers + body email in chiaro]
. ← fine messaggio
250 2.0.0 Ok: queued as 931C4400D5 ← accettato, in coda
QUIT
221 2.0.0 ByeUser-Agent nel body — dentro il DATA viaggiano header che rivelano il client (Thunderbird/38.5.0, Outlook/...). Dato utile in un'indagine forense.
skynet.local — dominio con .local = rete interna aziendale, non raggiungibile da internet. Tutto il traffico rimane sulla LAN anche se i client usano Outlook o Thunderbird.
Step 2 — MTA locale → MTA remoto (porta 25)#
Stesso identico protocollo SMTP. Il server non sa se sta parlando con un client o un altro MTA — applica le stesse regole.
Header Received: — traccia forense — ogni MTA che tocca l'email aggiunge una riga in cima al body:
Received: from [172.16.16.225] by mail01 with ESMTP id 931C4400D5
for <user2@cyberdyne.local>; Tue, 29 Dec 2015 14:13:51 -0500Leggendo questi header dal basso verso l'alto ricostruisci il percorso completo hop per hop — utile per tracciare phishing o spam.
Feature negotiation tra server — il EHLO/250 permette a server con software diversi (Postfix, Exchange, Sendmail) di capirsi. È il motivo per cui puoi mandare email da Gmail a Outlook senza problemi di compatibilità.
Filtro Wireshark per isolare una connessione specifica:
tcp.stream == 1Step 3 — MTA remoto → Client finale (IMAP + STARTTLS)#

Il client recupera l'email con IMAP. La connessione inizia in chiaro, poi:
Pkt 16-18: TCP handshake (porta 143 IMAP)
Pkt 19: IMAP: * OK [CAPABILITY...] Dovecot ready ← Dovecot = MDA su Linux
Pkt 21: IMAP: STARTTLS ← client chiede cifratura
Pkt 23: IMAP: 1 OK Begin TLS negotiation now
Pkt 24-27: TLSv1.2 handshake
Pkt 28+: Application Data ← tutto cifratoDovecot — come Postfix è l'MTA, Dovecot è l'MDA/IMAP server su Linux. Compare nel banner iniziale.
Traffico cifrato in Wireshark = rumore — dopo STARTTLS il Follow TCP Stream mostra solo caratteri casuali. È la conferma visiva che TLS funziona. Se una sessione IMAP/SMTP rimane leggibile fino alla fine → misconfiguration.
IMAP vs POP3#
| IMAP | POP3 | |
|---|---|---|
| Porta | 143 (993 con TLS) | 110 (995 con TLS) |
| Email sul server | rimangono | vengono scaricate e cancellate |
| Sincronizzazione multi-device | sì | no |
| Uso oggi | standard | legacy |
Email Spoofing — aggiornamento rispetto al libro#
Il libro (2011) non tratta questo — oggi è fondamentale.
Il campo From: in SMTP è liberamente falsificabile. Chiunque può spedire un'email apparentemente da ceo@azienda.com senza avere accesso a quell'account. I meccanismi difensivi moderni:
| Meccanismo | Cosa fa | Record DNS |
|---|---|---|
| SPF | Elenca gli IP autorizzati a spedire per quel dominio | TXT record |
| DKIM | Firma crittografica del mittente — verificabile dal destinatario | TXT record |
| DMARC | Policy su cosa fare se SPF/DKIM falliscono (quarantine/reject) | TXT record |
# Verifica SPF di un dominio
dig TXT gmail.com | grep spf
# Verifica DKIM (selector specifico)
dig TXT google._domainkey.gmail.com
# Verifica DMARC
dig TXT _dmarc.gmail.comUn dominio senza SPF/DKIM/DMARC è vulnerabile a phishing e BEC (Business Email Compromise). In un security assessment, l'assenza di questi record è una finding critica.
Allegati SMTP — MIME multipart e base64#
SMTP nasce per testo. Gli allegati ci sono stati aggiunti dopo con MIME (Multipurpose Internet Mail Extensions) — lo stesso standard che HTTP usa per il Content-Type.

Quando un'email ha un allegato, il Content-Type diventa multipart/mixed con un boundary — una stringa casuale che separa le parti:
Content-Type: multipart/mixed;
boundary="------------050407080301000500070000"
--------------050407080301000500070000
Content-Type: text/plain; charset=utf-8 ← parte 1: testo email
Content-Transfer-Encoding: 7bit
Testo del messaggio...
--------------050407080301000500070000
Content-Type: image/jpeg; name="newguy.jpg" ← parte 2: allegato
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="newguy.jpg"
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMD... ← dati binari in base64Concetti chiave:
base64 non è cifratura — è solo un modo per trasmettere dati binari su un canale testuale. Qualsiasi attaccante che intercetta il dfir può estrarre il file in pochi secondi. In Wireshark: Follow TCP Stream → Save as → decodifica base64 → file originale.
MIME boundary — il client sceglie una stringa casuale lunga e improbabile. Il server sa dove finisce una parte e inizia la prossima cercando quella stringa. Lo stesso meccanismo usato nelle API REST con multipart/form-data.
SIZE nel MAIL FROM — nota che con l'allegato la dimensione è SIZE=76692 (75KB) contro i 556 bytes del messaggio di solo testo. Il server usa questo valore per decidere se accettare prima ancora di ricevere i dati.
Un'email con allegato su SMTP senza TLS è completamente estraibile dal dfir — testo, allegato, nome file. Base64 è reversibile istantaneamente. Se vedi traffico SMTP in chiaro con grandi SIZE → possibile exfiltration dati tramite email.
Scenario Reale — Blue Team#
Alert Wazuh: connessione SMTP in uscita dalla workstation 192.168.1.45 verso IP esterno sulla porta 25.
Una workstation normale non dovrebbe mai aprire connessioni SMTP dirette — usa il mail server aziendale sulla 587. Traffico SMTP diretto da una workstation = probabile malware che invia spam o esfiltrazione dati via email.
# Analisi dfir — estrai sessioni SMTP
tshark -r capture.dfir -Y "smtp" -T fields -e ip.src -e ip.dst -e smtp.req.command -e smtp.req.parameterCollegato a#
- network — hub
- dns-resolution-flow — il MTA usa record MX per trovare il server destinatario
- wireshark — analisi dfir sessioni SMTP
- tshark — estrazione automatica campi SMTP




