Postfix Spam Filter · 13 min read · Nov 14, 2025

Filtro Spam Postfix utilizzando Ubuntu Dapper, MailScanner, SpamAssassin, Razor, Pyzor, DCC e ClamAV - Pagina 2

2 Configurazione di Postfix

Abbiamo bisogno di alcuni file di esempio dal codice sorgente di Postfix, nota che il codice sorgente che prendiamo qui è il codice sorgente originale, prima che venga modificato dai manutentori dei pacchetti Ubuntu/Debian:

cd /usr/local/src  
  
wget http://us.archive.ubuntu.com/ubuntu/pool/main/p/postfix/postfix_2.3.3.orig.tar.gz  
  
tar xzvf postfix_2.3.3.orig.tar.gz

Ferma Postfix:

postfix stop

ASSICURATI di rispondere “n” a “sovrascrivere?” Fai ogni sezione separatamente:

cp -i /usr/share/postfix/main.cf.debian /etc/postfix/main.cf  
  
cp -i /usr/local/src/postfix-2.3.3/conf/* /etc/postfix  
  
cp -i /etc/postfix/header_checks /etc/postfix/body_checks  
  
cp -i /etc/postfix/access /etc/postfix/sender_access

2.1 Modifica master.cf

A proposito, fai attenzione ai due file di configurazione di Postfix, entrambi situati nella cartella /etc/postfix. Più di un amministratore si è confuso tra master.cf e main.cf!

Prima esegui il backup dell’attuale master.cf:

cp /etc/postfix/master.cf /etc/postfix/master.cf-orig

Modifica master.cf:

vi /etc/postfix/master.cf

Dobbiamo aggiungere due elementi sotto il tipo di servizio pickup. Il servizio pickup “ritira” la posta locale (locale significa “su questa macchina”) e la consegna. Più tardi creeremo un rapporto giornaliero/settimanale che questa macchina ci invierà e poiché il rapporto conterrà contenuti che classificheranno il rapporto stesso come spam, questo è un modo per bypassare il filtraggio dei contenuti per la posta generata da questa macchina.

Aggiungi questo appena sotto il tipo di servizio ‘pickup’:

         -o content_filter=
         -o receive_override_options=no_header_body_checks

Dovrebbe apparire così quando hai finito:

pickup    fifo  n       -       -       60      1       pickup
         -o content_filter=
         -o receive_override_options=no_header_body_checks

2.2 Modifica main.cf

Questo è il file di configurazione principale per Postfix. Per ulteriori informazioni, leggi i commenti nel file main.cf, la documentazione in /usr/local/src/postfix-2.3.3/README_FILES, o il sito web di Postfix http://www.postfix.org/documentation.html.

Prima dobbiamo eseguire il backup del file main.cf.

cp /etc/postfix/main.cf /etc/postfix/main.cf-orig

Poiché stiamo configurando il nostro filtro spam per inoltrare tutta la sua posta a un altro server, utilizzeremo ciò che Postfix considera una “classe di indirizzo di dominio di inoltro” che essenzialmente significa che utilizzeremo, tra i 300+ parametri configurabili in Postfix, un piccolo gruppo di parametri che servono meglio al nostro scopo. Questa classe di indirizzo è descritta qui: http://www.postfix.org/ADDRESS_CLASS_README.html#relay_domain_class. Stiamo anche agendo come un MX primario per un altro server, quindi leggi questa sezione appropriata: http://www.postfix.org/STANDARD_CONFIGURATION_README.html#backup.

È comune in Postfix memorizzare elementi in tabelle di ricerca. Useremo diverse tabelle hash per memorizzare i dati che Postfix utilizzerà. Una volta che abbiamo dati in testo semplice in queste tabelle, utilizziamo il comando postmap per creare file binari (formato Berkeley DB) che Postfix utilizzerà infine per recuperare i dati. Ad esempio, se hai un file chiamato “sampletext” e esegui postmap sampletext, viene creato un nuovo file “sampletext.db”. Postfix recupererà i dati da “sampletext.db”, non da “sampletext”. Ci sono più di una dozzina di altri tipi di file di dati che Postfix può utilizzare per memorizzare dati. Le tabelle hash sono una scelta appropriata per diverse tabelle che utilizzeremo, e pcre (Espressioni Regolari Compatibili con Perl) è appropriato per un paio di tabelle che utilizzeremo per contenere dati di filtraggio dei contenuti. Nella sua forma più semplice, una tabella hash è composta da 2 pezzi di dati, una chiave e un valore; tipicamente indicati come coppia chiave/valore. La chiave e il valore sono separati da spazi bianchi (tipicamente uno spazio o una tabulazione). I dati in una tabella tipica che utilizziamo in Postfix apparirebbero così:

[email protected] OK
[email protected] OK
[email protected] OK

Lettura suggerita: http://www.postfix.org/DATABASE_README.html.

Useremo postconf per modificare main.cf invece di digitare i parametri nel file con vi. I segni “” sono richiesti come appare nelle caselle di comando.

2.2.1 alias_maps

Dobbiamo semplicemente apportare una correzione all’impostazione predefinita qui:

postconf -e "alias_maps = hash:/etc/aliases"

Crea il file degli alias:

newaliases

Vedrai che ora c’è un file aliases.db nella directory /etc/. Questo è ciò che Postfix legge di solito. Ora che hai un file di alias corretto e poiché configureremo il nostro sistema per inoltrare tutta la posta (nessuna posta sarà consegnata localmente), il file degli alias sarà ignorato da Postfix. Invece, configureremo virtual_alias_maps per il reindirizzamento degli indirizzi. Altri programmi potrebbero non funzionare correttamente se il file /etc/aliases è mancante, quindi non rimuoverlo.

2.2.2 myorigin

Il nome di dominio da cui sembra provenire la posta creata su questa macchina. Ad esempio, se cron invia posta a “[email protected]”, apparirà provenire da “[email protected]”.

postconf -e "myorigin = example.com"

Ovviamente, in quanto sopra, e in tutti i comandi seguenti, sostituisci i miei parametri di esempio, come “example.com”, con i tuoi valori specifici.

2.2.3 myhostname

Il nome di dominio completamente qualificato (FQDN) della macchina che esegue il sistema Postfix.

postconf -e "myhostname = sfa.example.com"

2.2.4 mynetworks

Queste sono le macchine di cui mi fido e per le quali inoltrerò la posta, verso qualsiasi destinazione. In generale, questo è impostato sulla mia LAN, o solo su un paio di server di posta interni fidati. Insieme a relay_domains, questo è un aspetto importante da ottenere correttamente per non correre il rischio di diventare un “inoltro aperto”. In altre parole, la tua macchina potrebbe accettare e inoltrare posta a domini per i quali non ha alcun diritto di farlo. Essere un inoltro aperto è un problema serio e può causarti di essere inserito nelle liste nere di vari elenchi anti-spam di Internet, tra altri problemi. Puoi specificare un singolo computer, più computer individuali o qualsiasi computer su una rete specificata. Puoi anche escludere determinati host nella tua rete precedendo l’indirizzo IP con un punto esclamativo. Se dovrai gestire più server di posta interni e/o desideri consentire a più macchine e/o subnet di inoltrare tramite questo server (attento!), aggiungili semplicemente a questo parametro in formato CIDR e separa le reti in questo modo:

postconf -e "mynetworks = 127.0.0.0/8, 222.222.222.222/24, 10.10.10.10/24"

Quanto sopra consentirà alle macchine sulle reti 222.222.222.222/24 e 10.10.10.10/24 di inoltrare posta smtp tramite questa macchina. Il 127.0.0.0/8 è lì per consentire al server locale di inviare, devi almeno inserire questo. Potresti anche specificare l’indirizzo IP di un singolo computer. Se conosci solo la tua maschera di rete in formato decimale punteggiato (cioè 255.255.255.240) e devi convertirla in formato CIDR, prova il http://www.wildpackets.com/products/free_utilities/ipsubnetcalc/overview. (Inserisci un indirizzo IP sulla tua rete, seleziona la scheda delle informazioni sulla subnet, seleziona la tua maschera di rete, la tua rete è Subnet ID/Mask Bits.) Oppure dai semplicemente un’occhiata a http://www.belchfire.net/webtools/cidr_conversion_table.html.

Se non hai reti o computer che inoltreranno tramite questo server, esegui questo comando solo con l’indirizzo 127.0.0.0/8.

2.2.5 message_size_limit

Dimensione massima dell’email che Postfix lascerà entrare dalla “porta principale”.

postconf -e "message_size_limit = 10485760"

Quanto sopra consente email fino a 10MB, il valore è in byte (1010241024). La posta più grande di questa potrebbe essere bypassata dallo scanner antivirus (ClamAV). Potresti aumentare questo se configuri anche ClamAV per scansionare file più grandi di 10MB. Se consenti messaggi più grandi di 10MB, fai attenzione alla RAM.

2.2.6 local_transport

Restituisci un messaggio di errore per i tentativi di consegna locale.

postconf -e "local_transport = error:No local mail delivery"

2.2.7 mydestination

Un mydestination vuoto dice a Postfix che questa macchina non è la destinazione finale.

postconf -e "mydestination = "

2.2.8 local_recipient_maps

Un local_recipient_maps vuoto dice a Postfix che non ci sono cassette postali locali.

postconf -e "local_recipient_maps = "

2.2.9 virtual_alias_maps

Il nostro filtro spam deve essere in grado di ricevere posta per postmaster@yourIP. Si dice che alcune cose si aspettino effettivamente che questa capacità esista. Consentiremo anche la posta a abuse@yourIP. Poiché non consentiamo la consegna locale della posta, la posta indirizzata all’indirizzo IP del nostro filtro spam verrà rifiutata con un messaggio di errore. Configurare virtual_alias_maps consente di inoltrare email a questi due account a un indirizzo interno. Assicurati che il tuo server Exchange sia configurato per ricevere messaggi indirizzati a “root”, “postmaster” e “abuse”.

Imposta un riferimento al file virtuale:

postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"

Poi modifica il file virtual:

vi /etc/postfix/virtual

Aggiungi queste due righe in cima al file virtual:

postmaster [email protected]
abuse [email protected]

Salva ed esci dal file, poi crea il file binario che Postfix utilizzerà:

postmap /etc/postfix/virtual

2.2.10 relayhost

/etc/postfix/relayhost dice al nostro filtro spam come dovrebbe essere inviata la posta in uscita. relayhost conterrà l’IP o il FQDN del server di posta che desideri utilizzare per inviare email in uscita. In altre parole, posta non locale, posta destinata a domini diversi dal nostro. Non confonderlo con il file /etc/postfix/transport, il trasporto viene utilizzato per instradare la posta in arrivo destinata a uno dei nostri domini locali. Ci arriveremo tra un momento.

Se relayhost è vuoto o non configurato, il nostro filtro spam verrà utilizzato per questo scopo.

Nota: Le parentesi quadre [] sono richieste in questo comando.
postconf -e "relayhost = [mymailserver.example.com]"

Facoltativamente, puoi configurare il tuo filtro spam come server SMTP in uscita, ma dovresti prima avere il tuo record DNS inverso in atto e ovviamente il tuo record “A” e il record “MX” affinché altri server su Internet accettino la tua posta. Quando riconfiguri i tuoi client e altri server SMTP per utilizzare il nostro filtro spam per la loro posta in uscita, quella posta passerà attraverso lo stesso processo di scansione della tua posta in arrivo (a meno che tu non trovi alcuni aggiustamenti fantasiosi per impedirlo). Se questi non sono ancora in atto, è molto utile configurare temporaneamente relayhost con il tuo attuale server di posta in uscita funzionante.

Inoltre, assicurati che il relayhost che designi sia configurato per accettare email da questa macchina e CHE quella macchina non stia utilizzando QUESTA macchina per la SUA posta in uscita (puoi dire “loop”?).

2.2.11 relay_recipient_maps

Stiamo per costruire una tabella di ogni singolo utente in ogni singolo dominio per cui accettiamo posta. Questa tabella verrà utilizzata per rifiutare la posta indirizzata a utenti inesistenti nei nostri domini. NON FARE FINTA DI ESSERE ANCORA… In questo momento stiamo solo impostando la struttura della tabella. Se stai usando Exchange, ci sono HOWTO disponibili che descrivono l’automazione del processo di costruzione della tabella relay_recipients. È stato molto comune di recente per gli spammer lanciare attacchi a dizionario; inviando migliaia di messaggi a un dominio utilizzando nomi utente fabbricati. Il nostro filtro spam dovrebbe elaborare ciascuno di questi a meno che tu non metta utenti validi nella tabella relay_recipients. Non sottovalutare l’importanza di questo e assicurati di non essere l’unico nella tua organizzazione a sapere come apportare modifiche a questo file. Torneremo a automatizzare questo dopo che il tuo filtro spam sarà funzionante. Se hai un numero gestibile di utenti, inseriscili manualmente.

Imposta un riferimento a un file che creeremo per memorizzare i dati:

postconf -e "relay_recipient_maps = hash:/etc/postfix/relay_recipients"

Poi modifica relay_recipients:

vi /etc/postfix/relay_recipients

Per il momento, accetteremo posta per tutti gli utenti nei nostri domini, quindi inserisci ogni dominio per cui accetti posta nel seguente formato:

@example.com OK
@example2.com OK
@example3.com OK

Poi crea il file binario che Postfix utilizzerà:

postmap /etc/postfix/relay_recipients

Le voci sopra sono temporanee. Sono caratteri jolly che consentono la posta ai tuoi domini. Devi rimuovere le voci sopra a un certo punto nel prossimo futuro e sostituirle con gli indirizzi email di tutti i tuoi destinatari validi. Quando sei pronto per inserire ogni utente individualmente nel file relay_recipients, dovresti prima rimuovere (o commentare) i dati sopra che consentono la posta a tutti gli utenti nel dominio, e quindi elencare ciascun utente individualmente nella forma:

[email protected] OK
[email protected] OK
[email protected] OK

In realtà, in questo particolare file il valore “OK” elencato dopo ogni utente non viene utilizzato per nulla, ma deve esserci qualcosa perché una tabella hash richiede un valore dopo la chiave. Nota che eliminando [email protected] da questo file, puoi impedire agli utenti di Internet di inviare posta a [email protected], ma non farlo se alcuni dei tuoi server devono utilizzare questa macchina per inviare posta a root. Se utilizzi Exchange, ecco gli HOWTO. Anche se non utilizzi Exchange, ho trovato utili le informazioni riguardanti i trasferimenti di file. http://www2.origogeneris.com:4000/relay_recipients.html - http://www-personal.umich.edu/~malth/gaptuning/postfix/ - http://www.unixwiz.net/techtips/postfix-exchange-users.html - http://postfix.state-of-mind.de/patrick.koetter/mailrelay/ - http://doc.nettools.ru/Unix/Postfix&intserver/

2.2.12 transport_maps

Indica a Postfix dove cercare un file di trasporto. Utilizziamo il file di trasporto per dire a Postfix dove inoltrare la posta valida per i nostri domini. Impostare il trasporto è simile a impostare relay_recipients.

Crea un riferimento ad esso in main.cf:

postconf -e "transport_maps = hash:/etc/postfix/transport"

Poi modifica transport:

vi /etc/postfix/transport

Aggiungi 1 nuova riga per ogni dominio per il quale gestirai la posta, simile all’esempio qui sotto. L’indirizzo IP è quello di qualsiasi server sia la destinazione finale dei messaggi indirizzati ai nostri domini (il nostro server Exchange). Non importa dove posizioni questi elementi nel file, ma mi piace metterli in cima.

example1.com smtp:[10.10.10.100]
example2.com smtp:[10.10.10.101]
example3.com smtp:[10.10.10.102]

INCLUDE le parentesi quadre su queste righe!). Puoi anche utilizzare il nome host FQDN invece di un indirizzo IP (cioè smtp:[exchange1.example.com]).

Ora per creare il file binario che Postfix utilizzerà:

postmap /etc/postfix/transport

2.2.13 relay_domains

Quali domini di destinazione (e sottodomini) per i quali questo sistema inoltrerà la posta. Vuoi elencare qui SOLO i domini per i quali sei responsabile per accettare posta. Oltre a consentire la posta di essere inoltrata a questi domini, questa impostazione implica anche che non inoltriamo posta a domini non elencati qui e quindi questo è un componente critico per prevenire che il filtro spam diventi un inoltro aperto.

postconf -e "relay_domains = hash:/etc/postfix/relay_domains"

Modifica relay_domains:

vi /etc/postfix/relay_domains

Aggiungi 1 nuova riga per ogni dominio per il quale gestirai la posta, simile all’esempio qui sotto:

example1.com OK
example2.com OK
example3.com OK

Questo file ha attualmente un formato molto simile a relay_recipients, non confondere i due. Questo file non può avere ‘@’ davanti al nome di dominio. Solo per menzionarlo, alcune persone molto intelligenti sono state conosciute per averlo fatto…

Poi crea il file binario che Postfix utilizzerà:

postmap /etc/postfix/relay_domains
NOTA: relay_recipients, relay_domains e transport sono file con cui diventerai molto intimo. Ogni volta che hai bisogno di aggiungere utenti a un dominio, aggiungere un dominio o rimuovere un dominio dalla tua lista, devi andare a tutti e tre questi file e modificarli. Dopo la modifica, esegui un postmap su ciascuno e riavvia Postfix con 'postfix reload'. Nella pagina finale c'è una parte 'Manutenzione' che contiene un README che può essere copiato nel tuo filtro spam come riferimento rapido per alcune attività comuni.

2.2.14 recipient_delimiter

Se il tuo attuale server SMTP/POP3/IMAP è configurato per utilizzare estensioni di indirizzo (ad esempio [email protected]), allora recipient_delimiter dovrebbe essere impostato per corrispondere al delimitatore che stai attualmente utilizzando per separare il nome utente dall’estensione dell’indirizzo. Questo non ha nulla a che fare con la virgola che stai utilizzando per separare più persone a cui invii email ([email protected], [email protected], [email protected]) utilizzando il tuo client email (MUA). Potresti essere familiare con questo se usi GMail. Se hai un account GMail puoi inviare email a esso in questo formato, ad esempio [email protected] e impostare un filtro in GMail per contrassegnare tutto con il ‘testtag’ nell’indirizzo a e saltare la posta in arrivo. Recentemente, un uso comune per questa funzione è utilizzare questi tag quando ti iscrivi a qualsiasi servizio web e quindi filtrare in base al tag. Comunque, se ce l’hai, saprai di averlo se non hai idea di cosa stia parlando segui le istruzioni “Non utilizzo delimitatori di destinatario”.

3 Impostazioni tipiche - Scegli una.

  1. Non utilizzo delimitatori di destinatari:
postconf -e "recipient_delimiter = "
  1. Attualmente utilizzo il segno più:
postconf -e "recipient_delimiter = +"
  1. Attualmente utilizzo il segno meno:
postconf -e "recipient_delimiter = -"

2.2.15 Impostazioni NAT/Proxy (Opzionale)

Se (e solo se) l’indirizzo IP che presenti al mondo non è l’indirizzo IP del tuo filtro spam (sei configurato per funzionare dietro un firewall NAT o un server proxy) vai avanti e aggiungi le seguenti due righe a main.cf, quindi decommenta e configura proxy_interfaces (60.50.40.30 rappresenta l’indirizzo IP pubblico):

# Specifica qui il tuo indirizzo ESTERNO NAT/proxy.
#proxy_interfaces = 60.50.40.30
Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.