[successivo] [precedente] [inizio] [fine] [indice generale]


Capitolo 20.   Sendmail

20.1   Introduzione

Sendmail è diventato nel corso degli anni uno standard de facto per server di posta elettronica nei sistemi Unix. Nonostante non sia ancora un prodotto affidabilissimo offre all'amministratore un'ampia possibiltà  di configurazione.

Pochi si saranno cimentati nella lettura delle centinaia di pagine di documentazione, sia per la loro difficoltà, sia perché esiste un metodo molto più semplice per gestire sendmail. Si può, infatti, creare un file che verrà  interpretato da un preprocessore (m4) il quale genererà  a sua volta il file di configurazione sendmail.cf.

20.2   Configurazione di Sendmail utilizzando m4 (SERVER)

Studieremo un caso, ove vi sia una intranet d'istituto con un dominio fittizzio (inf.besta; mat.besta), che disponga di un collegamento con ip statico, e di un dominio registrato al nic. La posta in uscita potrà  essere instradata verso un altro server (smart host) oppure gestita localmente. La soluzione preferibile è la prima perché evita che eventuali domini momentaneamente irraggiungibili occupino il servizio di posta (quindi banda) inutilmente.

Il file da modificare è /etc/mail/sendmail.mc di seguito riportiamo un esempio.

# file /etc/mail/sendmial.mc

divert(-1)
include(`/usr/lib/sendmail-cf/m4/cf.m4')
VERSIONID(`linux setup for Red Hat Linux')dnl
OSTYPE(`linux')
define(`confDEF_USER_ID',``8:12'')dnl
undefine(`UUCP_RELAY')dnl
undefine(`BITNET_RELAY')dnl
define(`confAUTO_REBUILD')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define('ALIAS_FILE','/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/sendmail.st')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl
FEATURE('redirect')dnl
FEATURE('always_add_domain')dnl
FEATURE('use_cw_file')dnl
FEATURE('local_procmail')dnl
FEATURE(`access_db')dnl
FEATURE(`blacklist_recipients')dnl
FEATURE(`masquerade_envelope')
MASQUERADE_AS('linuxdidattica.org')
MASQUERADE_DOMAIN('inf.besta mat.besta')
MAILER('smtp')dnl
MAILER('procmail')dnl

File di configurazione standard inserito nella distribuzione Red Hat 7.0 più alcune aggiunte.

Attraverso l'uso delle macro è possibile controllare il modo in cui Sendmail spedisce la posta e come si dovrà comportare in determinate situazioni.

Tabella 20.1. Argomenti file sendmail.mc.

OSTYPE Specifica il tipo di sistema operativo che il file di macro dovrà elaborare. La sintassi corretta è:
OSTYPE('os')
DEFINE Server per ridefinire alcune opzioni nel file di configuazione di Sendmail. La sintassi corretta è:
define('option', 'value')
FEATURE Consente di modificare i comportamenti delle caratteristiche predefinite in sendmail. La sintassi corretta è:
FEATURE('option', '[value]')
MASQUERADE_AS Permette a Sendmail di mascherare il nome di dominio con un altro di diverso. Nel nostro esempio il dominio è linuxdidattica.org e non quello locale inf.besta o mat.besta. Il principale utilizzo consiste nel togliere il nome dell'host dal nome di dominio (mail.linuxdidattica.org diventa linuxdidattica.org). La sintassi corretta è:
MASQUERADE_AS('domain')
MASQUERADE_DOMAIN Consente di mascherare domini multipli. La sintassi corretta è:
MASQUERADE_DOMAIN(domain domain ...)
MAILER Specifica quali sono gli agenti di posta che Sendmail dovrà usare per trasportare i messaggi. La sintassi corretta è: MAILER('mailer'). Tra i principali: procmail, smtp. Il tipo local è incluso automaticamente.

20.2.1   FEATURE

Con l'uso della macro FEATURE come detto è possbile modificare alcuni comportamenti di Sendmail. Di seguito una concisa descrizione di alcuni di questi:

Tabella 20.2. Tabella file m4.

allmasquerade Se il masquerade (MASQUERADE_AS) è attivo questa feature consente di mascherare anche l'indirizzo e non solo il dominio. Spedendo mail allo alias classe ogni utente riceverà l'email con il campo "to:" uguale a classe. L'utente classe non esiste, quindi, un'evenutale risposta al messaggio produrrà una email di errore.
always_add_domain Aggiungi il nome del dominio anche se la posta è distribuita localmente.
local_procmail Impone a Sendmail di usare procmail come mailer locale per il trasporto dei messaggi.
masquerade_entire_domain Maschera con il nome di dominio non solo la posta proveniente dall'host locale, ma dagli host interni ad un dominio. In questo contesto Sendmail funge da gateway o HUB di posta.
masquerade_envelope Generalmente solo la testatina del messaggio è macherata. Usare questa direttiva per mascherare tutti campi del messaggio.
use_cw_file Consente a Sendmail di leggere un file che contiene nomi host alternativi per il server di posta. Il file in questione è /etc/sendmail.cw. Per la Red Hat 7 il file in questione è /etc/mail/local-host-names. Utile se il vostro mail server è conosciuto con più nomi: esempio1.it, esempio2.it. Il file deve contenere un host per linea.
virtusertable Consente a domini multipli di essere ospitati su uno stesso server. Il file contente la tabella virtuale conterrà nella prima colonna il dominio virtuale, nella seconda l'utente di destinazione. Lo username dell'indirizzo originale è passato come %1, il dettaglio è passato come %2.
genericstable Consente agli indirizzi di posta non qualificati di essere confrontati con degli indirizzi presenti in una mappa e quindi cambiati con un altro nome utente e nome di dominio. La chiave della tabella contiene o il dominio, o la username non qualificata oppure l'indirizzo di posta completo. Il valore associato alla chiave (la seconda colonna) il nuovo indirizzo utente. Se il nuovo indirizzo non ha dominio esso viene associato con il nome dell'host e se presente con il mascheramento.

Visto in modo molto rapido alcune basilari opzioni non resta altro che creare il file /etc/sendmail.cf: m4 sendmail.mc > /etc/sednmail.cf

Riavviare quindi il servizio Sendmail:

# service sendmail restart Invio

Il file sendmail.cf potrebbe essere utlteriormente modificato per evitare che la connessione parta inutilmente e faccia aumentare gli scatti telefonici; per prima cosa il comando di avvio dovrà  cambiare da:

# file /etc/rc.d/init.d/sendmail
...
daemon /usr/sbin/sendmail $([ "$DAEMON" = yes ] && echo -bd) \
                                  $([ -n "$QUEUE" ] && echo 
-q$QUEUE) -os

Un'altra riga di sendmail.cf va modificata:

# Inizialmente era impostata su False

O HoldExpensive=True

In questa mainera si evita lo svuotamento della cache che sarà  effettuato successivamente inserendo sendmail -q & nel file ip-up (ip-up.local).

Per finire nei flag F=mdFMuX nelle righe che contengono Msmtp, Mesmtp ... inserire la lellera e (che sta per expensive).

20.3   Configurazione di Sendmail utilizzando m4 (WORKSTATION)

20.4   Aliases

Un modo molto semplice per spedire posta a più persone utilizzando un unico alias consiste nell'editare il file /etc/aliases, quest'ultimo contiene una serie di nicknames che puntano ciascuno a più indirizzi di posta.


# file /etc/aliases
Postmaster:    root
net:           utente1, utente2, utente3, utente4, utente5
nome.cognome:  utente1
root:          utente1

Partendo da questo file, ed attraverso il comando newaliases, si genera un altro file di nome /etc/aliases.db che rappresenta il database utilizzato che utilizzerà  sendmail.

Se l'utente utente1 specificasse come destinatario ugonet, il contenuto sarà  spedito agli utenti specificati nella seconda colonna.

Un'osservazione per quanto riguarda la terza riga. L'utente utente1 voleva che il suo indirizzo di posta fosse nome.cognome; purtroppo la userID non può superare la lunghezza massima di otto caratteri quindi, si è preferito utilizzare un alias.

Un buon amministratore non dovrebbe usare mai root come indirizzo di posta per ragionevoli motivi di sicurezza. L'accesso al Server come root deve essere limitato al minimo. Per questi motivi è consigliabile usare sempre un altro indirzzo di mail ed usare un alias che permetta di spedire tutta la posta per root ad un altro utente, nell'esempio utente1.

20.5   VIRTUSERTABLE

La feature virtusertable permette di ospitare più domini virtuali su uno stesso server. Il file contenente la tabella è tipo il seguente esempio:

# file /etc/mail/virtusertable

umbertoz@esempio.it     umbertoz
toni@esempio.it         toni
@esempio2.it            %1@esempio3.it
vecchio+*@esempio.it    nuovo+%2@esempio.it

Le mail indirizzate alla prima colonna vengono reindirizzate all'email della seconda colonna. La parola "%1" sostituisce lo userid, la parola "%2" sostituisce il dettaglio: nel nostro esempio la parola dopo l'asterisco.

Il server deve accettare il relay e la posta in entrata per questi domini, nell'esempio: esempio.it, esempio2.it, esempio3.it. Nel file /etc/mail/local-host-name inserire tutti i domini virtuali (o meglio:tutti i nomi di dominio con cui il server viene riconosciuto), mentre nel file /etc/mail/access compilare le colonne per consentire il relay della posta.

# file /etc/mail/access

localhost.localdomain   RELAY
localhost               RELAY
esempio.it              RELAY
esempio2.it             RELAY
#file /etc/mail/local-host-name

esempio.it
localhost
esempio2.it

20.6   GENERICSTABLE

L'utilizzo della feature genericstable è simile a quello degli aliases, diversamente il nome utente e/o il dominio sono modificati per i messaggi in uscita. Sia, quindi, il nome utente che il dominio vengono mascherati. Il file da modificare è /etc/mail/genericstable; la prima colonna contiente l'indirizzo e-mail di origine, la seconda quello nuovo.

# file /etc/mail/genericstable

utente1 umbertoz
utente2 antonio
toni    utente3@esempio.it

Le aggiunte da effettuare nel file da processare con l'm4 sono le seguenti:


FEATURE(`genericstable', `hash -o /etc/mail/genericstable')
GENERICS_DOMAIN(`dominio1 dominio2')

Solo i domini dominio1 e dominio2 saranno eventualmente mascherati con il nuovo userid e/o domainname come da tabella nel file /etc/mail/genericstable. Per creare la mappa aggiungere nel file di script di avvio di sendmail la parola genericstable primo o dopo virtusertable.

# file /etc/rc.d/init.d/sendmail

start() {
        # Start daemons.

        echo -n "Starting sendmail: "
        /usr/bin/newaliases > /dev/null 2>&1
        for i in genericstable virtusertable access domaintable mailertable ; do
            if [ -f /etc/mail/$i ] ; then
                makemap hash /etc/mail/$i < /etc/mail/$i
            fi
        done
        daemon /usr/sbin/sendmail $([ "$DAEMON" = yes ] && echo -bd) \
                                $([ -n "$QUEUE" ] && echo -q$QUEUE)
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/sendmail
        return $RETVAL
}

Riavviare quindi il servizio.

# service sendmail restart Invio

20.7   PINE

Come "vi" è definito il tool di amministrazione universale anche pine potrebbe essere definito come il programma di posta universale.

Alcuni di voi potrebbero obiettare preferendo mail! Sinceramente trovo PINE robusto affidabile e didattico per chi inizia.

In una rete con molti host la posta, come precedentemente spiegato, dovrebbe essere centralizzata in un unico server. Per default tutta la posta viene spedita nella cartella /var/spool/mail/nomeutente. In ogni host sarebbe sufficiente montare via NFS questa directory ed il gioco è fatto.

In una rete con molti host non è molto conveniente perché aumenterebbe di molto il traffico per la rete locale. Poi risulterebbe dispendioso controllare la lunghezza dei file di posta di ognuno quindi trovare una soluzione per memorizzare i messaggi di posta nella HOME utente potrebbe permettere di eliminare questi incovenienti; unito all'utilizzo delle quota per il disco non porta velocemente a saturazione i dischi, ognuno è responsabile nel contenere lo spazio della propria mailbox.

è sufficiente installare procmail ed il gioco è fatto!. Questo software trasferisce tutta la posta in entrata verso una directory prestabilita. Può anche comportarsi da filtro. è quindi un buon tool di smistamento della posta in entratra.

Per il nostro scopo è sufficiente creare il file /etc/procmailrc (per ogni host presente in rete, compreso il server) ed inserire le seguenti righe:

# file /etc/procmailrc

MAILDIR=$HOME/.mail       # Questa directory deve essere creata (mkdir .mail)
DEFAULT=$MAILDIR/mbox     # Questo file deve essere creato (touch mbox)
LOGFILE=$MAILDIR/from
LOCKFILE=$HOME/.lockmail

Ogni utente dovrà  crearsi la directory .mail/ ed il file mbox all'interno della stessa. È conveniente crearli anche nella directory /etc/skel in modo che ogni nuovo utente trovi "tutto pronto".

Il contenuto della directory /etc/skel viene copiato nella directory di un nuovo utente al momento della sua aggiunta in un server LiNUX.

Ua directory nascosta è preferibile, spesso non interferisce con i "moderni" software di posta che utilizzano grafica.

Nel profile utente o di sistema cercare individuare la variabile MAIL generalmente impostata su /var/spool/mail/$USER e cambiarla in:

# file /etc/profile

MAIL=$HOME/.mail/mbox

Anche PINE deve essere configurato in modo appropriato perché prelevi la posta non dal directory stabilito, bensì da quello imposto. Per ogni host e per il server modificare il file di configurazione /etc/pine.conf.fixed, generalmente vuoto, ed aggiungere la seguente riga:

# file /etc/pine.conf.fixed

inbox-path=.mail/mbox

Non modificare il file /etc/pine.conf perché viene sovrascritto da quello utente $HOME/.pinerc.


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome sendmail.html

[successivo] [precedente] [inizio] [fine] [indice generale]