Premier Training & Business Partner Red Hat

Funzionamento della posta elettronica e Configurazione di Postfix

Michele Milaneschi
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

In questo articolo parleremo del funzionamento della posta elettronica, andremo ad installare un nostro Mail Server, Postfix, e comprenderemo alcune delle tecniche di filtraggio dello SPAM.

Tutti noi oggi abbiamo almeno un indirizzo di posta elettronica dove l’invio o la ricezione di email è diventata un operazione cosi quotidiana e facile che non ci poniamo nemmeno la domanda sul meccanismo che sta dietro a quei pochi click.

Inizieremo questo articolo proprio parlando di ciò che sta dietro all’invio e alla ricezione di email:

Iniziamo a vedere cosa rappresentano le seguenti sigle MUA MTA e MDA:

 

MUA ( Mail User Agent ): Definisce il client di posta che usiamo nelle nostre macchine per inviare e ricevere la posta

MTA ( Mail Transport Agent ): Definisce i vari server che il messaggio attraversa per arrivare al mta del destinatario. Questi server comunicano tra di loro tramite il protocollo SMTP.

MDA ( Mail Delivery Agent ): Definisce il software incaricato di prelevare la posta dal MTA del destinatario per immagazzinarla nella mailbox della persona a cui è destinata che provvederà a leggerla.

Possiamo definire il loro ruolo tramite il seguente schema:

mail

 

Il nostro Client di posta rappresenta il punto di partenza ossia il nostro MUA; per client intendiamo outlook express piuttosto che thunderbird o altri client di vostra preferenza.

Nel momento in cui viene richiesto l’invio del messaggio il nostro client contatta il server SMTP ( MTA ), detto anche server di posta in uscita che si occupa di inviare la mail ad altri server tramite il protocollo SMTP e interrogazioni DNS fino a ragigungere il server MTA di destinazione.
!!!!! ATTENZIONE: La mail ancora non è arrivata a destinazione !!!!

A questo punto entra in gioco l’ MDA che si occupa di prelevare la posta dal MTA del destinatario per immagazzinarla nella mail box della persona a cui è destianta.

Infine il destinatario potrà leggere la mail tramite il proprio MUA sfruttando i protocolli POP o IMAP.

 

Dopo questa introduzione cercheremo di scendere più nei dettagli trattando anche la sicurezza:

Su un server di posta ci possono essere domini locali, domini virtuali, alias locali e alias virtuali:

Su un server che fa parte ad esempio del dominio locale miodominio.it gli utenti creati localmente hanno una loro casella di posta elettronica che è formata dal loro nome utente seguito dal nome del dominio.

L’utente pippo e mario creati localmente sul dominio miodominio.it avranno i rispettivi indirizzi di posta: pippo@miodominio.it e mario@miodominio.it
I 2 utenti potranno scambiarsi messaggi email localmente; Stiamo parlando di di alas locali in un dominio locale.
Molto spesso però in un server possono esserci più domini virtuali e più utenti per singolo dominio virtuale.

Un dominio virtuale come ad esempio virtualdomain.it ci consente di definire gli indirizzi di posta da poter utilizzare per tale dominio e qui stiamo parlando di alias virtuali in un dominio virtuale.

Un server di posta inoltre deve avere la disponibilità di un IP Statico e un Reverse DNS:

Cos’è il Reverse DNS???

Tutti noi sappiamo che il servizio DNS Diretto partendo da un nome Host va ad interrogare la zona di risoluzione per quel dominio ottenendo cosi il corrispondente indirizzo IP.

Il Reverse DNS fa la cosa inversa: Ossia partendo da un indirizzo IP verifica l’associazione al nome dell’ Host.
Questa tecnica serve per verificare che chi spedisce la posta sia effettivamente colui che dice di essere.

Per capirsi:

Arriva un messaggio al server di posta dall’IP 1.2.3.4. che dice di essere smtp.miosito.it.

Il server di posta effettua il Reverse DNS su quell’IP e se corrisponde a smtp.miosito.it la mail passa altrimenti viene identificata come SPAM.

Da questo deriva quindi una corretta autenticazione delle mail, e l’accertarsi che il server non sia Open Relay.

Per Relay intendiamo l’invio di email da un server ad un altro mentre per Open Relay si intende un server di posta che non verifica la provenienza di un messaggio prima di inoltrarlo verso la sua destinazione e questo può farlo diventare un server di spam facendo finire il suo IP in qualche black list.

Abbiamo parlato di autenticazione delle mail, vediamo di capire questa cosa tramite i record SPF e DKIM:

 

Il record SPF lavora a livello SMTP preoccupandosi di certificare il mittente.

Se abbiamo ad esempio un dominio, il record SPF consente di indicare quali sono i server utilizzati per l’invio di email per quel dominio impendendo cosi agli spammer di inviare messaggi con indirizzi del mittente falsificati.
Vengono quindi specificati quali sono i server autorizzati a spedire email per conto di quel dominio attraverso la dichiarazione del record SPF a livello di gestione DNS del dominnio.

I server utilizzati per l’invio di email per un dominio vengono chiamati Server MX ( o record mx ).

Se ci sono più Record MX durante l’invio delle mail verrà contattato sempre quello con il valore più basso che rappresenta quello con priorità più alta.

Nel caso in cui il Server MX primario ha dei problemi verranno contattatati gli altri Server MX messi a disposizione seguendo sempre il criterio del valore più basso tra i rimanenti.

Il record DKIM lavora a livello del messaggio certificando il suo contenuto per garantire che la mail ricevuta sia stata scritta dalla persona di quell’indirizzo.

Si fa uso di un sistema a chiave pubblica e privata dove la chiave pubblica viene inserita in un record DNS mentre la chiave privata viene usata per firmare il messaggio dal server SMTP.

L’autenticità viene data dalla firma perchè nel momento in cui si andasse a modificare il contenuto anche la firma viene alterata.

 

Dopo aver descritto alcuni cenni teorici, andiamo a vedere come mettere in pratica l’installazione e la configurazione di Postfix:

Procediamo alla sua installazione:

yum install -y postfix

Avviamo il servizio:

service postfix start

 

Adesso passiamo alla sua configurazione:

E’ consigliabile prima di iniziare, fare una copia del file di configurazione main.cf che si trova in /etc/postfix tramite il comando cp

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

 

Andiamo a vedere come configurare il file main.cf andando a capire il significato dei vari parametri:

 

myorigin: Definisce quale dominio usare per inviare la posta. Di solito viene modificato con il dominio di cui l host fa parte

myhostname: Definisce l hostname della macchina locale nella forma FQDN. Infatti non possiamo inserire solamente l’hostname della macchina ma lo dobbiamo inserire nella sua forma completa ossia FQDN (nome_host+nomedominio).

inet_interfaces: Di default è impostato a localhost.
Questo significa che la posta è accettata solamente dal server stesso ma se decidiamo che deve accettare posta anche da altri host dobbiamo modificare la sua configurazione.

mydestination: Definisce quali sono i domini di posta locali per i quali il server deve instradare ( consegnare ) localmente le email ai rispettivi utenti locali

mydomain: Definisce il dominio a cui appartiene il server. Di solito è usato il valore presente in $myhostname

mynetworks: Definisce la possibilità di impostare host per host quali sono le macchine che possono usare il nostro server per inoltrare i messaggi.
Questo parametro può essere anche esteso dando la possibilità a tutta i client della rete di usufruire del server, infatti associato a questo parametro ne esiste un altro che si chiama mynetworks_style e può assumere 3 valori: class – subnet – host

mynetworks_style: = subnet Definisce che Postfix potrà inoltrare la posta di tutti i client della sottorete locale. E’ il valore impostato di Default.

mynetworks_style = class Definsce che Postfix potrà inoltrare la posta proveniente da tutti i client della rete, quindi stiamo parlando di client con indirizzi sia di CLASSE A, B o C

mynetworks_style = host Definisce che l’inoltro delle mail sarà effettuato solamente dalla macchina locale

 

Vediamo alcune configurazioni su cui implemetare tali parametri:

Innanzitutto come abbiamo detto in precedenza ogni utente locale sulla macchina ha il proprio indirizzo di posta.

Abbiamo creato l’utente michele sulla nostra macchina che ha FQDN: pc1.talla.it

Vogliamo che solamente gli utenti di questa macchina possano scambiare messaggi.

Vediamo la relativa configurazione del file main.cf:

 

Decommentiamo la seguente riga:

myorigin = $myhostname

 

Inseriamo l’hostname completo della macchina:

myhostname = pc1.talla.it

 

E impostiamo a host il parametro mynetworks_style:

inet_interfaces = localhost

 

Potremmo anche inserire il parametro mydestination visto che stiamo parlando di dominio locale:

mydestination = …….. ……. …….., pc1.talla.it

Nel caso in cui il nostro Server debba ricevere la posta per più domini andremo ad inserirli in fondo alla linea mydestiantion

Riavviamo il servizio e proviamo dall’utente root ad inviare una email all’utente locale michele:

mail michele

mail

Ogni utente locale della macchina ha il suo file con il suo nome dove riceve i messaggi email che si trova in /var/spool/mail.

Il file di michele sarà: /var/spool/mail/michele

E infatti l’utente michele ha ricevuto la mail:

mail2

Proviamo adesso a inviare una email verso l’indirizzo esterno dondy20@gmail.com:

Visto che non è un indirizzo locale dovremo inserire il relayhost ad esempio out.alice.it

Inoltre se non volessimo scrivere tutto l’indirizzo email completo per ogni invio di email potremmo inserire un alias per esempio nicola e “collegarlo” all’indirizzo email relativo.

Per fare ciò entra in gioco il file /etc/aliases

Vediamo la configurazione, inseriremo nel file main.cf il relayhost:

relayhost = out.alice.it

mail3

Riavviamo il servizio e inseriremo nel file /etc/aliases il relativo nome con indirizzo:

service postfix restart

echo “nicola: dondy20@gmail.com” >> /etc/aliases

Daremo il seguente comando per far rileggere il file:

newaliases

mail4

E come vediamo la mail arriva a destinazione

mail5

Nel caso in cui l’utente nicola in questo caso fosse stato un utente locale del sistema nel suo file di spool relativo non gli sarà arrivata nessuna mail

mail6

Potremmo avere il caso in cui una mail inviata sempre dalla stessa macchina locale ad un utente locale debba anche arrivare ad un altro utente, del tipo che le mail inviate a michele debbano arrivare anche a nicola.

Per fare questo editiamo il file /etc/aliases:

mail7

newaliases

 

E vedremo che la mail arriverà in tutti e 2 i file di spool

 

In questi esempi che abbiamo fatto la nostra macchinà potrà inviare email ma solamente se sono generate da essa stessa, mentre se volessimo che i client della nostra rete potessero sfruttare il nostro mail server per invare email non potrebbero farlo.

Vediamo quindi come poter fare questo, ossia consentire ai client della sottorete di usufruire della nostra macchina con Postfix per inviare email agli utenti locali della macchina stessa ( michele per esempio che è stato creato sull’host dove è installato postfix ).

Innanzitutto gli diciamo di accettare email da tutte le interfaccie:

mail8

E di inoltrare tutte le mail provenienti dalla sottorete locale:

mail9

Specificando la tipologia di sottorete:

mail99

Riavviamo Postfix:

service postfix restart

Sulle macchine client inseriamo i classici parametri myorigin e myhostname, inoltre inseriamo come relayhost l’host dove è installato Postfix ( 192.168.0.34 ):

mail999

Sul file aliases gli diamo il giusto alias seguito dal suo indirizzo locale in questo caso di michele:

mail11

Rivviamo Postfix e facciamo rileggere il file aliases:

service postfix restart

newaliases

Proviamo ad inviare una mail a michele:

mail michele

E vedremo che la mail arriverà a destinazione

mail12

Se volessimo che le mail inviate dai vari client della rete arrivassero a michele oltre che nel suo file di spool locale anche ad un indirizzo esterno basterà aggiungerlo nel file /etc/aliases della macchina client.

Sul Server non dobbiamo toccare nulla visto che i parametri sono gia stati configurati precedentemente con gli esempi fatti sopra( mynetworks_style = subnet, mynetworks = 127.0.0.1/8, 192.168.0.0/24 e relayhost = out.alice.it )

mail13

Info about author

Michele Milaneschi

RHCE Consultant