Sendmail address rewriting mini-HOWTO

Thomas Roessler, roessler@guug.de

v0.0, 6 maggio 1998
Questo documento è una breve descrizione di come impostare il file di configurazione di sendmail per un uso casalingo con una connessione dial-up. Traduzione a cura di Lorenzo Pulici, lorenzo.pulici@usa.net

1. Introduzione

Si assume che abbiate il tipo di accesso ad Internet che sembra attualmente essere il più comune alle università e per i servizi online: utilizzate PPP con una connessione seriale per accedere alla rete del vostro provider. La vostra posta in arrivo viene presa dal server POP o IMAP del provider, mentre i messaggi in uscita verranno inviati tramite SMTP. Non disponete di un nome di dominio di vostra proprietà, per cui tutto utilizza un indirizzo unico.

Si assume che sia installata sul vostro sistema una versione sufficientemente aggiornata di sendmail di Eric Allman (la versione 8.8.8 è l'ultima al momento della stesura di questo documento e funziona correttamente).

Questo documento si riferisce in parte a proprietà specifiche dei sistemi Debian/GNU Linux; gli utenti di altre distribuzioni dovranno averne particolare cura.

Accertatevi di avere a portata di mano le seguenti informazioni:

La configurazione che si sta progettando ha due obiettivi principali:

  1. Possibilità di inviare posta tra i vari utenti locali
  2. Il mondo esterno deve vedere gli indirizzi di posta dell'ISP e non quelli locali.

Per raggiungerli, si usufruirà della feature genericstable di sendmail.

2. Mappa dei file

Tutti i file di configurazione di sendmail verranno messi in una directory separata, /etc: /etc/mail. Normalmente, sendmail si aspetta di trovare questi file direttamente in /etc. Per evitare problemi /etc/sendmail.cf dovrà essere un link simbolico a /etc/mail/sendmail.cf.

Questi sono i file che affollano /etc/mail:

Alcuni di questi file saranno accompagnati da file .db. Questi file contengono database hash per l'uso diretto da parte di sendmail.

Si assume che la parte cf del tree dei sorgenti di sendmail risieda in una directory denominata /usr/lib/sendmail.cf. Questo è il caso dei sistemi Debian GNU/Linux. Altre distribuzioni potrebbero porre questi file in altre posizioni. Consultate la documentazione della vostra distribuzione per maggiori informazioni.

3. Configurare sendmail

3.1 Il file principale di configurazione

Sendmail usa un sistema di regole dall'elevata complessità per la sua configurazione. Anche se è possibile eseguire una gran quantità di trucchetti in questo modo, scrivere da zero un file sendmail.cf è piuttosto insolito e porta via molto tempo. Se siete tuttavia interessati, allora smettete di leggere questo documento adesso per iniziare invece il "Bat Book" della O'Reilly.

Invece di mettere a punto manualmente queste regole, ci si affiderà al processore di macro m4 per costruire la configurazione, partendo dalle parti già pronte distribuite con sendmail.

Si dia un'occhiata alle prime righe del file sendmail.mc:


include(/usr/lib/sendmail.cf/m4/cf.m4)
VERSIONID(`sendmail.mc - roessler@guug.de')
OSTYPE(debian)
define(`ALIAS_FILE',`/etc/mail/aliases')

All'inizio viene incluso cf.m4. Questo file macro di m4 contiene numerose definizioni macro per il resto del file. Ci si assicuri di inserire il percorso corretto - quello qui presente è tipico per una distribuzione Debian GNU/Linux. La macro OSTYPE viene utilizzata per dare alcune opzioni di default utili per determinati valori di configurazione. Se non si utilizza un sistema Debian, sostituire la parola "debian" con "linux". ALIAS_FILE dice a sendmail dove trovare la lista degli alias.

Le righe seguenti indicano a sendmail di utilizzare la feature genericstable, e dove trovare i file di configurazione necessari per usufruirne:


FEATURE(masquerade_envelope) 
FEATURE(genericstable, `hash -o /etc/mail/genericstable')
GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain') 

La feature masquerade_envelope indica a sendmail di applicare la riscrittura degli header al mittente dell'envelope di un messaggio. Questo è l'indirizzo di posta al quale i sottosistemi di consegna della posta indirizzeranno i loro rapporti di mancata consegna e i messaggi di avvertimento. I file generics* verranno illustrati più sotto.

È ora necessario definire un cosiddetto "smart host", vale a dire, una macchina che gestirà la posta in uscita dal vostro sistema. Questa macchina può non essere lo stesso server POP o IMAP del vostro ISP. Se avete dubbi contattate l'assistenza. Il codice del file principale di configurazione:


define(`SMART_HOST',`postainuscita.mio.provider')

Sostituire postainuscita.mio.provider con il nome qualificato (FQDN) del server del vostro ISP.

Le due ultime righe includono la definizione "mailer", necessaria a sendmail per sapere in che modo gestire i diversi tipi di posta:


MAILER(local)
MAILER(smtp)

Per generare il file sendmail.cf partendo da questo sendmail.mc, digitare da root i seguenti comandi:


# m4 sendmail.mc > _sendmail.cf
# mv -f _sendmail.cf sendmail.cf

Si noti la tecnica di scrivere l'output di m4 su di un file temporaneo che verrà successivamente spostato nella giusta locazione. Ciò impedisce a sendmail di leggere file di configurazione scritti solo parzialmente.

3.2 Riscrittura degli indirizzi.

Prima di tutto, è necessario far conoscere a sendmail quali sono da considerarsi locali (e perciò soggetti a riscrittura). Operazione molto semplice: è sufficiente inserire il nome qualificato (FQDN) della vostra macchina nel file /etc/mail/genericsdomain. Per conoscere il nome qualificato del vostro host, digitare il seguente comando:


 $ hostname -f 

Si arriva finalmente alla tabella di riscrittura: /etc/mail/genericstable. Questo file consiste di due colonne, separate da spazi vuoti. La prima colonna contiene l'indirizzo locale, la seconda l'indirizzo e-mail che dovrà sostituirlo. Il file potrebbe assomigliare a questo:


harry   harryx@your.isp
maude   maudey@her.isp
root    fredx@your.isp
news    fredx@your.isp

Deve esserci una riga per ogni account presente sulla macchina locale, cosicchè la posta generata automaticamente diretta esternamente alla macchina riporterà negli headers le informazioni corrette.

Per motivi di prestazioni, sendmail non utilizza direttamente questo file di testo, ma si affida ad una versione "hashed". per generarla, digitare il seguente comando.


# makemap -r hash genericstable.db < genericstable

Si noti che le regole di riscrittura della genericstable non saranno applicate alla posta locale o a quella in arrivo dall'esterno - la mappatura viene usata unicamente se un messaggio lascia il vostro sistema verso lo smart host del vostro ISP.

3.3 Aliases

Il file degli aliases contiene nomi locali addizionali validi unicamente per messaggi locali. È utile per account amministrativi quali root che ricevono posta generata automaticamente dal vostro sistema.

Un punto di partenza per il vostro /etc/mail/aliases potrebbe assomigliare a questo file:


root: fred
news: root
postmaster: root
mail: root
www: root

nobody: /dev/null
MAILER-DAEMON: nobody

In questo esempio, la posta locale per gli utenti root, news, postmaster, mail, e www verrà inoltrata a fred, mentre quella per nobody e MAILER-DAEMON verrà rediretta a /dev/null.

Come per genericstable, aliases potrebbe avere parecchie righe. Per questo motivo, sarebbe ancora una volta inefficiente un uso del file di testo così descritto da parte di sendmail. Viene allora applicato il medesimo meccanismo per genericstable anche con aliases: si genera un hashed database. Invece di invocare direttamente makemap, è possibile digitare stavolta il comando newaliases, che si preoccuperà da solo di fare il lavoro necessario.

4. Letture consigliate

La distribuzione dei sorgenti di sendmail include una certa documentazione. Leggere soprattutto il file cf/README.

Se il vostro interesse è di approfondire ancora di più le opzioni di configurazione di sendmail, procuratevi il "Bat Book" della O'Reilly: Bryan Costales, Eric Allman, e Neil Rickert: "sendmail". O'Reilly, 1993.