Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 869

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Draft//EN">
<HTML>
<HEAD>
<TITLE>Posta Off-Line HOW-TO: Spedire la posta, ovvero sendmail</TITLE>
</HEAD>
<BODY>
<A HREF="Posta-OFFline-HOWTO-3.html">Precedente</A>
Successivo
<A HREF="Posta-OFFline-HOWTO.html#toc4">Indice</A>
<HR>
<H2><A NAME="s4">4. Spedire la posta, ovvero sendmail</A></H2>

<P> Beh, a dire il vero ci sono diversi MTA, tra cui <CODE>smail</CODE>, <CODE>qmail</CODE>,
ed altri ma, non avendo mai avuto modo di provarli, mi soffermer&ograve; solo su
<CODE>sendmail</CODE>.
<P><CODE>sendmail</CODE> &egrave; forse uno dei software pi&ugrave; complicati da configurare nella
nostra galassia; in compenso ci permette di avere un sistema di gestione
della posta all'altezza di qualsiasi situazione, tanto che &egrave; spesso sprecato
in molti casi per i quali basterebbe un ben pi&ugrave; semplice MTA. In ogni caso,
per una configurazione base di <CODE>sendmail</CODE> ci viene in aiuto <CODE>m4</CODE> che,
con le sue macro, ci permette di creare in maniera estremamente semplice un
file di configurazione adatto al nostro caso specifico.
<P><B>Nota bene:</B> <CODE>sendmail</CODE> &egrave; un software che avr&agrave; sempre dei buchi (bug o
bacarozzi che dir si voglia) riguardanti la sicurezza, per cui consiglio
vivamente di prelevare l'ultima versione disponibile (anche perch&egrave; tutte le
prove sono state fatte sulla versione 8.8.3 e non posso assicurare che
quanto &egrave; qui descritto funzioni anche con le versioni precedenti) da uno di
questi URL:
<P>
<UL>
<LI><CODE>
<A HREF="http://www.sendmail.org/">www.sendmail.org</A></CODE></LI>
<LI><CODE>
<A HREF="ftp://ftp.sendmail.org/">ftp.sendmail.org</A></CODE> sotto la directory <CODE>/pub/sendmail/</CODE></LI>
</UL>
<P>
<H2><A NAME="ss4.1">4.1 Creazione del file sendmail.cf con m4</A></H2>

<P> Per far capire a <CODE>sendmail</CODE> che operiamo off-line, dobbiamo andare a
modificare il file di configurazione che di solito si chiama
<CODE>/etc/sendmail.cf</CODE> Dal momento che non avrebbe molto senso andare a
modificare a mano tale file, vediamo come possiamo piuttosto generarne uno
nuovo usando <CODE>m4</CODE> (ovviamente devi avere <CODE>m4</CODE> installato e
funzionante).
<P>Come prima cosa andiamo a prendere via <CODE>ftp</CODE> l'ultima versione di
<CODE>sendmail</CODE> da <CODE>
<A HREF="ftp://ftp.sendmail.org/pub/sendmail/">ftp://ftp.sendmail.org/pub/sendmail/</A></CODE> quindi andiamo a
scompattare il file appena prelevato sotto <CODE>/usr/src</CODE> con il comando
<P>
<BLOCKQUOTE><CODE>
<PRE>
tar vxzf /percorso/per/sendmail.x.x.x.tar.gz
</PRE>
</CODE></BLOCKQUOTE>
<P>A questo punto, per semplificarci la vita, creiamo un link simbolico in modo
da far risultare la directory di <CODE>sendmail</CODE> come
<CODE>/usr/src/sendmail</CODE> in questo modo:
<P>
<BLOCKQUOTE><CODE>
<PRE>
ln -s /usr/src/sendmail-x.x.x /usr/src/sendmail
</PRE>
</CODE></BLOCKQUOTE>
<P>Ovviamente le <CODE>x</CODE> usate nel path di <CODE>sendmail</CODE> stanno ad indicare il
numero della versione e dovranno essere sostituite!!!
<P>Ora andiamo nella directory <CODE>/usr/src/sendmail/cf/cf</CODE> e creiamoci il
file con le indicazioni per <CODE>m4</CODE> chiamandolo <CODE>linux-offline.mc</CODE> ed
avente come contenuto quanto segue:
<P>
<BLOCKQUOTE><CODE>
<PRE>
include(`../m4/cf.m4')
VERSIONID(`linux per uso off-line')dnl
OSTYPE(linux)
FEATURE(nouucp)dnl
FEATURE(always_add_domain)dnl
MAILER(local)dnl
MAILER(smtp)dnl
define(confDELIVERY_MODE, defer)
define(`SMART_HOST', mio_smtp_host)
define(confUSERDB_SPEC, /etc/userdb.db)
FEATURE(notsticky)
</PRE>
</CODE></BLOCKQUOTE>
<P>Le due linee che contengono <CODE>define(confUSERDB_SPEC, /etc/userdb.db)</CODE>
e <CODE>FEATURE(notsticky)</CODE> devono essere inserite solo se vogliamo usare
il database di utenti locali (vedi la sezione <I>Un database di utenti
locali: perch&egrave; e come</I>). Inoltre <CODE>mio_smtp_host</CODE> deve essere
sostituito con il nome del server SMTP del provider. Ti faccio anche notare
che quell'apostrofo al contrario che si trova ad esempio prima di
<CODE>linux per uso off-line')dnl</CODE> &egrave; molto importante: &egrave; diverso dal
semplice apostrofo e corrisponde in ASCII al codice 96 (decimale).
<P>Ora facciamo una copia di riserva del file <CODE>/etc/sendmail.cf</CODE> e
generiamone uno nuovo con il comando:
<P>
<BLOCKQUOTE><CODE>
<PRE>
m4 linux-offline.mc &gt; /etc/sendmail.cf
</PRE>
</CODE></BLOCKQUOTE>
<P>

<H2><A NAME="ss4.2">4.2 Creazione del file sendmail.cf e /etc/aliases con make</A></H2>

<P> Per i pi&ugrave; esperti, ecco in regalo un <CODE>Makefile</CODE> da mettere in
<CODE>/etc/mail</CODE> per compilare automaticamente <CODE>sendmail.cf</CODE> e gli
alias. Prima per&ograve; bisogna togliere da sendmail.mc la riga con l'include(),
quindi si deve creare un link simbolico con il comando:
<P>
<BLOCKQUOTE><CODE>
<PRE>
ln -s /etc/sendmail.cf /etc/mail/sendmail.cf
</PRE>
</CODE></BLOCKQUOTE>
<P>Segue il contenuto del file <CODE>/etc/mail/Makefile</CODE>:
<P>
<BLOCKQUOTE><CODE>
<PRE>
------------------------ taglia qui ------------------------
M4LIB=/usr/lib/sendmail.cf HOSTNAME=wonderland

all: cfg

sendmail.cf: $(HOSTNAME).mc m4 $(M4LIB)/m4/cf.m4 $(HOSTNAME).mc &gt;
        sendmail.cf
# Queste righe sono un esempio di come applicare automaticamente delle patch
#       patch --silent &lt; $(M4LIB)/smartdom.diff patch --silent &lt;
#       $(M4LIB)/selective-masq.diff rm -rf sendmail.cf.orig

/etc/aliases: /etc/aliases.db

/etc/aliases.db: /etc/aliases sendmail -bi

cfg: sendmail.cf /etc/aliases

test: cfg sendmail -bt -C./sendmail.cf #-oQ/tmp/mqueue

clean: rm sendmail.cf /etc/aliases.db
------------------------ taglia qui ------------------------
</PRE>
</CODE></BLOCKQUOTE>
<P>

<H2><A NAME="ss4.3">4.3 Ultimi ritocchi a sendmail</A></H2>

<P> Una volta generato il file <CODE>sendmail.cf</CODE> facciamo ripartire
<CODE>sendmail</CODE> ed il gioco &egrave; fatto... o quasi :)
<P>In genere la distribuzione di Linux che abbiamo installato fa in modo che al
boot della macchina, da uno degli script nella directory <CODE>/etc/rc.d</CODE>,
parta <CODE>sendmail</CODE>. Ora, dal momento che quelli che creano le distribuzioni
di Linux danno per assunto che ognuno di noi sia collegato in rete con una
T1 da casa, fanno partire <CODE>sendmail</CODE> per default con l'opzione <CODE>-q</CODE>,
la quale dice a <CODE>sendmail</CODE> di processare immediatamente la coda dei
messaggi in uscita oltre che ad certo intervallo di tempo.
<P>Per evitare che ci&ograve; succeda, individuiamo in quale file viene fatto partire
<CODE>sendmail</CODE> ed eliminiamo l'opzione -q (che generalmente &egrave; seguita anche
dall'intervallo di tempo per processare la coda, per esempio 15m sta per 15
minuti). Per individuare il file, portiamoci nella directory
<CODE>/etc/rc.d</CODE> e facciamo una
<P>
<BLOCKQUOTE><CODE>
<PRE>
grep sendmail *
</PRE>
</CODE></BLOCKQUOTE>
<P>Nella Red Hat, la directory in questione &egrave; <CODE>/etc/rc.d/init.d</CODE> ed il
file si chiama <CODE>sendmail.init</CODE>
<P>A questo punto ogni messaggio che inviamo a <CODE>sendmail</CODE>, sia direttamente,
sia via SMTP sulla porta locale, viene messo in una coda nella directory
<CODE>/var/spool/mqueue</CODE> e la coda verr&agrave; processata (i messaggi verranno
inviati) solo con il comando
<P>
<BLOCKQUOTE><CODE>
<PRE>
sendmail -q -v
</PRE>
</CODE></BLOCKQUOTE>
<P>Per vedere il contenuto della coda digita <CODE>mailq</CODE>
<P>L'opzione <CODE>-v</CODE> serve a dire a <CODE>sendmail</CODE> di visualizzare cosa combina
durante l'invio dei messaggi, mentre <CODE>-q</CODE> serve proprio ad indicargli di
processare la coda. Se vogliamo avere un log di cosa combina <CODE>sendmail</CODE>
possiamo farlo partire in questo modo:
<P>
<BLOCKQUOTE><CODE>
<PRE>
sendmail -q -v &gt;&gt; /var/log/sendmail
</PRE>
</CODE></BLOCKQUOTE>
<P>Un'ultima cosa: per compilare <CODE>sendmail</CODE> ed installarlo al posto della
versione attuale:
<P>
<BLOCKQUOTE><CODE>
<PRE>
cd /usr/src/sendmail/src
makesendmail
makesendmail install
</PRE>
</CODE></BLOCKQUOTE>
<P>

<H2><A NAME="ss4.4">4.4 Un database di utenti locali: perch&egrave; e come</A></H2>

<P> Come abbiamo gi&agrave; visto con <CODE>pine</CODE>, uno dei problemi pi&ugrave; ricorrenti
nell'uso della posta off-line consiste nel fatto che il campo <CODE>From:</CODE>
automaticamente generato dal nostro MUA non corrisponde al nostro indirizzo
Internet reale. Per ovviare a questo problema basterebbe inserire un header
del tipo <CODE>Reply-to:</CODE> con il nostro indirizzo effettivo, ma chi ricever&agrave;
la nostra posta continuer&agrave; a vedere nel campo <CODE>From:</CODE> un indirizzo
sbagliato che, se un nostro amico memorizza in un elenco credendolo
corretto, sarebbe semplicemente inutile e ci farebbe anche perdere un sacco
di tempo e messaggi.
<P>La soluzione consiste nel creare un database di utenti locali in cui ad una
chiave consistente in un certo login corrisponde un indirizzo email reale.
Per fare ci&ograve; dobbiamo avere precedentemente specificato nel file per <CODE>m4</CODE>
(vedi la sezione <I>Creazione del file <CODE>/etc/sendmail.cf</CODE> con
<CODE>m4</CODE></I>) le righe:
<P>
<BLOCKQUOTE><CODE>
<PRE>
define(confUSERDB_SPEC, /etc/userdb.db)
FEATURE(notsticky)
</PRE>
</CODE></BLOCKQUOTE>
<P>Inoltre dobbiamo avere installato il pacchetto <I>db</I> di Berkeley dal
momento che questo sistema non funziona con DBM. Puoi prelevare i sorgenti
da 
<A HREF="ftp://ftp.cs.berkeley.edu/pub/4bsd/db.tar.gz">ftp://ftp.cs.berkeley.edu/pub/4bsd/db.tar.gz</A> ma non ne avrai bisogno
se stai utilizzando una distribuzione abbastanza recente come ad esempio la
Red Hat 4.0.
<P>Ora andiamo ad editare il file <CODE>/etc/userdb</CODE> in questo modo:
<P>
<BLOCKQUOTE><CODE>
<PRE>
login:mailname  nome.utente@mio.provider.it
nome.utente@mio.provider.it:maildrop    login
</PRE>
</CODE></BLOCKQUOTE>
<P>Si tratta di sostituire <I>login</I> con il nostro login sulla macchina locale
e <I>nome.utente@mio.provider.it</I> con il nostro indirizzo Internet reale.
Quindi un esempio concreto potrebbe essere:
<P>
<BLOCKQUOTE><CODE>
<PRE>
mirko:mailname  ik0zsn@amsat.org
ik0zsn@amsat.org:maildrop       mirko
</PRE>
</CODE></BLOCKQUOTE>
<P>Usa TAB per separare i campi. Ora generiamo il database con:
<P>
<BLOCKQUOTE><CODE>
<PRE>
makemap btree /etc/userdb.db &lt; /etc/userdb
</PRE>
</CODE></BLOCKQUOTE>
<P>Facciamo ripartire <CODE>sendmail</CODE> ed il gioco &egrave; fatto. Ora, ad esempio con
Berkeley's Mail, i messaggi in uscita avranno l'indirizzo corretto
nell'header <CODE>From:</CODE> e <CODE>Return-Path:</CODE>
<P>Come avrai gi&agrave; notato, con <CODE>pine</CODE> invece non &egrave; cambiato un bel
niente e si ostina a indicare un indirizzo scorretto. La soluzione
viene dalla documentazione di <CODE>sendmail</CODE> (dalle FAQ per essere pi&ugrave;
esatti) e la riporto esattamente cos&igrave; com'&egrave;, limitandomi a tradurla.
<P>
<BLOCKQUOTE><CODE>
<PRE>
======================================================================
Data: 19 Luglio 1996
Soggetto:  Q3.6 -- Come posso far funzionare il database di utenti
                   locali con Pine o con FEATURE(always_add_domain)?

    L'incompatibilita` di base tra Pine e il database di utenti
risiede in come Pine scrive il tuo indirizzo nella intestazione dei
messaggi. Molti MUA scrivono il tuo indirizzo come &quot;From: user&quot;,
mentre Pine, per ragioni date nella sua documentazione, scrive
l'indirizzo come &quot;From: user@FQDN&quot; (FQDN=fully qualified domain name,
ovvero il nome di dominio completo di una macchina su
Internet). Usando la macro di m4 &quot;always_add_domain&quot; si ha lo stesso
effetto. Data questa differenza, il database di utenti locali non
riscrive queste intestazioni.

    Una soluzione a questo problema consiste nell'apportare la
seguente modifica nel file sendmail.mc compilato da m4 nel tuo
/etc/sendmail.cf (oppure ovunque il tuo file sendmail.cf risiede) dopo
che hai installato il database di utenti locali e l'hai fatto
funzionare con altri MUA:

    All'inizio della sezione dove imposti le variabili di
configurazione, aggiungi quanto segue:

        # Define our userdb file for FQDN rewrites
        Kuserdb btree -o /etc/userdb.db

    Ed un po' piu` in seguito, prima delle righe &quot;MAILER()&quot;, ma dopo
che altre opzioni di configurazione siano state specificate:

   LOCAL_RULE_1
   ########################################################
   ### Local Ruleset 1, rewrite sender header & envelope ##
   ########################################################
   #Thanks to Bjart Kvarme &lt;bjart.kvarme@usit.uio.no&gt;
   S1
   R$-                     $1 &lt; @ $j . &gt;                user =&gt; user@localhost
   R$- &lt; @ $=w . &gt; $*      $: $1 &lt; @ $2 . &gt; $3 ?? $1    user@localhost ?
   R$+ ?? $+               $: $1 ?? $(userdb $2 : mailname $: @ $)
   R$+ ?? @                $@ $1                        Not found
   R$+ ?? $+               $&gt;3 $2                       Found, rewrite

   # NOTA BENE   ^^^^^^^^^^^^^^^       ^^^^^^^^^^^^^^^^^^^^^^^^^
   # Usa il tasto Tab in queste regioni in modo da avere tre
   # colonne (la linea con &quot;mailname&quot; ha solo 2 colonne).

    Ora il database di utenti dovrebbe riscrivere i messaggi spediti
con Pine o qualsiasi altro MUA che vuole avere un indirizzo
completamente qualificato (FQDN). Se con il metodo appena descritto
non hai ancora risolto il problema, prova ad aggiungere quanto segue
sia al file di configurazione di sistema pine.conf, pine.conf.fixed, o
al tuo file di configurazione personale .pinerc:

        user-domain=localhost

    Sappiamo che questo ha risolto il problema a molte persone.

    Ad ogni modo, una soluzione piu` elegante (leggi: basata su m4)
per la versione 8 di sendmail deve essere ancora creata.
======================================================================
</PRE>
</CODE></BLOCKQUOTE>
<P>

<H2><A NAME="ss4.5">4.5 Makemap non supporta il tipo btree. E adesso?</A></H2>

<P> Potrebbe succedere che <CODE>makemap</CODE> ti dice di non supportare il tipo
<I>btree</I> rifiutandosi di generare il database. Cosa fare in questo caso?
Soluzione: ricompilare <CODE>makemap</CODE> con il supporto per i database di tipo
<I>btree</I>.
<P>I sorgenti di <CODE>makemap</CODE> sono nella distribuzione di <CODE>sendmail</CODE>, quindi
se abbiamo seguito le istruzioni precedenti dovremmo ritrovarci il tutto
sotto <CODE>/usr/src/sendmail/makemap</CODE>
<P>Per poter compilare <CODE>makemap</CODE> con il supporto per il tipo <I>btree</I>
dobbiamo avere installato il pacchetto <CODE>db</CODE> di Berkeley (vedi la sezione
<I>Un database di utenti locali: perch&egrave; e come</I>).
<P>L'unica difficolt&agrave; nel compilare <CODE>makemap</CODE> consiste nel far funzionare il
makefile. Dal momento che su ogni sistema le cose potrebbero cambiare
(librerie diverse, ecc) ti riporto il makefile che ho usato con successo
(per dovere di cronaca al momento delle prove avevo la Red Hat 4.0).
Chiamalo semplicemente <CODE>Makefile</CODE> dopo avere rinominato quello gi&agrave;
presente nella directory e lancia <CODE>make</CODE> quindi, se la compilazione &egrave;
andata a buon fine, fai qualche prova con il tuo nuovo <CODE>makemap</CODE> ed
infine installalo con <CODE>make install</CODE>
<P>
<BLOCKQUOTE><CODE>
<PRE>
------------------------ taglia qui ------------------------
O=      -O
SRCDIR= ../src
DBMDEF= -DNDBM -DNEWDB
ENVDEF=
INCDIRS=-I${SRCDIR} -I/usr/include
LDOPTS=
LIBDIRS=-L/usr/lib
LIBS=   -ldb -lgdbm
BINDIR= /usr/sbin
OBJADD=

############  Non modificare al di sotto di questa linea  ##############

CFLAGS= -I. $O ${INCDIRS} ${DBMDEF} ${ENVDEF}
OBJS=   makemap.o ${OBJADD}
LINKS=  ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
BINOWN= bin
BINGRP= bin
BINMODE=555

ALL=    makemap makemap.0

all: ${ALL}

makemap: ${BEFORE} ${OBJS}
        ${CC} -o makemap ${LDOPTS} ${OBJS} ${LIBDIRS} ${LIBS}

NROFF=  groff -Tascii
MANDOC= -mandoc

makemap.0: makemap.8
        ${NROFF} ${MANDOC} makemap.8 &gt; makemap.0

install: install-makemap install-docs

install-makemap: makemap
        install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} makemap ${BINDIR}

install-docs: makemap.0

clean:
        rm -f ${OBJS} makemap makemap.0

${OBJS}: ${SRCDIR}/conf.h
------------------------ taglia qui ------------------------
</PRE>
</CODE></BLOCKQUOTE>
<P>

<HR>
<A HREF="Posta-OFFline-HOWTO-3.html">Precedente</A>
Successivo
<A HREF="Posta-OFFline-HOWTO.html#toc4">Indice</A>
</BODY>
</HTML>