Inserisci Infobox

Configurazione di Sendmail

File di configurazione e settaggio dei parametri di Sendmail

Configurare Sendmail con sendmail.mc
Autore: al - Ultimo Aggiornamento: 2003-10-03 08:58:23 - Data di creazione: 2003-10-03 08:58:23
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

La configurazione di Sendmail tramite il file sendmail.mc risulta particolarmente comoda e semplice anche se bisogna sempre ricordarsi di processare questo file con il preprocessore di macro m4 per ottenere il file sendmail.cf effettivamente usato dal programma.
Per farlo basta una riga tipo:
m4 sendmail.mc > sendmail.cf
Le macro che permettono di convertire un file sendmail.mc nel file sendmail.cf sono generalmente distribuite indipendentemente dal pacchetto di Sendmail per permettere una gestione più agevole degli aggiornamenti.
Su Linux tipicamente sono presenti nel pacchetto sendmail-cf.*.rpm

Le caratteristiche sintattiche di base di un file .mc:
- Le macro sono definite con una riga tipo: define(macro,valore)
- Si possono utilizzare degli apici (il primo è inverso, il secondo dritto) per impedire che il preprocessori interpreti i contenuti di un argomento: define(`macro',`valore')
- Il preprocessore m4 analizza il testo in input come un flusso di caratteri, per evitare che venga interpretata una riga si usano i caratteri dnl (Delete through New Line) che possono essere usati sia come i # per commentare una riga:
dnl define(`macro',`valore') (la riga di configurazione non viene considerata)
sia a termine riga per evitare che venga generato uno spazio vuoto nel file di configurazione:
define(`macro',`valore')dnl (la riga di configurazione viene considerata e viene ignorato tutto quello che è scritto dopo dnl fino a fine riga).
Ricordarsi che gli argomenti delle macro sono generalmente messi fra apici (prima inverso: ` e poi dritto: ').

Per costruire un file di configurazione m4 minimo sono necessarie le seguenti direttive:

OSTYPE() - OBBLIGATORIO. Esempio: OSTYPE(`linux')
Definisce il sistema operativo su cui gira Sendmail. Un elenco dei SO supportati può essere visibile in /usr/share/sendmail-cf/ostype o nella analoga directory in cui sono contenuti le macro di configurazione di sendmail.

MAILER() - OBBLIGATORIO. Esempio: MAILER(`smtp')
Definisce l'egente di consegna di posta utilizzato. Sendmail supporta non solo il protocolli SMTP, ma anche metodi più antichi (tipo UUCP) o diversi. In genere su un server di posta normale è definito MAILER(`smtp') per la gestione della posta in rete, e  MAILER(`procmail') o MAILER(`local') per il delivery della posta locale.

DOMAIN() - RACCOMANDATO. Esempio: DOMAIN(`generic')
Imposta una macro specifica per il dominio indicato. Il generic si riferisce ad una configurazione standard, buona per molti usi.

FEATURE() - RACCOMANDATO. Esempio: FEATURE(`use_cw_file')
Molte funzionalità utili di Sendmail sono configurabili con specifiche features, che vanno dichiarate nel file .mc.
Fra queste segnaliamo:

FEATURE(`always_add_domain') - Aggiunge sempre il nome di dominio agli indirizzi presenti negli header dei messaggi, anche se si riferiscono ad utenti locali, per cui non si è esplicitato un dominio.

FEATURE(`domaintable') - Attiva il supporto di un file domaintable in cui sono indicati (a sinistra in ogni riga) nomi di dominio la cui posta la si vuole far convergere nel proprio dominio locale (a destra in ogni riga). Questa feature può avere come ulteriore argomento un path alternativo e un alternativo tipo di DB di gestione del file (di default si utilizza un hash db standard): FEATURE(`domaintable',`hash -o /etc/mail/domaintable.db').
Una simile riga su sendmail.mc produrrà su sendmail.cf la seguente configurazione:
Kdomaintable hash -o /etc/mail/domaintable.db
R$* < @ $+ > $*                 $: $1 < @ $(domaintable $2 $) > $3


FEATURE(`genericstable') - Attiva il supporto del file genericstable in cui è possibile specificare come cambiare l'indirizzo del mittente (a sinistra) con un indirizzo alternativo (a destra).
Ha una logica simile a domaintable: il file di configurazione è un normale testo ASCII che viene convertito in un .db che di fatto è quello utilizzato da Sendmail. Anche in questo caso è possibile indicare path del file e database utilizzato: FEATURE(`genericstable',`hash -o /etc/mail/genericstable.db')

FEATURE(`local_procmail') - Utilizza procmail per il delivery della mail locale.

FEATURE(`mailertable') - Permette di utilizzare un file mailertable per gestire metodi e rotte di delivery della posta custom. In /etc/mail/mailertable (default sui Sendmail recenti), che funziona come gli altri file da convertire in .db, va scritto, in ogni riga: dominio a cui è destinata la posta (es: dominio.com) - metodo di delivery e dominio o indirizzo email di destinazione (es: smtp:[email protected]).

Introduzione alla configurazione di Sendmail
Autore: al - Ultimo Aggiornamento: 2004-06-03 20:37:03 - Data di creazione: 2004-06-03 20:37:03
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Sendmail nel mondo Unix è noto per avere il file di configurazione più complesso che sia mai stato concepito da uno sviluppatore umano.
Geek humour in rete si spreca sulle caratteristiche di questo file e in genere su Sendmail stesso, un mostro sacro della posta elettronica che non nasconde le sue antichità, nel bene e soprattutto nel male.

Il file di configurazione è /etc/sendmail.cf, a volte si trova in /etc/mail/sendmail.cf o in altre posizioni.
Questo file ha una struttura che appare estremamente complessa perchè ha una sintassi molto ridotta ai minimi termini: i comandi sono tutti di una singola lettera e si aspettano argomenti che spesso sono di 2 sole lettere.
A vederlo sembra uno scherzo di natura informatica, un insieme di caratteri senza senso, ma una volta conosciuta la sua logica, in parte le nebbie si dipanano.

Dalla versione 8 in poi, Sendmail può essere configurato anche tramite un file chiamato sendmail.mc che contiene comandi molto più semplici da intuire ma che va di fatto convertito, tramite un preprocessore di macro m4, nel file sendmail.cf vero e proprio.

Questa distinzione va ben compresa: il file di configurazione di Sendmail rimane sempre sendmail.cf, ma invece che editarlo direttamente, è possibile generarlo da un file sendmail.mc che ha una sintassi e una logica più semplice e che richiede di essere "precompilato" sulla base di regole e macro che generalmente vengono fornite su un pacchetto a parte nelle varie distribuzioni Linux (sendmail-cf.*.rpm).
Ogni volta che si modifica sendmail.mc va quindi rigenerato il relativo sendmail.cf:
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf. Nel corso della sua storia e nelle sue incarnazioni su diversi Unix flavour, Sendmail ha disseminato file di configurazione in posti diversi, con le ultime versioni si è cercato di fare pulizia e uniformare la situazione. Segue un elenco, tratto dalla documentazione ufficiale dove si vede come sono cambiate le posizioni e i nomi di alcuni file comunemente usati in Sendmail:
Vecchia posizione                Nuova posizione
/etc/bitdomain                   /etc/mail/bitdomain
/etc/domaintable                 /etc/mail/domaintable
/etc/genericstable               /etc/mail/genericstable
/etc/uudomain                    /etc/mail/uudomain
/etc/virtusertable               /etc/mail/virtusertable
/etc/userdb                      /etc/mail/userdb
/etc/aliases (oppure: /etc/sendmail/aliases ; /etc/ucbmail/aliases ; /usr/adm/sendmail/aliases ; /usr/lib/aliases ; /usr/lib/mail/aliases ; /usr/ucblib/aliases)
                                 /etc/mail/aliases
/etc/sendmail.cw (oppure: /etc/mail/sendmail.cw ; /etc/sendmail/sendmail.cw)
                                 /etc/mail/local-host-names
/etc/sendmail.ct                 /etc/mail/trusted-users
/etc/sendmail.oE                 /etc/mail/error-header
/etc/sendmail.hf (oppure: /etc/mail/sendmail.hf ; /usr/ucblib/sendmail.hf ; /etc/ucbmail/sendmail.hf ; /usr/lib/sendmail.hf ; /usr/share/lib/sendmail.hf ; /usr/share/misc/sendmail.hf ; /share/misc/sendmail.hf)
                                 /etc/mail/helpfile
/etc/service.switch              /etc/mail/service.switch
/etc/sendmail.st (oppure /etc/mail/sendmail.st ; /etc/mailer/sendmail.st ; /etc/sendmail/sendmail.st ; /usr/lib/sendmail.st ; /usr/ucblib/sendmail.st)
                                 /etc/mail/statistics

POP-before-SMTP con Sendmail
Autore: al - Ultimo Aggiornamento: 2003-09-03 12:55:09 - Data di creazione: 2003-09-03 12:55:09
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

Esistono diversi modi per supportare la tecnica POP-before-SMTP su Sendmail, che permette di usare un server SMTP remoto, che normalmente non permette il relay, dopo che ci si è autenticati via pop3 o imap sul server stesso.

Fra i vari approcci al problema tipicamente il più utilizzato è quello di usare un programma, generalmente eseguito come demone, che controlla i log di posta, identifica i tentitivi di login pop3 o Imap eseguiti con successo e scrive in un database gli indirizzi IP dei client remoti, questo database viene poi controllato da Sendmail (opportunamente configurato) per aprire il relay agli indirizzi ivi contenuti.

Abbiamo trovato particolarmente rapido ed efficace il tool log2db per convertire in un db Berkeley (db 1, 2, 3, 4) le entry di un file di log e la macro popauth fornita direttamente dal sito di Sendmail.
Ecco la procedura utilizzata:

Installare e configurare log2db
Normale procedura, verificare su http://www.bestbits.at/log2db/ se esistono versioni più recenti:
[al@giraffa al]$ wget http://www.bestbits.at/log2db/log2db-0.5.7.tar.gz
[...]
[al@giraffa al]$ tar -zxvf log2db-0.5.7.tar.gz
[...]
[al@giraffa al]$ cd log2db-0.5.7
[al@giraffa log2db-0.5.7]$ ./configure
[...]
[al@giraffa log2db-0.5.7]$ make
gcc -o log2db.o -g -O2 -Wall  -DVERSION=\"0.5.7\" -Iinclude  -c log2db.c
gcc -o regsubst.o -g -O2 -Wall  -DVERSION=\"0.5.7\" -Iinclude  -c regsubst.c
gcc -o log2db log2db.o regsubst.o   -ldb
[al@giraffa log2db-0.5.7]$ su
Password:
[root@giraffa log2db-0.5.7]# make install
/usr/bin/install -c -m 755 --strip log2db /usr/local/sbin
/usr/bin/install -c -m 755 log2db-wrapper /usr/local/sbin


A questo punto editare /usr/local/sbin/log2db-wrapper (uno script shell che invoca il comando log2db e gli passa gli argomenti corretti) per adattarlo al proprio sistema, in particolare verificare la posizione del log del server pop3/imap (su Linux di solito /var/log/maillog e commentare/scommentare le regole di pattern matching relative al proprio server di posta (di default si adatta a Qpopper). Correggere eventualmente il path del file log2db: nella versione utilizzata (0.5.7) è /usr/sbin/log2db ma il comando viene installato in /usr/loacl/sbin/log2db.
Dopo le configurazioni del caso si può lanciare il wrapper in background e aggiungerlo ad uno script di startup: /usr/local/sbin/log2db-wrapper &

Configurare Sendmail
Seconda parte del lavoro è la configurazione di Sendmail. Anche in questo caso le vie possono essere varie, ma la migliore e la più semplice è quella che passa per sendmail.mc. Aggiungere a questo file le righe:
define(`POP_B4_SMTP_TAG', `')
HACK(`popauth')

e scaricare la macro m4 popauth da http://www.sendmail.org/~ca/email/rules/popauth.m4 (evitare copia e incolla, per non rischiare di avere problemi con tab e spazi vari). Questa macro va copiata nella sottodirectory hack all'interno dei file necessari per la configurazione di Sendmail. Su RedHat questi stanno in /usr/share/sendmail-cf/ e sono forniti dal pacchetto sendmail-cf, su altri *nix possono stare altrove, ma in ogni caso se m4 non trova il file lo comunica in stderr:
[root@giraffa log2db-0.5.7]# m4 /etc/mail/sendmail.mc > /dev/null
/etc/mail/sendmail.mc:145: m4: Cannot open /usr/share/sendmail-cf/hack/popauth.m4: No such file or directory

Ecco quindi la procedura usata su una RedHat9 (dopo aver modificato /etc/mail/sendmail.mc), ovviamente sarebbe sempre opportuno eseguire una copia dei file modificati:
[root@giraffa log2db-0.5.7]# wget http://www.sendmail.org/~ca/email/rules/popauth.m4
[...]
[root@giraffa log2db-0.5.7]# mv popauth.m4 /usr/share/sendmail-cf/hack/
[root@giraffa log2db-0.5.7]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
[root@giraffa log2db-0.5.7]# /etc/init.d/sendmail stop
[root@giraffa log2db-0.5.7]# /etc/init.d/sendmail stop
[root@giraffa log2db-0.5.7]# /etc/init.d/sendmail start


A questo punto Sendmail è pronto per appoggiarsi ad db /etc/mail/popauth.db per aprire il relay agli indirizzi li presenti. Questo database viene costantemente aggiornato da log2db (eseguito tramite il wrapper e lasciato in background) e può essere monitorato con il comando log2db --db=/etc/mail/popauth.db --dump.
Esiste la possibilità di aggiungere a mano dei indirizzi IP: (es: log2db --db=/etc/mail/popauth.db --add 192.168.0.1), di rimuoverli  ecc.

Per verificare se tutto funziona, tenere sotto controllo il log di posta e provare ad inviare posta da un IP remoto, che normalmente non viene relayato dopo aver eseguito un login pop3 sullo stesso server.

Privacy Policy