[successivo] [precedente] [inizio] [fine] [indice generale]
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.
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. |
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).
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.
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
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
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 |
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome sendmail.html