Sicurezza e privacy

Spam Scanner legge la posta, che è privata, proveniente da mittenti che possono essere ostili. Questa pagina elenca cosa invia all'esterno e come tratta ciò che legge.

Cosa lascia la macchina#

Per impostazione predefinita, una cosa sola: i nomi host dei link in un messaggio vengono cercati sui resolver con filtraggio di Cloudflare, 1.1.1.2 e 1.0.0.2 (malware e phishing) e 1.1.1.3 e 1.0.0.3 (anche contenuti per adulti). Sono normali query DNS per nomi come example.com; non viene inviata nessuna parte del messaggio o dei suoi indirizzi. Disattivale con phishing: {cloudflare: false} o --no-cloudflare, oppure disattiva solo il controllo per adulti con phishing: {adult: false}.

Tutto il resto è disattivato finché non viene configurato:

ControlloInviaA
authenticationQuery DNS per i record SPF, DKIM, DMARC e ARC del mittenteIl tuo resolver, o dnsServers
dnsblL'indirizzo IP del client, invertito, e i domini dei link, come query DNSI name server delle blocklist, tramite il tuo resolver o dns.servers
llmUn riassunto del messaggio, con i dati personali rimossi per i provider remotiIl server del modello linguistico che indichi (privacy)
reputation.apiUrlL'indirizzo IP, il dominio e l'indirizzo del mittenteIl servizio che indichi
clamavGli allegatiIl tuo clamd, tramite il suo socket

Non c'è telemetria, nessun controllo degli aggiornamenti e nessun download durante l'esecuzione. Il modello è incluso nel pacchetto.

Cosa conserva#

Niente, se non richiesto. Le analisi non vengono registrate né archiviate. learn() modifica il classificatore in memoria; viene scritto su disco solo da saveModel(), spamscanner learn o dall'opzione --out dei server. Un file di modello contiene conteggi di feature sottoposti a hash, non parole né testo dei messaggi.

Le risposte del modello linguistico vengono memorizzate in cache in memoria, indicizzate da un hash di ciò che è stato inviato, quindi le copie ripetute dello stesso messaggio vengono sottoposte al modello una volta sola. Le risposte DNS restano in cache in memoria per dieci minuti.

Input ostile#

  • Gli allegati vengono identificati dai loro byte, mai eseguiti o aperti da un altro programma. Gli archivi ZIP vengono letti dalla loro directory centrale, con un limite al numero di voci; gli archivi annidati non vengono estratti.
  • Il testo del corpo viene letto fino a maxLength (100.000 caratteri) e i server accettano messaggi fino a 25 MB.
  • Ogni controllo di rete ha un timeout (timeout, 10 secondi per impostazione predefinita). Un controllo che fallisce o va in timeout viene saltato e l'analisi si conclude senza di esso.
  • Le intestazioni X-Spam-* già presenti in un messaggio vengono rimosse dal milterMail filter: un protocollo nato con Sendmail, usato anche da Postfix, che permette a un programma separato di esaminare ogni messaggio durante la sessione SMTP., dal content filter e da --headers, quindi i mittenti non possono segnare la propria posta come pulita.
  • Le intestazioni con il verdetto antispam di Microsoft sono considerate attendibili solo quando il messaggio arriva direttamente dai server di Microsoft, e le intestazioni Received non vengono mai usate per stabilire da dove proviene un messaggio.
  • Il testo che si rivolge ai filtri IA riceve punti di spam, e al modello linguistico viene detto che il messaggio è un dato, non un'istruzione. Prompt injection

Server#

I server milter, HTTP, TCP e spamdIl demone di SpamAssassin. Il suo protocollo è usato da spamc, Exim, Haraka e altri client SpamAssassin. sono in ascolto su 127.0.0.1, salvo diversa indicazione di --host. L'API HTTP confronta il suo token in tempo costante e rifiuta /learn senza token. Nessuno di essi supporta TLS: per raggiungerli attraverso una rete, usa una rete privata, un tunnel SSH o un reverse proxy con TLS.

Eseguili con un utente non privilegiato. L'unità systemd nella guida a Postfix aggiunge le consuete misure di hardening.

Segnalare una vulnerabilità#

Segnala i problemi di sicurezza in privato tramite la segnalazione delle vulnerabilità di GitHub, non nelle issue pubbliche.

Modifica questa pagina su GitHub · Markdown ·