Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "Server/Mail"
Differenze tra le versioni 1 e 24 (in 23 versioni)
Versione 1 del 06/04/2007 20.31.14
Dimensione: 18842
Commento: creata pagina portale server
Versione 24 del 13/10/2021 16.27.17
Dimensione: 19547
Autore: ivantu
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 1: Linea 1:
## page was renamed from GuidaMailServer
= Guida alla configurazione di un server Mail =

||<tablestyle="font-size: 0.9em; float: right; width:35%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Indice'''[[BR]][[TableOfContents]]||

== Prima di installare ==

Prendetevi il tempo necessario per pianificare un corretto partizionamento del disco; possibilmente dedicate una partizione apposita per /var/log ed una specifica per /var/spool/mail.

== Che cos'è un MTA e come funziona ==

La gestione della posta elettronica in rete coinvolge 3 attori :
 * un client di posta , che è il programma deputato alla formattazione dei messaggi di posta
 * un mail transport agent , MTA , che è un server che si occupa di instradare la posta al destinatario
 * un delivery agent che è il server che si occupa di consegnare la posta al destinatario

Il meccanismo di instradamento è basato sull'associazione fra dominio di posta elettronica e dominio DNS.

Pertanto il MTA per consegnare la posta verso il destinatario userà query DNS
per effettuare la localizzazione del DA del destinatario.

Nei sistemi UNIX il MTA usa il protoccollo SMTP mentre i DA usano i protocolli POP3 e IMAP.

La fondamentale differenza fra i protocolli per il DA è che POP3 è progettato per il download dei messaggi sulla postazione client del destinatario, mentre IMAP consente di mantenerli sul server.

Entrambi tali protocolli presentano vanataggi e svantaggi.

Inoltre la configuirazione qui presentata è arricchita con filtri anti-spam non nativi di postfix (si usa il prodotto spamassassin) e con un software in grado di coordinare la scansione asincrona dei messaggi di posta attraverso l'uso dei filtri anti-spam e antivirus (questo prodotto è mailscanner).

Naturalmente esamineremo sia la configurazione del MTA per lo smistamento dei messaggi di utenti locali UNIX (ovvero gli utenti di sistema definiti con il comando adduser) che quella che utilizza come backend un DB LDAP (ovvero un servizio di directory standardizzato con gestione degli account di utenti di rete).

== Installazione ==

Aprite una shell ed al prompt dei comandi digitate
{{{
#sudo apt-get -y install postfix

#sudo apt-get -y install postfix-ldap

#sudo apt-get -y install spamassassin

#sudo apt-get -y install dovecot-pop3d

#sudo apt-get -y install dovecot-imapd

#sudo apt-get -y install mailscanner
}}}


== Configurazione del MTA ==

I files di configurazione sono sotto la directory '''/etc/postfix''' ed il file
fondamentale è '''main.cf'''.

Un altro file importante nella configurazione di postfix è '''/etc/aliases''', che contiene
tutti gli alias names degli utenti di posta elettronica.

Ad esempio supponendo di avere un utente di sistema prova si potrà definire
nel file '''aliases''' una entry come alias nel formato seguente:

{{{
#LANGUAGE it
<<BR>>
<<Indice>>
<<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?f=46&t=584194")>>

= Introduzione =

Questa guida illustra come installare e configurare un server mail.

È utile prendersi il tempo necessario per pianificare un corretto partizionamento del disco, possibilmente dedicando una partizione per `/var/log` e una per `/var/spool/mail`.

La gestione della posta elettronica in rete coinvolge tre attori :
 * un client di posta, che è il programma deputato alla formattazione dei messaggi di posta;
 * un Mail Transport Agent, MTA, che è un server che si occupa di instradare la posta al destinatario;
 * un delivery agent, DA, che è il server che si occupa di consegnare la posta al destinatario.

Il meccanismo di instradamento è basato sull'associazione fra dominio di posta elettronica e dominio DNS. Pertanto, il MTA per consegnare la posta verso il destinatario utilizzerà interrogazioni DNS per effettuare la localizzazione del DA del destinatario.

Nei sistemi UNIX, il MTA usa il protocollo SMTP mentre i DA usano i protocolli POP3 o IMAP.

La fondamentale differenza fra i protocolli per il DA è che POP3 è progettato per il download dei messaggi sulla postazione client del destinatario, mentre IMAP consente di mantenerli sul server. Entrambe i protocolli presentano vantaggi e svantaggi.

Inoltre, la configurazione qui presentata è arricchita con filtri anti-spam non nativi di '''postfix''' (si usa il prodotto '''spamassassin''') e con un software in grado di coordinare la scansione asincrona dei messaggi di posta attraverso l'uso dei filtri anti-spam e antivirus (questo prodotto è '''mailscanner''').

Verrà esaminata sia la configurazione del MTA per lo smistamento dei messaggi di utenti locali UNIX (ovvero gli utenti di sistema definiti con il comando '''adduser'''), che quella che utilizza come backend un DB LDAP (ovvero un servizio di directory standardizzato con gestione degli account di utenti di rete).

= Installazione =

[[AmministrazioneSistema/InstallareProgrammi|Installare]] i pacchetti necessari digitando nel [[AmministrazioneSistema/RigaDiComando|terminale]]:{{{
sudo apt-get install postfix postfix-ldap spamassassin dovecot-pop3d dovecot-imapd mailscanner
}}}

{{{#!wiki note
Si ricorda che '''!MailScanner''' è disponibile solo per '''Ubuntu 12.04'''.}}}

Per installare '''!MailScanner''' in versioni precedenti o successive alla 12.04 digitare questi ulteriori comandi:{{{
sudo apt-get install libconvert-binhex-perl libconvert-tnef-perl libdbd-sqlite3-perl libfilesys-df-perl libio-stringy-perl libmime-tools-perl libnet-cidr-perl libole-storage-lite-perl libsys-syslog-perl}}}{{{
wget https://launchpad.net/ubuntu/+archive/primary/+files/mailscanner_4.74.16-1_all.deb}}}{{{
sudo dpkg -i mailscanner_4.74.16-1_all.deb
}}}

= Mail transfer agent =

I file di configurazione si trovano nella directory `/etc/postfix` e il file fondamentale è `main.cf`. Un altro file importante nella configurazione di postfix è `/etc/aliases`, che contiene tutti gli alias degli utenti di posta elettronica.

== File /etc/aliases ==

Supponendo di avere un utente di sistema '''prova''', è possibile definire nel file `/etc/aliases` un alias come segue:{{{
Linea 64: Linea 51:

che indica semplicemente che l'utente di sistema prova è identificato dal sistema MTA
come p.miodominio.com.

I
l corrispondente file di configurazione per i servizi LDAP è '''/etc/postfix/ldap-aliases.cf''' e contiene le seguenti 2 direttive:

{{{
che indica semplicemente che l'utente di sistema '''prova''' è identificato dal sistema MTA come '''p.miodominio.com'''.

== File /etc/postfix/ldap-aliases.cf ==

È i
l corrispondente file di configurazione per i servizi LDAP e contiene le seguenti direttive:{{{
Linea 75: Linea 60:

dove ovviamente dovete sostituire miodominio e com con il vostro basedn del dominio di ricerca LDAP.

Ora procediamo alla configurazione di postfix nel modo seguente:

Eseguiamo il comando da terminale :

{{{
#vi /etc/postfix/main.cf
}}}

Modifichiamo il messaggio di benvenuto cambiando la riga:

{{{
dove ovviamente è necessario sostituire '''miodominio''' e '''com''' con il proprio ''basedn'' del dominio di ricerca LDAP.

== File /etc/postfix/main.cf ==

Per configurare '''postfix''', aprire il file `/etc/postfix/main.cf` e modificare il messaggio di benvenuto: {{{
Linea 91: Linea 67:

Andiamo avanti nel modo seguente:

{{{
Quindi modificare le righe seguenti di conseguenza: {{{
Linea 97: Linea 70:
mydomain = dominio di posta (=vostro dominio DNS nel caso di LAN) mydomain = dominio di posta (=dominio DNS nel caso di LAN)
Linea 101: Linea 74:

questo dice al MTA che deve controllare per la risoluzione dei nomi utente prima il file /etc/aliases e poi il DB LDAP referenziato dalle direttive nel file /etc/aliases

{{{
myorigin = $mydomain
}}}

questo dice che voi inviate posta soltanto per il vostro dominio

{{{
mydestination = dominio di posta (=vostro dominio DNS nel caso di LAN) , localhost.localdomain,localhost
}}}

questo dice che voi accettate posta indirizzata soltanto al vostro dominio o a localhost (127.0.0.1)

{{{
inet_interfaces = all
}}}

questo dice che il MTA all'avvio sta in ascolto su tutte le interfacce di rete (potreste voler cambiare questo comportamento!!)

{{{
smtpd_client_restrictions = reject_maps_rbl , reject_unknown_client , permit
}}}

qui cominciano le restrizioni d'accesso native di postfix: questa dice di non accettare posta indirizzata o provenienete da siti di possibili spammers (indicati nella direttiva '''maps_rbl_domains''') e di non accettare connessioni da clients che non hanno record A in DNS

{{{
smtpd_sender_restrictions = reject_unknown_sender_domain , reject_non_fqdn_sender , permit
}}}

questa restrizione dice di non smistare posta proveniente da un mittente ignoto

{{{
smtpd_recipient_restrictions = reject_unauth_destination , reject_non_fqdn_recipient , reject_unknown_recipient_domain , permit
}}}

questa restrizione dice di non effettuare il relay (ovvero di non permettere di inviare posta elettronica da mittenti
che non siano di questo sito) e di non smistare posta proveniente da un mittente ignoto

'''N.B. : ''' la restrizione '''reject_unauth_destination''' dice al server di posta di impedire l'open relay e sostituisce la direttiva '''check_relay_domains'''

{{{
smtpd_helo_restrictions = reject_invalid_hostname , reject_non_fqdn_hostname , reject_unknown_hostname , permit
}}}

queste restrizioni dicono di non accettare il saluto dal client che non risponda con un hostname esistente nel DNS (respingere se l'hostname presentato è invalido , non è nel formato FQDN o non ha record A o PTR nè MX nel DNS).Queste restrizioni sono molto importanti , poichè ad oggi molti spammers fanno uso di comandi helo-faked per velocizzare la spedizione di spam.

{{{
maps_rbl_domains = rbl.maps.vix.com,dul.maps.vix.com,relays.mail-abuse.org
}}}

questa restrizione dice di non smistare posta proveniente da o indirizzata verso i domini
elencati

Ora potete avviare il servizio postfix del MTA con il comando:

{{{
#/etc/init.d/postfix start
}}}

Tutti i log files inerenti lo startup dei servizi postfix ed i relativi accessi sono contenuti nei files '''/var/log/mail.warn''', '''/var/log/mail.err''', '''/var/log/mail.info'''.

== Configurazione avanzata della sicurezza del MTA ==

Qualora vogliate aggiungere un pò di sicurezza in più c'è un'ulteriore direttiva da usare nel file '''main.cf''' per limitare lo spamming ed è la seguente:

{{{
smtp_helo_restrictions = reject_invalid_hostname , reject_non_fqdn_hostname , reject_unknown_hostname , permit_nak*ed_ip_address , permit
}}}

questa restrizione opera nel modo seguente :

 * rifiuta l'accesso al servizio per client che non rispondono al messaggio di benvenuto del server Postfix con un nome host valido (gli spammers lo fanno spesso per risparmiare tempo)
 * rifiuta l'accesso al servizio MTA se il nome host passato di seguito al comando helo non è un fqdn hostname (cioè della forma mail.example.com)
 * rifiuta l'accesso al servizio MTA se l'hostname che segue il comando helo non può essere risolto (questo capita quando lo spammer mette di seguito al comando helo una stringa casuale , allora l'MTA interroga un DNS per risolvere il nome host immesso , se non lo trova rifiuta l'accesso)
 * consente l'accesso se di seguito al comando helo viene concatenato un IP

come vedete in coda viene messa la direttiva '''permit''' che dice che al di fuori delle restrizioni applicate tutto il resto viene accettato.

Applicate queste restrizioni con moderazioni perchè potrebbero impedire al servizio di funzionare correttamente.

== Configurazione del DA ==

Per la configurazione del DA si proceda come segue :
Eseguite il comando:

{{{
#vi /etc/dovecot/dovecot.conf
}}}

e modificate la riga protocols come segue :

{{{
L'ultima stringa dice al MTA che deve controllare, per la risoluzione dei nomi utente, prima il file `/etc/aliases` e poi il database LDAP referenziato dalle direttive nel file `/etc/aliases`.

Di seguito vengono riportate le direttive presenti nel file:

 * '''myorigin = $mydomain'''<<BR>>indica che si invia posta soltanto per il proprio dominio
 * '''mydestination = dominio di posta, localhost.localdomain, localhost'''<<BR>>(N.B. dominio di posta = dominio DNS nel caso di LAN) indica che si accetta posta indirizzata soltanto al proprio dominio o a localhost (127.0.0.1).
 * '''inet_interfaces = all'''<<BR>>indica che il MTA all'avvio sta in ascolto su tutte le interfacce di rete.
 * '''smtpd_client_restrictions = reject_maps_rbl , reject_unknown_client , permit'''<<BR>>iniziano le restrizioni d'accesso native di postfix: questa indica di non accettare posta indirizzata o provenienete da siti di possibili spammers (indicati nella direttiva '''maps_rbl_domains''') e di non accettare connessioni da clients che non hanno record A in DNS.
 * '''smtpd_sender_restrictions = reject_unknown_sender_domain , reject_non_fqdn_sender , permit'''<<BR>>questa restrizione evita lo smistamento di posta proveniente da un mittente ignoto.
 * '''smtpd_recipient_restrictions = reject_unauth_destination , reject_non_fqdn_recipient , reject_unknown_recipient_domain , permit'''<<BR>>questa restrizione non permette di effettuare il relay (ovvero non permette di inviare posta elettronica da mittenti che non siano di questo sito) e di non smistare posta proveniente da un mittente ignoto.<<BR>>(N.B. La restrizione '''reject_unauth_destination''' dice al server di posta di impedire l'open relay e sostituisce la direttiva '''check_relay_domains''').
 * '''smtpd_helo_restrictions = reject_invalid_hostname , reject_non_fqdn_hostname , reject_unknown_hostname , permit'''<<BR>>queste restrizioni dicono di non accettare il saluto dal client che non risponda con un hostname esistente nel DNS (respingere se l'hostname presentato è invalido , non è nel formato FQDN o non ha record A o PTR nè MX nel DNS). Queste restrizioni sono molto importanti, poichè ad oggi molti spammers fanno uso di comandi helo-faked per velocizzare la spedizione di spam.
 * '''maps_rbl_domains = rbl.maps.vix.com,dul.maps.vix.com,relays.mail-abuse.org'''<<BR>>questa restrizione indica di non smistare posta proveniente da o indirizzata verso i domini elencati.

== Avvio di postfix ==

Ora può essere il servizio postfix del MTA con il comando:{{{
/etc/init.d/postfix start
}}}

Tutti i log files inerenti lo startup dei servizi '''postfix''' ed i relativi accessi sono contenuti nei files `/var/log/mail.warn`, `/var/log/mail.err`, `/var/log/mail.info`.

== Ulteriore livello sicurezza ==

Par aggiungere un maggiore livello sicurezza, un'ulteriore direttiva da utilizzare nel file `main.cf` per limitare lo spam è la direttiva:
 * '''smtp_helo_restrictions = reject_invalid_hostname , reject_non_fqdn_hostname , reject_unknown_hostname , permit_nak*ed_ip_address , permit'''

Questa restrizione opera nel modo seguente :

 * rifiuta l'accesso al servizio per client che non rispondono al messaggio di benvenuto del server Postfix con un nome host valido (gli spammers lo fanno spesso per risparmiare tempo);
 * rifiuta l'accesso al servizio MTA se il nome host passato di seguito al comando helo non è un fqdn hostname (cioè della forma mail.example.com);
 * rifiuta l'accesso al servizio MTA se l'hostname che segue il comando ''helo'' non può essere risolto (questo capita quando lo spammer mette di seguito al comando ''helo'' una stringa casuale, allora l'MTA interroga un DNS per risolvere il nome host immesso, se non lo trova rifiuta l'accesso);
 * consente l'accesso se di seguito al comando ''helo'' viene concatenato un IP.

La direttiva '''permit''' in fondo alla stringa, dice che al di fuori delle restrizioni applicate tutto il resto viene accettato.

{{{#!wiki note
Restrizioni di questo tipo sono comunque da utilizzare con moderazioni perchè potrebbero impedire al servizio di funzionare correttamente.}}}

= DA =

Per la configurazione del DA (delivery agent) si proceda come segue:

 0. Aprire con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/dovecot/dovecot.conf`.
 0. Impostare il parametro '''protocols''' come segue:{{{
Linea 196: Linea 119:
}}}

questo abiliterà i servizi pop3(s) e imap(s) alla'avvio di dovecot.

A questo punto per avviare il vostro DA basta eseguire il comando :

{{{
#/etc/init.d/dovecot start
}}}

ed esaminando l'output del comando '''ps -A|grep dovecot''' noterete che il servizio
si è avviato con successo.

== Configurazione del servizio WebMail ==

Il servizio di posta elettronica fruibile dal browser Web, ''webmail'', richiede che siano installati il web server e il programma squirrelmail per l'accesso alle mailboxes attraverso il browser web.

Ora si procede all'installazione di apache2 e di squirrelmail con i comandi :

{{{
#sudo apt-get -y install apache2

#sudo apt-get -y install squirrelmail
}}}

Per predisporre squirrelmail alla gestione della posta elettronica in modalità
protetta (attraverso l'uso di certificati con SSL server-side) si userà il comando per generare
un certificato per il server web :

{{{
#apache2-ssl-certificate -days 3650
}}}

dove 3650 è la durata di validità del certificato (10 anni, cambiarlo a proprio piacimento
se si vuole).

A questo punto procedere all'aggiunta di un nuovo Virtual Host nel file
'''/etc/apache2/sites-enabled/000-default''' come segue :

{{{
}}}questo abiliterà i servizi pop3(s) e imap(s) alla'avvio di dovecot.
 0. Avviare il DA basta eseguire il comando:{{{
sudo /etc/init.d/dovecot start
}}}
 0. Attraverso l'output del comando:{{{
'''ps -A|grep dovecot''' noterete che il servizio
}}}è possibile verificare che il programma si sia avviato con successo.

= Web mail =

Il servizio di posta elettronica fruibile dal browser web, '''webmail''', richiede che siano installati il web server e il programma '''!SquirrelMail''' per l'accesso alle mailboxe attraverso il browser web.

 0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] i pacchetti [[apt://apache2,squirrelmail|apache2, squirrelmail]].
 0. Per predisporre squirrelmail alla gestione della posta elettronica in modalità protetta (attraverso l'uso di certificati con SSL server-side), digitare il comando per generare un certificato per il server web:{{{
sudo apache2-ssl-certificate -days 3650
}}}dove 3650 è la durata di validità del certificato (10 anni, modificabile a seconda delle proprie esigenze).
 0. Per creare un nuovo ''virtual host'' aprire con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] modificare il file `/etc/apache2/sites-enabled/000-default` nel seguente modo: {{{
Linea 237: Linea 137:
Linea 239: Linea 138:
Linea 241: Linea 139:
Linea 243: Linea 140:
Linea 245: Linea 141:
}}}

dove ovviamente si sosituiranno 192.168.0.1 e webmail.example.com con l'IP e l'alias name
del server di posta web.

Per sperimentare l'accesso attraverso imap da browser web non resta che eseguire i comandi :

{{{
#/etc/init.d/dovecot start
  
#/etc/init.d/apache2 start
}}}

ed immettere il comando da shell :

{{{
#firefox https://webmail.example.com:80 ed il gioco è fatto!
}}}

== Configurazione di MailScanner ==

Per ottenere un ulteriore livello di protezione sul vostro MTA e DA potete
associare una scansione antivirus ed un filtro anti-spam che effettuino
il controllo di ogni messaggio di posta smistato dal vostro sistema.

Come detto vi occorre il software MailScanner e un AntiVirus
(nell'esempio riportiamo Clamav) che si installano nel modo seguente :

{{{
#sudo apt-get -y install mailscanner

#sudo apt-get -y install clamav-daemon

#sudo apt-get -y install clamav-freshclam
}}}


Effettuata l'installazione si proceda con il comando :

{{{
#vi /etc/MailScanner/MailScanner.conf
}}}

e si modifichino le righe seguenti :

{{{
}}}dove si sosituiranno '''192.168.0.1''' e '''webmail.example.com''' con '''IP''' e '''alias name''' del server di posta web.

Per sperimentare l'accesso attraverso imap da browser web (nell'esempio qui sotto '''Firefox'''), digitare i comandi:{{{
sudo /etc/init.d/dovecot start}}}{{{
sudo /etc/init.d/apache2 start}}}{{{
sudo firefox https://webmail.example.com:80
}}}

= MailScanner =

Per ottenere un ulteriore livello di protezione sul proprio MTA e DA è possibile associare una scansione antivirus ed un filtro anti-spam che effettuino il controllo di ogni messaggio di posta smistato dal vostro sistema. Nell'esempio al già presente '''!MailScanner''' viene utilizzato l'antivirus '''Clamav'''.

 0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] i pacchetti [[apt://clamav-daemon,clamav-freshclam|clamav-daemon, clamav-freshclam]].
 0. Aprire con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/MailScanner/MailScanner.conf` per modificarne i parametri nel seguente modo:{{{
Linea 292: Linea 156:
Linea 294: Linea 157:
Linea 296: Linea 158:
Linea 298: Linea 159:
Linea 300: Linea 160:
Linea 302: Linea 161:
Linea 304: Linea 162:
Linea 306: Linea 163:
}}}

a questo punto
salvate e riavviate mailscanner con il comando :

{{{
}}}salvare e quindi chiudere il file.
 0. R
iavviate '''!MailScanner''' con il comando:{{{
Linea 313: Linea 167:

Controllate il corretto avvio in '''/var/log/syslog''' e con il comando
'''ps -A|grep mailscanner'''.


== Performance Tuning ==

Il performance tuning dipende da alcuni parametri del vostro mail server :

 * '''process availability'''

 * '''CPU speed'''

 * '''DNS lookup time'''

 * '''disk I/O speed'''

 * '''network throughput'''

Come effettuare il tuning del '''process availability''' :

 * modificate il max numero di processi di postfix per rispondere ai picchi di carico
in '''main.cf''' :

{{{
 0. È possibile controllare il corretto avvio in `/var/log/syslog` e tramite il comando:{{{
ps -A|grep mailscanner
}}}

= Migliorare le prestazioni =

Il settaggio delle prestazioni dipende da alcuni parametri del mail server, seguono alcuni cenni:

 * '''Process availability''': per rispondere ai picchi di carico di '''Postfix''' è possibile modificare il numero massimo dei processi nel file `/etc/postfix/main.cf`:{{{
Linea 340: Linea 178:

L'ottimizzazione procede attraverso l'analisi dei fattori che condizionano le prestazioni
di un Mail Server , ovvero :

* '''CPU limitation''' :
se il carico sul vostro
processore supera il 50% (esaminatelo con top ed individuate se la causa è imputabile ai processi di postfix) allora cambiate processore!

 * '''DNS lookup''' :
poichè il primo passo per inoltrare emails sono queries DNS , se il tempo di risposta per una query DNS è alto pensate a ottimizzare il vostro DNS o meglio ancora implementate un caching NS al vostro interno per velocizzare le risoluzioni


 * '''Disk I/O limitation''' :
usat
e dischi SCSI (postfix usa code di mail in /var/spool/mail e sposta i dati da una coda all'altra) e montate le partizioni con l'opzione noatime (postfix non usa i timestamps)


== Sicurezza dei protocolli di posta ==

Il protocollo SMTP non è stato progettato per essere sicuro.

Come vedete p
er spedire un messaggio di posta elettronica non è necessaria alcuna autenticazione da parte dell'utente , pertanto chiunque può tentare di sfruttare problemi di sicurezza di un server SMTP.

Vi chiederete allora se è possibile utilizzare meccanismi di protezione per aumentare la sicurezza dei vostri servers SMTP,in particolare per crittografare un'intera sessione (ovvero dal primo all'ultimo bit).

L'uso dei certificati digitali così come quello della Strong Authentication con SASL è possibile attraverso opportuni moduli messi a disposizione dai programmi di posta stessi , il problema è (per fare l'esempio della protezione tramite certificati) che ciò che verrà crittografato è il traffico fra il client ed il vostro server di posta , ma al di fuori del vostro server (ovvero fino al server SMTP che smista la posta per il dominio del destinatario) le comunicazioni avverranno in chiaro...questo a meno che anche il dominio remoto non utilizzi un sistema di certificati come il vostro.

Questo perchè la protezione di una sessione SMTP con certificati richiede che tutte le entità che comunicano abbiano un certificato verificabile da una Root CA...pertanto se anche uno solo dei vostri destinatari non avrà un certificato , allora la comunicazione fra il vostro server di posta ed il server di posta di quel dominio avverrà in modo non protetto.

E considerazioni analoghe possono essere fatte per i metodi di autenticazione forte che utilizzano la libreria SASL.

Pertanto l'implementazione di meccanismi di protezione delle intere sessioni di posta è subordinata all'implementazione di una PKI globale (cioè estesa a tutti i domini di posta da voi raggiungibili) nel caso dei certificati digitali e di un protocollo SMTP che richieda l'autenticazione di default nel caso di SASL.
 * '''CPU speed''': se il carico sul processore supera il 50% e tramite il comando '''top''' o altra applicazione risultasse imputabile ai processi di '''Postfix''' è possibile che sia necessario l'utilizzo di un processore più potente.
 * '''DNS lookup time''': poichè il primo passo per inoltrare e-mail sono query DNS, se il tempo di risposta per una query DNS è alto occorre ottimizzare il DNS o meglio ancora implementare un caching NS interno per velocizzare le risoluzioni.
 * '''Disk I/O speed''': usare dischi SCSI (postfix usa code di mail in /var/spool/mail e sposta i dati da una coda all'altra) e montare le partizioni con l'opzione '''noatime''' (postfix non usa i timestamps).

= Sicurezza dei protocolli di posta =


== Protocollo SMTP ==

Il protocollo SMTP non è stato progettato per essere sicuro. Per spedire un messaggio di posta elettronica non è necessaria alcuna autenticazione da parte dell'utente, pertanto chiunque può tentare di sfruttare problemi di sicurezza di un server SMTP.

''È possibile utilizzare meccanismi di protezione per aumentare la sicurezza dei server SMTP, in particolare per crittografare un'intera sessione?''<<BR>>
L'uso dei certificati digitali così come quello della Strong Authentication con SASL è possibile attraverso opportuni moduli messi a disposizione dai programmi di posta stessi, il problema è (per fare l'esempio della protezione tramite certificati) che ciò che verrà crittografato è il traffico fra il client ed il proprio server di posta, ma al di fuori del proprio server (ovvero fino al server SMTP che smista la posta per il dominio del destinatario) le comunicazioni avverranno in chiaro. Questo a meno che anche il dominio remoto non utilizzi un sistema di certificati come il proprio.

Questo perchè la protezione di una sessione SMTP con certificati richiede che tutte le entità che comunicano abbiano un certificato verificabile da una Root CA. Se anche uno solo dei propri destinatari non avrà un certificato, allora la comunicazione fra il proprio server di posta ed il server di posta di quel dominio avverrà in modo non protetto.

Considerazioni analoghe possono essere fatte per i metodi di autenticazione forte che utilizzano la libreria SASL.

Pertanto l'implementazione di meccanismi di protezione delle intere sessioni di posta è subordinata all'implementazione di una PKI globale (cioè estesa a tutti i domini di posta da noi raggiungibili) nel caso dei certificati digitali e di un protocollo SMTP che richieda l'autenticazione di default nel caso di SASL.
Linea 373: Linea 199:
Pertanto dovete valutare se vale la pena implementare all'interno della vostra azienda la protezione delle sessioni SMTP con questi metodi.
Questo potrebbe fare al caso vostro se volete proteggere le comunicazioni interne , ma quelle con l'esterno resteranno sempre esposte al rischio di attacchi e violazioni.
Pertanto occorre valutare se vale la pena implementare all'interno della propria azienda la protezione delle sessioni SMTP con questi metodi. Questo potrebbe fare al proprio caso si vuole proteggere le comunicazioni interne, ma quelle con l'esterno resteranno sempre esposte al rischio di attacchi e violazioni.
Linea 376: Linea 201:
Per fare un esempio concreto se state gestendo un sistema di posta fra N aziende consociate che si scambiano dati sensibili , allora potreste voler creare una PKI ed utilizzare i certificati emessi per garantire l'integrità e la confidenzialità delle informazioni scambiate durante le sessioni. Tuttavia deve esservi chiaro che tutte le sessioni di posta con domini esterni a tali consociate non saranno prote*tte.

E per quanto riguarda i protocolli POP3 e IMAP , la cosa è anche peggiore.

I clients POP3 e IMAP nella loro configurazione standard inviano le credenziali di autenticazione dell'utente di posta in chiaro sulla rete...
Pertanto chiunque sarà in grado di catturarle avrà una facile base di accesso al vostro sistema.

La protezione tramite SASL o certificati digitali è sempre possibile , ma come spiegato per essere realmente utile dovrebbe riguardare tutti i domini da cui ricevete la posta , non soltanto il vostro.

Tuttavia se non è possibile assicurare una protezione globale di un'intera sessione di posta, la crittografia a chiave pubblica rende comunque possibile proteggere almeno i dati da voi scambiati in un messaggio...cioè il contenuto di tale messaggio oltre che file allegati.

Questo è la'rgomento del paragrafo seguente.


== Protezione di messaggi con GPG ==

GPG (Gnu Privacy Guard) è un programma che utilizza la crittografia a chiave asimmetrica per garantire la confidenzialità e l'integrità delle informazioni scambiate in un messaggio di posta.

Per utilizzarlo dovete installare su tutte le postazioni client il pacchetto gpg con il comando :

{{{
#sudo apt-get -y install gpg
}}}

Pertanto voi potete crittografare il contenuto di un messaggio di posta utilizzando la chiave pubblica dell'utente al quale volete spedirlo e firmare il file crittografato con la vostra chiave privata in modo da assicurarne l'autenticità.

Descriviamo con un esempio pratico il flusso delle azioni che l'utente '''pippo@example.com''' deve fare per spedire un messaggio protetto all'utente '''pluto@prova.edu'''.

 * L'utente pippo crea la sua coppia di chiavi privata/pubblica con il comando

{{{
#gpg --gen-key
}}}

Selezionare '''1''' come algoritmo ('''ElGamal''') per poter utilizzare le chiavi per la cifratura e la firma.
Per fare un esempio concreto, se si sta gestendo un sistema di posta fra N aziende consociate che si scambiano dati sensibili, allora potrebbe essere creata una PKI ed utilizzare i certificati emessi per garantire l'integrità e la confidenzialità delle informazioni scambiate durante le sessioni. Tuttavia deve essere chiaro che tutte le sessioni di posta con domini esterni a tali consociate non saranno protette.

== Protocolli POP3 e IMAP ==

E per quanto riguarda i protocolli POP3 e IMAP, le cose sono addirittura peggiori. I client POP3 e IMAP nella loro configurazione standard inviano le credenziali di autenticazione dell'utente di posta in chiaro sulla rete, pertanto chiunque sarà in grado di catturarle avrà una facile base di accesso al proprio sistema.

La protezione tramite SASL o certificati digitali è sempre possibile, ma come spiegato per essere realmente utile dovrebbe riguardare tutti i domini da cui viene riceveta la posta, non soltanto il il proprio.

Tuttavia se non è possibile assicurare una protezione globale di un'intera sessione di posta, la crittografia a chiave pubblica rende comunque possibile proteggere almeno i dati scambiati in un messaggio, cioè il contenuto di tale messaggio oltre che file allegati. Questo è l'argomento del seguente capitolo.

= Protezione di messaggi con GPG =

'''GPG''' (Gnu Privacy Guard) è un programma che utilizza la crittografia a chiave asimmetrica per garantire la confidenzialità e l'integrità delle informazioni scambiate in un messaggio di posta.

'''GPG''' è [[AmministrazioneSistema/InstallareProgrammi|installabile]] attraverso il pacchetto [[apt://gpg|gpg]] e attraverso di esso sarà possibile crittografare il contenuto di un messaggio di posta utilizzando la chiave pubblica dell'utente al quale si vuole spedire e firmare il file crittografato con la propria chiave privata in modo da assicurarne l'autenticità.

{{{#!wiki note
Per maggiori informazioni consultare la pagina [[Sicurezza/GnuPg|GnuPg]]. Viene qui riportato un esempio pratico in cui due utenti si scambiano messaggi crittati tramite '''GPG'''.}}}

Supponiamo di avere l'utenti '''pippo@example.com''' che vuole spedire un messaggio protetto all'utente '''pluto@prova.edu'''.

 0. L'utente '''pippo''' crea la sua coppia di chiavi privata/pubblica con il comando:{{{
gpg --gen-key
}}}selezionando '''1''' come algoritmo ('''!ElGamal''') per poter utilizzare le chiavi per la cifratura e la firma.
 0. '''pippo''' visualizza le chiavi create con il comando:{{{
gpg --list-keys
}}}
 0. '''pippo''' esporta la sua chiave pubblica nel repository comune utilizzando i comandi:{{{
gpg --export -o pippo}}}{{{
sftp pippo@publickeys:/keys/pippo
}}}
 0. '''pippo''' preleva la chiave pubblica di '''pluto@prova.edu''' dalla directory '''/keys''' sul server '''publickeys''' (che funge da repository comune di tutte le chiavi pubbliche degli utenti del sistema di posta comune) e la importa nel suo DB delle chiavi (generato con ''gpg --gen-key''):{{{
sftp pippo@publickeys:/keys/pluto}}}{{{
gpg --import pluto
}}}questo metterà la chiave di pluto nella directory corrente di pippo.
 0. '''pippo''' ora crittografa il messaggio di posta contenuto nel file '''README.txt''' con la chiave pubblica di pluto e lo firma con la sua chiave privata:{{{
gpg -se -r pluto README.txt
}}}
 0. '''pippo''' spedisce il messaggio '''README.txt.gpg''' a '''pluto@prova.edu''' usando il suo mail server.
 0. '''pluto''' importa la chiave pubblica di pippo con il comando:{{{
sftp pluto@publickeys:/keys/pippo}}}{{{
gpg --import pippo
}}}
 0. L'utente '''pluto''' va a decifrare il messaggio con il comando:{{{
gpg -o README.txt -d README.txt.gpg
}}}
 0. Se pippo visualizza un messaggio del tipo:{{{
'''Good signature...'''
}}}allora vuol dire che il messaggio non è stato alterato durante la consegna, altrimenti in caso di compromissione visualizzerà un messaggio del tipo:{{{
'''Bad Signature...'''
}}}

= Ulteriori risorse =

 * [[http://www.postfix.org/|Sito ufficiale del progetto Postfix]]
 * [[http://www.dovecot.org/|Sito ufficiale del progetto Dovecot]]
 * [[http://www.squirrelmail.org/|Sito ufficiale del progetto SquirrelMail]]
Linea 412: Linea 259:
 * pippo visualizza le chiavi create con il comando

{{{
#gpg --list-keys
}}}

 * pippo esporta la sua chiave pubblica nel repository comune utilizzando il comando
{{{
#gpg --export -o pippo
#sftp pippo@publickeys:/keys/pippo
}}}

 * pippo preleva la chiave pubblica di '''pluto@prova.edu''' dalla directory '''/keys''' sul server '''publickeys''' (che funge da repository comune di tutte le chiavi pubbliche degli utenti del sistema di posta comune) e la importa nel suo DB delle chiavi (generato con gpg --gen-key)

{{{
#sftp pippo@publickeys:/keys/pluto
#gpg --import pluto
}}}

questo metterà la chiave di pluto nella directory corrente di pippo.

 * pippo ora crittografa il messaggio di posta contenuto nel file '''README.txt''' con la chiave pubblica di pluto e lo firma con la sua chiave privata

{{{
#gpg -se -r pluto README.txt
}}}

 * pippo spedisce il messaggio '''README.txt.gpg''' a pluto@prova.edu usando il suo mail server
 
 * pluto importa la chiave pubblica di pippo con il comando
{{{
#sftp pluto@publickeys:/keys/pippo
#gpg --import pippo
}}}

 * l'utente pluto va a decifrare il messaggio con il comando

{{{
#gpg -o README.txt -d README.txt.gpg
}}}

 * se pippo visualizza un messaggio del tipo

'''Good signature...'''

allora vuol dire che il messaggio non è stato alterato durante la consegna , altrimenti in caso di compromissione visualizzerà un messaggio del tipo

'''Bad Signature...'''




Autore : Cristiano Valli

CategoryNuoviDocumenti CategoryServer
----
CategoryServer CategoryDaRevisionare


Problemi in questa pagina? Segnalali in questa discussione

Introduzione

Questa guida illustra come installare e configurare un server mail.

È utile prendersi il tempo necessario per pianificare un corretto partizionamento del disco, possibilmente dedicando una partizione per /var/log e una per /var/spool/mail.

La gestione della posta elettronica in rete coinvolge tre attori :

  • un client di posta, che è il programma deputato alla formattazione dei messaggi di posta;
  • un Mail Transport Agent, MTA, che è un server che si occupa di instradare la posta al destinatario;
  • un delivery agent, DA, che è il server che si occupa di consegnare la posta al destinatario.

Il meccanismo di instradamento è basato sull'associazione fra dominio di posta elettronica e dominio DNS. Pertanto, il MTA per consegnare la posta verso il destinatario utilizzerà interrogazioni DNS per effettuare la localizzazione del DA del destinatario.

Nei sistemi UNIX, il MTA usa il protocollo SMTP mentre i DA usano i protocolli POP3 o IMAP.

La fondamentale differenza fra i protocolli per il DA è che POP3 è progettato per il download dei messaggi sulla postazione client del destinatario, mentre IMAP consente di mantenerli sul server. Entrambe i protocolli presentano vantaggi e svantaggi.

Inoltre, la configurazione qui presentata è arricchita con filtri anti-spam non nativi di postfix (si usa il prodotto spamassassin) e con un software in grado di coordinare la scansione asincrona dei messaggi di posta attraverso l'uso dei filtri anti-spam e antivirus (questo prodotto è mailscanner).

Verrà esaminata sia la configurazione del MTA per lo smistamento dei messaggi di utenti locali UNIX (ovvero gli utenti di sistema definiti con il comando adduser), che quella che utilizza come backend un DB LDAP (ovvero un servizio di directory standardizzato con gestione degli account di utenti di rete).

Installazione

Installare i pacchetti necessari digitando nel terminale:

sudo apt-get install postfix postfix-ldap spamassassin dovecot-pop3d dovecot-imapd mailscanner

Si ricorda che MailScanner è disponibile solo per Ubuntu 12.04.

Per installare MailScanner in versioni precedenti o successive alla 12.04 digitare questi ulteriori comandi:

sudo apt-get install libconvert-binhex-perl libconvert-tnef-perl libdbd-sqlite3-perl libfilesys-df-perl libio-stringy-perl libmime-tools-perl libnet-cidr-perl libole-storage-lite-perl libsys-syslog-perl

wget https://launchpad.net/ubuntu/+archive/primary/+files/mailscanner_4.74.16-1_all.deb

sudo dpkg -i mailscanner_4.74.16-1_all.deb

Mail transfer agent

I file di configurazione si trovano nella directory /etc/postfix e il file fondamentale è main.cf. Un altro file importante nella configurazione di postfix è /etc/aliases, che contiene tutti gli alias degli utenti di posta elettronica.

File /etc/aliases

Supponendo di avere un utente di sistema prova, è possibile definire nel file /etc/aliases un alias come segue:

p.miodominio.com:       prova

che indica semplicemente che l'utente di sistema prova è identificato dal sistema MTA come p.miodominio.com.

File /etc/postfix/ldap-aliases.cf

È il corrispondente file di configurazione per i servizi LDAP e contiene le seguenti direttive:

server_host = nome completo del server LDAP

search_base = dc=miodominio,dc=com

dove ovviamente è necessario sostituire miodominio e com con il proprio basedn del dominio di ricerca LDAP.

File /etc/postfix/main.cf

Per configurare postfix, aprire il file /etc/postfix/main.cf e modificare il messaggio di benvenuto:

smtpd_banner = nostro messaggio di benvenuto

Quindi modificare le righe seguenti di conseguenza:

myhostname = FQDN di questo server (es : wilcoyote.example.com)

mydomain = dominio di posta (=dominio DNS nel caso di LAN)

alias_maps = hash:/etc/aliases,ldap:/etc/postfix/ldap-aliases.cf

L'ultima stringa dice al MTA che deve controllare, per la risoluzione dei nomi utente, prima il file /etc/aliases e poi il database LDAP referenziato dalle direttive nel file /etc/aliases.

Di seguito vengono riportate le direttive presenti nel file:

  • myorigin = $mydomain
    indica che si invia posta soltanto per il proprio dominio

  • mydestination = dominio di posta, localhost.localdomain, localhost
    (N.B. dominio di posta = dominio DNS nel caso di LAN) indica che si accetta posta indirizzata soltanto al proprio dominio o a localhost (127.0.0.1).

  • inet_interfaces = all
    indica che il MTA all'avvio sta in ascolto su tutte le interfacce di rete.

  • smtpd_client_restrictions = reject_maps_rbl , reject_unknown_client , permit
    iniziano le restrizioni d'accesso native di postfix: questa indica di non accettare posta indirizzata o provenienete da siti di possibili spammers (indicati nella direttiva maps_rbl_domains) e di non accettare connessioni da clients che non hanno record A in DNS.

  • smtpd_sender_restrictions = reject_unknown_sender_domain , reject_non_fqdn_sender , permit
    questa restrizione evita lo smistamento di posta proveniente da un mittente ignoto.

  • smtpd_recipient_restrictions = reject_unauth_destination , reject_non_fqdn_recipient , reject_unknown_recipient_domain , permit
    questa restrizione non permette di effettuare il relay (ovvero non permette di inviare posta elettronica da mittenti che non siano di questo sito) e di non smistare posta proveniente da un mittente ignoto.
    (N.B. La restrizione reject_unauth_destination dice al server di posta di impedire l'open relay e sostituisce la direttiva check_relay_domains).

  • smtpd_helo_restrictions = reject_invalid_hostname , reject_non_fqdn_hostname , reject_unknown_hostname , permit
    queste restrizioni dicono di non accettare il saluto dal client che non risponda con un hostname esistente nel DNS (respingere se l'hostname presentato è invalido , non è nel formato FQDN o non ha record A o PTR nè MX nel DNS). Queste restrizioni sono molto importanti, poichè ad oggi molti spammers fanno uso di comandi helo-faked per velocizzare la spedizione di spam.

  • maps_rbl_domains = rbl.maps.vix.com,dul.maps.vix.com,relays.mail-abuse.org
    questa restrizione indica di non smistare posta proveniente da o indirizzata verso i domini elencati.

Avvio di postfix

Ora può essere il servizio postfix del MTA con il comando:

/etc/init.d/postfix start 

Tutti i log files inerenti lo startup dei servizi postfix ed i relativi accessi sono contenuti nei files /var/log/mail.warn, /var/log/mail.err, /var/log/mail.info.

Ulteriore livello sicurezza

Par aggiungere un maggiore livello sicurezza, un'ulteriore direttiva da utilizzare nel file main.cf per limitare lo spam è la direttiva:

  • smtp_helo_restrictions = reject_invalid_hostname , reject_non_fqdn_hostname , reject_unknown_hostname , permit_nak*ed_ip_address , permit

Questa restrizione opera nel modo seguente :

  • rifiuta l'accesso al servizio per client che non rispondono al messaggio di benvenuto del server Postfix con un nome host valido (gli spammers lo fanno spesso per risparmiare tempo);
  • rifiuta l'accesso al servizio MTA se il nome host passato di seguito al comando helo non è un fqdn hostname (cioè della forma mail.example.com);
  • rifiuta l'accesso al servizio MTA se l'hostname che segue il comando helo non può essere risolto (questo capita quando lo spammer mette di seguito al comando helo una stringa casuale, allora l'MTA interroga un DNS per risolvere il nome host immesso, se non lo trova rifiuta l'accesso);

  • consente l'accesso se di seguito al comando helo viene concatenato un IP.

La direttiva permit in fondo alla stringa, dice che al di fuori delle restrizioni applicate tutto il resto viene accettato.

Restrizioni di questo tipo sono comunque da utilizzare con moderazioni perchè potrebbero impedire al servizio di funzionare correttamente.

DA

Per la configurazione del DA (delivery agent) si proceda come segue:

  1. Aprire con i privilegi di amministrazione e con un editor di testo il file /etc/dovecot/dovecot.conf.

  2. Impostare il parametro protocols come segue:

    protocols = pop3 pop3s imap imaps
    questo abiliterà i servizi pop3(s) e imap(s) alla'avvio di dovecot.
  3. Avviare il DA basta eseguire il comando:

    sudo /etc/init.d/dovecot start
  4. Attraverso l'output del comando:

    '''ps -A|grep dovecot''' noterete che il servizio
    è possibile verificare che il programma si sia avviato con successo.

Web mail

Il servizio di posta elettronica fruibile dal browser web, webmail, richiede che siano installati il web server e il programma SquirrelMail per l'accesso alle mailboxe attraverso il browser web.

  1. Installare i pacchetti apache2, squirrelmail.

  2. Per predisporre squirrelmail alla gestione della posta elettronica in modalità protetta (attraverso l'uso di certificati con SSL server-side), digitare il comando per generare un certificato per il server web:

    sudo apache2-ssl-certificate -days 3650
    dove 3650 è la durata di validità del certificato (10 anni, modificabile a seconda delle proprie esigenze).
  3. Per creare un nuovo virtual host aprire con i privilegi di amministrazione e con un editor di testo modificare il file /etc/apache2/sites-enabled/000-default nel seguente modo:

    <VirtualHost 192.168.0.1>
    SSLCertificateFile /etc/apache2/ssl/apache.pem
    DocumentRoot /usr/share/squirrelmail
    ServerName webmail.example.com
    </VirtualHost>

    dove si sosituiranno 192.168.0.1 e webmail.example.com con IP e alias name del server di posta web.

Per sperimentare l'accesso attraverso imap da browser web (nell'esempio qui sotto Firefox), digitare i comandi:

sudo /etc/init.d/dovecot start

sudo /etc/init.d/apache2 start

sudo firefox https://webmail.example.com:80

MailScanner

Per ottenere un ulteriore livello di protezione sul proprio MTA e DA è possibile associare una scansione antivirus ed un filtro anti-spam che effettuino il controllo di ogni messaggio di posta smistato dal vostro sistema. Nell'esempio al già presente MailScanner viene utilizzato l'antivirus Clamav.

  1. Installare i pacchetti clamav-daemon, clamav-freshclam.

  2. Aprire con i privilegi di amministrazione e con un editor di testo il file /etc/MailScanner/MailScanner.conf per modificarne i parametri nel seguente modo:

    VirusScanner''' = clamav
    %org-name%''' = Nome della vostra Azienda
    %report-dir%''' = /etc/MailScanner/reports/it
    QuarantineInfections''' = no
    Information Header Value''' = Informazioni personali dell'azienda
    Warning Is Attachment''' = no
    Notices Include Full Headers''' = yes
    Spam List''' = ORDB-RBL SBL+XBL EasyNet-DNSBL BLITZEDALL SORBS-DNSBL spamcop.net
    salvare e quindi chiudere il file.
  3. Riavviate MailScanner con il comando:

    #/etc/init.d/mailscanner restart
  4. È possibile controllare il corretto avvio in /var/log/syslog e tramite il comando:

    ps -A|grep mailscanner

Migliorare le prestazioni

Il settaggio delle prestazioni dipende da alcuni parametri del mail server, seguono alcuni cenni:

  • Process availability: per rispondere ai picchi di carico di Postfix è possibile modificare il numero massimo dei processi nel file /etc/postfix/main.cf:

    default_process_limit = 100
  • CPU speed: se il carico sul processore supera il 50% e tramite il comando top o altra applicazione risultasse imputabile ai processi di Postfix è possibile che sia necessario l'utilizzo di un processore più potente.

  • DNS lookup time: poichè il primo passo per inoltrare e-mail sono query DNS, se il tempo di risposta per una query DNS è alto occorre ottimizzare il DNS o meglio ancora implementare un caching NS interno per velocizzare le risoluzioni.

  • Disk I/O speed: usare dischi SCSI (postfix usa code di mail in /var/spool/mail e sposta i dati da una coda all'altra) e montare le partizioni con l'opzione noatime (postfix non usa i timestamps).

Sicurezza dei protocolli di posta

Protocollo SMTP

Il protocollo SMTP non è stato progettato per essere sicuro. Per spedire un messaggio di posta elettronica non è necessaria alcuna autenticazione da parte dell'utente, pertanto chiunque può tentare di sfruttare problemi di sicurezza di un server SMTP.

È possibile utilizzare meccanismi di protezione per aumentare la sicurezza dei server SMTP, in particolare per crittografare un'intera sessione?
L'uso dei certificati digitali così come quello della Strong Authentication con SASL è possibile attraverso opportuni moduli messi a disposizione dai programmi di posta stessi, il problema è (per fare l'esempio della protezione tramite certificati) che ciò che verrà crittografato è il traffico fra il client ed il proprio server di posta, ma al di fuori del proprio server (ovvero fino al server SMTP che smista la posta per il dominio del destinatario) le comunicazioni avverranno in chiaro. Questo a meno che anche il dominio remoto non utilizzi un sistema di certificati come il proprio.

Questo perchè la protezione di una sessione SMTP con certificati richiede che tutte le entità che comunicano abbiano un certificato verificabile da una Root CA. Se anche uno solo dei propri destinatari non avrà un certificato, allora la comunicazione fra il proprio server di posta ed il server di posta di quel dominio avverrà in modo non protetto.

Considerazioni analoghe possono essere fatte per i metodi di autenticazione forte che utilizzano la libreria SASL.

Pertanto l'implementazione di meccanismi di protezione delle intere sessioni di posta è subordinata all'implementazione di una PKI globale (cioè estesa a tutti i domini di posta da noi raggiungibili) nel caso dei certificati digitali e di un protocollo SMTP che richieda l'autenticazione di default nel caso di SASL.

Questo richiederà probabilmente un nuovo standard per le comunicazioni di posta.

Pertanto occorre valutare se vale la pena implementare all'interno della propria azienda la protezione delle sessioni SMTP con questi metodi. Questo potrebbe fare al proprio caso si vuole proteggere le comunicazioni interne, ma quelle con l'esterno resteranno sempre esposte al rischio di attacchi e violazioni.

Per fare un esempio concreto, se si sta gestendo un sistema di posta fra N aziende consociate che si scambiano dati sensibili, allora potrebbe essere creata una PKI ed utilizzare i certificati emessi per garantire l'integrità e la confidenzialità delle informazioni scambiate durante le sessioni. Tuttavia deve essere chiaro che tutte le sessioni di posta con domini esterni a tali consociate non saranno protette.

Protocolli POP3 e IMAP

E per quanto riguarda i protocolli POP3 e IMAP, le cose sono addirittura peggiori. I client POP3 e IMAP nella loro configurazione standard inviano le credenziali di autenticazione dell'utente di posta in chiaro sulla rete, pertanto chiunque sarà in grado di catturarle avrà una facile base di accesso al proprio sistema.

La protezione tramite SASL o certificati digitali è sempre possibile, ma come spiegato per essere realmente utile dovrebbe riguardare tutti i domini da cui viene riceveta la posta, non soltanto il il proprio.

Tuttavia se non è possibile assicurare una protezione globale di un'intera sessione di posta, la crittografia a chiave pubblica rende comunque possibile proteggere almeno i dati scambiati in un messaggio, cioè il contenuto di tale messaggio oltre che file allegati. Questo è l'argomento del seguente capitolo.

Protezione di messaggi con GPG

GPG (Gnu Privacy Guard) è un programma che utilizza la crittografia a chiave asimmetrica per garantire la confidenzialità e l'integrità delle informazioni scambiate in un messaggio di posta.

GPG è installabile attraverso il pacchetto gpg e attraverso di esso sarà possibile crittografare il contenuto di un messaggio di posta utilizzando la chiave pubblica dell'utente al quale si vuole spedire e firmare il file crittografato con la propria chiave privata in modo da assicurarne l'autenticità.

Per maggiori informazioni consultare la pagina GnuPg. Viene qui riportato un esempio pratico in cui due utenti si scambiano messaggi crittati tramite GPG.

Supponiamo di avere l'utenti pippo@example.com che vuole spedire un messaggio protetto all'utente pluto@prova.edu.

  1. L'utente pippo crea la sua coppia di chiavi privata/pubblica con il comando:

    gpg --gen-key

    selezionando 1 come algoritmo (ElGamal) per poter utilizzare le chiavi per la cifratura e la firma.

  2. pippo visualizza le chiavi create con il comando:

    gpg --list-keys
  3. pippo esporta la sua chiave pubblica nel repository comune utilizzando i comandi:

    gpg --export -o pippo
    sftp pippo@publickeys:/keys/pippo
  4. pippo preleva la chiave pubblica di pluto@prova.edu dalla directory /keys sul server publickeys (che funge da repository comune di tutte le chiavi pubbliche degli utenti del sistema di posta comune) e la importa nel suo DB delle chiavi (generato con gpg --gen-key):

    sftp pippo@publickeys:/keys/pluto
    gpg --import pluto
    questo metterà la chiave di pluto nella directory corrente di pippo.
  5. pippo ora crittografa il messaggio di posta contenuto nel file README.txt con la chiave pubblica di pluto e lo firma con la sua chiave privata:

    gpg -se -r pluto README.txt
  6. pippo spedisce il messaggio README.txt.gpg a pluto@prova.edu usando il suo mail server.

  7. pluto importa la chiave pubblica di pippo con il comando:

    sftp pluto@publickeys:/keys/pippo
    gpg --import pippo
  8. L'utente pluto va a decifrare il messaggio con il comando:

    gpg -o README.txt -d README.txt.gpg 
  9. Se pippo visualizza un messaggio del tipo:

    '''Good signature...'''

    allora vuol dire che il messaggio non è stato alterato durante la consegna, altrimenti in caso di compromissione visualizzerà un messaggio del tipo:

    '''Bad Signature...'''

Ulteriori risorse


CategoryServer CategoryDaRevisionare