Reti/ Sendmail, il postino che viene da lontano

Facciamo la conoscenza di uno dei server di posta più utilizzato su Internet, Sendmail, e scopriamo come configurarne i servizi di base, con un occhio anche alla sicurezza

La posta elettronica è senza dubbio il vantaggio primario offerto della grande rete: questo servizio è molto importante sia per l'utente casalingo che per le aziende. Non è mio compito analizzare la funzione sociale ed economica dei messaggi di posta elettronica, ma credo sia interessante tentare di spiegare il funzionamento di un server ed in particolare di uno dei server più conosciuti su Internet: Sendmail.

Il programma che si occupa di inoltrare i messaggi e-mail nella rete è un agente di trasporto, il termine tecnico utilizzato è MTA, ovvero Mail Transport Agent. I sistemi MTA sono dei server di posta elettronica che utilizzano il protocollo SMTP (Simple Mail Transport Protocol) per trasferire i messaggi di posta da una sottorete Internet ad un'altra.

Sendmail da decenni è il server di posta maggiormente utilizzato, le sue fortune e la sua storia passano inevitabilmente per i problemi che lo hanno afflitto negli anni passati relativi alla sicurezza dei sistemi informatici nei quali veniva utilizzato. In questo ultimo anno nel mondo dei sistemisti UNIX vanno affermandosi anche nuovi prodotti studiati allo scopo, ma Sendmail comunque accompagna la grande maggioranza delle distribuzioni UNIX/Linux.
Con un po ' di pazienza, è possibile configurare il programma come efficiente ed affidabile agente di trasporto per la posta elettronica. Per la stesura di questo modesto manuale operativo ho utilizzato un sistema Linux Red Hat 6.2 ed ho utilizzato una configurazione minima per garantire l'immediata operatività del servizio.

Configurazione e file utilizzati da Sendmail

Per utilizzare Sendmail come server centrale per la posta elettronica (Central Mail HUB server) è necessario disporre dei seguenti file:

/etc/sendmail.cw
/etc/mail/access
/etc/aliases
/etc/mail/virtusertable
/etc/mail/domaintable
/etc/mail/mailertable
/etc/mail/virtusertable.db
/etc/mail/domaintable.db
/etc/mail/mailertable.db
/etc/sendmail.mc
/etc/sysconfig/sendmail
/etc/rc.d/init.d/sendmail (script)

Per utilizzare Sendmail come client di rete e come server locale è necessario disporre anche dei seguenti file:

/etc/null.mc
/etc/sysconfig/sendmail
/etc/rc.d/init.d/sendmail

Fra i file più importanti per la configurazione ed il funzionamento di Sendmail vi sono /etc/mail/access e /etc/mail/access.db.
Il database "access" viene creato per accettare o rigettare l'invio di posta dai domini selezionati: ad esempio è possibile rifiutare tutta la posta inviata dagli spammers conosciuti. Il database "access" è necessario solo se si vuole utilizzare Sendmail come server principale per la posta elettronica: questo è il file che viene utilizzato contro le consegne non autorizzate. Supponiamo di dover gestire una intranet di un'azienda abbastanza grande, con diverse reti, e si voglia controllare la posta da un singolo server: per fare questo è necessario configurare la consegna utilizzando le direttive contenute nel file /etc/mail/access come segue.

Esempio di file /etc/mail/access:

# il formato del file viene descritto di seguito
# la tabella di seguito utilizza indirizzi di posta elettronica,
# nomi di dominio ed indirizzi IP
#
# spammer@aol.com REJECT
# cyberspammer.com REJECT
# 192.168.212 REJECT
#
# con queste istruzioni vengono rifiutate tutte le e-mail
# provenienti dall'utente spammer@aol.com, tutte le e-mail
# provenienti dal dominio cyberspammer.com e tutte le e-mail
# provenienti da qualsiasi host facente capo
# alla rete 192.168.212.*
#
# i valori che identificano le funzionalità del server sono
#
# OK Accetta la posta anche se il nome del dominio
# non è risolvibile
# RELAY Accetta posta indirizzata dal dominio indicato o permette
# al dominio/network di utilizzare sendmail come server SMTP
# per il RELAY dei messaggi, e' implicito l'OK per ulteriori
# controlli
# REJECT rigetta al mittente con un messaggio generico
# DISCARD scarica completamente il messaggio utilizzando
# "$#discard mailer". Questa opzione funziona solo per gli
# indirizzi di spedizione in sostanza non accetta posta dal
# mittente e non invia nessun messaggio di mancata consegna
# al mittente
#
cyberspammer.com 550 non autorizzato a ricezione
ok.cyberspammer.com OK
sendmail.org OK
128.32 RELAY
#
#
#
#
#
# il server accetta posta dal computer ok.cyberspammer.com ma
# rigetta la posta da qualsiasi altro host facente capo al
# dominio cyberspammer.com, inoltre il server accetta posta
# inviata dal dominio sendmail.org ed autorizza all'invio dei
# messaggi "relay" la rete 128.32.*.*
#
# e' possibile utilizzare il database per bloccare l'indirizzo
# dell'utente basando dunque il controllo sullo "username" che
# e' a capo dell'indirizzo completo di e-mail
#
nome.utente@ 550 non accettiamo messaggi di posta
#
# e' necessario includere il simbolo "@" dopo il nome dell'utente
# per significare al database il tipo di controllo sulla porzione
# nome utente dell'indirizzo di posta elettronica
#
# ecco la configurazione di base del file /etc/mail/access
#
localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY
# fine file

Esempio di file /etc/mail/access.db

Ricordiamo che il file /etc/mail/access è un database, dopo aver generato il file di testo sopracitato è necessario utilizzare l'utility "makemap" per generare la mappa del database, per creare il "access database map" dovrà essere utilizzato il comando seguente:

[root@merlino /root]# makemap hash /etc/mail/access.db < /etc/mail/access

oppure

[root@merlino /root]# cd /etc/mail
[root@merlino /root]# make

Ora andiamo a parlare dei due file /etc/aliases e /etc/aliases.db per gli alias di e-mail.
L'aliasing è il processo di conversione di un nome utente del sistema locale in un altro: esso funziona solo per gli utenti del sistema locale. E' uso convertire un nome generico (root) in uno username reale o convertire un nome in una lista di molti nomi. Sendmail controlla se il nome dell'utente è stato inserito nel database /etc/aliases.db e si regola di conseguenza.

Esempio di file /etc/aliases

#
# @(#) aliases 8.2
# aliases del sistema di base
MAILER-DAEMON: postmaster
postmaster: root
#
# redirezione per gli account generici
bin: root
daemon: root
nobody: root
#
# utente che legge i messaggi di posta di root
root: admin
#
# redirezione verso più utenti (lista)
mlist: paolo,alex,luca,fede
#

Il file /etc/aliases.db è invece la mappa del database di alias (access database map) generata tramite l'utility "makemap":

[root@merlino /root]# makemap hash /etc/aliases.db < /etc/aliases

Questa operazione andrà ripetuta ogni qual volta si aggiunge un alias nel file /etc/aliases.

Il file /etc/sendmail.cw viene letto da Sendmail per ottenere nomi alternativi per l'host locale, nel nostro caso per il sever centrale di gestione della posta elettronica. Si dichiara dunque una lista di nomi di host nella nostra rete che sono previsti per l'host locale che devono essere presenti anche nel campo MX del servizio di risoluzione dei nomi di dominio (DNS). Il file /etc/sendmail.cw è richiesto solo per il server che riceve i messaggi di posta elettronica. Ecco di seguito un esempio del file /ect/sendmail.cw

# sendmail.cw - include anche gli alias per l'host locale
localhost
dominolocale.net
nomehost.dominiolocale.net
smtp.dominiolocale.net
#