%% postfix.tex
%%
%% Copyright (C) 2008-2017 Simone Piccardi and Truelite Srl.
%%
%% This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
%% International License. To view a copy of this license, visit
%% \url{http://creativecommons.org/licenses/by-sa/4.0/} or send a letter to
%% Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
%% 
%% Corsi GNU/Linux: Dispense dei corsi GNU/Linux di Truelite
%%
%% S. Piccardi Apr. 2008
%% 
%% intromail.tex: sezione SMTP e altro
%%

%%
%% INIZIO: Sezione specifica da non includere in AGL
%%
\ifx\lpispecificsection\undefined

\chapter{Il servizio MTA con \textit{Postfix}}
\label{sec:postfix}


\section{Introduzione}
\label{sec:postfix_intro}

Benché, come accennato in sez.~\ref{sec:mail_structure}, esistano diversi
programmi in grado di svolgere il compito di MTA in questo testo tratteremo
soltanto \textit{Postfix}, il server MTA scritto da Wietse Venema, uno
sviluppatore esperto di sicurezza, noto anche per essere l'autore dei
\textit{TCP wrappers} uno dei server di posta elettronica più diffusi e
popolari.

\subsection{L'architettura di \textit{Postfix}}
\label{sec:postfix_architecture}

\subsection{Configurazione di base}
\label{sec:postfix_base_config}


\else
\relax
%%
%% FINE: Sezione specifica da non includere in AGL
%%
\fi

\subsection{Le funzionalità di compatibilità con \textit{Sendmail}}
\label{sec:sendmail_commands}

Benché, come accennato in sez.~\ref{sec:mail_structure}, esistano diversi MTA
in grado di gestire invio e recapito della posta, una serie di comandi di
gestione e di file di configurazione di base derivano dalle scelte
implementative realizzate da \textit{Sendmail}, che a lungo è stato
praticamente l'unico programma utilizzato per questo compito.

Ma anche se oggi \textit{Sendmail} può essere tranquillamente sostituito da
alternative più efficienti e sicure come \textit{Postfix}, detti comandi e
file di configurazione, e le funzionalità che essi forniscono, sono stati
sostanzialmente standardizzati e restano praticamente gli stessi con qualunque
MTA si stia utilizzando.

La prima di queste funzionalità è quella degli \textit{alias} di posta
elettronica: è possibile cioè definire degli \textsl{pseudonimi} e fare in
modo che la posta ad essi inviata venga reindirizzata altrove. Questo fa sì
che ad esempio si possano usare diversi nomi per identificare un utente
all'interno di un dominio, recapitando tutti i messaggi sempre alla stessa
persona. Oppure si può recapitare ad una o più persone la posta inviata a
indirizzi di posta associati a dei servizi (come \texttt{postmaster} o
\texttt{webmaster}) che non corrispondono ad un utente reale, o la posta
inviata a \texttt{root} che ovviamente non deve mai essere letta direttamente
usando l'utente di amministrazione.  

Questa funzionalità viene gestita in maniera generica da tutti gli MTA
attraverso il file \texttt{/etc/aliases}, un estratto del quale, preso da una
Debian Squeeze, è il seguente:
\begin{FileExample}[label=/etc/aliases]
# /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: piccardi
\end{FileExample}

Nel file si mantengono le corrispondenze fra un \textit{alias}, che deve
iniziare sul primo carattere di una riga ed essere terminato dal carattere
``\texttt{:}'', e la destinazione cui si vuole la posta ad esso inviata
arrivi, che deve essere indicata nella parte di riga seguente. Il file segue
la solita convenzione dei file di configurazione di Unix di ignorare righe
vuote ed inizianti per ``\texttt{\#}'', inoltre una riga iniziante per spazi
viene considerata una continuazione della precedente.

Si noti come un \textit{alias} può indicare sia il nome di un utente realmente
esistente sulla macchina di cui si vuole girare la posta ad un altro, come
\texttt{root}, sia utenti fittizi, come \texttt{postmaster}. Si noti anche
come sia possibile usare come destinazione un altro \textit{alias}, come
nell'esempio illustrato dove si redirige \texttt{mailer-daemon} su
\texttt{postmaster}, questi su \texttt{root} e quest'ultimo su
\texttt{piccardi}. In questo caso non è necessario neanche scrivere le
corrispondenze in ordine sequenziale.

Se allora un utente desidera essere contattato via posta con altri nomi oltre
al suo username, ad esempio se vuole ricevere la posta come
\texttt{simone.piccardi} o \texttt{s.piccardi}, si potranno aggiungere ad
\texttt{/etc/aliases} le righe:
\begin{FileExample}[label=/etc/aliases]
s.piccardi: piccardi
simone.piccardi: piccardi
\end{FileExample}

Se invece si vuole smistare la posta inviata ad un certo indirizzo verso più
destinatari, basterà inserirne la lista al posto del singolo nome utente
presente negli esempi finora illustrati. Questa lista dovrà essere indicata
con un elenco, separato da spazi, sia di nomi di utenti locali sia di
indirizzi di posta remoti. Per cui se ad esempio si vuole che la posta inviata
all'amministratore della macchina oltre che all'utente \texttt{piccardi} venga
inviata anche all'indirizzo remoto
\texttt{reports}\verb|@|\texttt{truelite.it}, si dovrà modificare l'ultima
riga dell'esempio iniziale in:
\begin{FileExample}[label=/etc/aliases]
root: piccardi reports@truelite.it
\end{FileExample}

Una ulteriore funzionalità è quella che consente di inviare i messaggi di
posta elettronica ad uno specifico programma che si incarica di gestirle, ad
esempio una modalità di configurazione del gestore di liste
``\textit{Mailman}'' è quella che prevede che si definiscano una serie di
alias nella forma:
\begin{FileExample}[label=/etc/aliases]
## mailman mailing list
mailman:              "|/var/lib/mailman/mail/mailman post mailman"
mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"
mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"
mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"
mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"
mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"
mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"
mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"
mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"
\end{FileExample}
il cui risultato è far si che le email inviate agli indirizzi indicati vengano
processate inviandole, tramite l'uso del carattere ``\texttt{|}'', al
programma \texttt{/var/lib/mailman/mail/mailman} che si incaricherà di
gestirle in modo opportuno.


Una volta modificato il file \texttt{/etc/aliases} occorre comunque segnalarne
il cambiamento in maniera esplicita, perché il server di posta possa
utilizzare le nuove impostazioni. Per questo è previsto l'uso dell'apposito
comando \index{comando!\texttt{newaliases}} \texttt{newaliases}, che non
prevede nessun argomento o opzione, ed effettua tutte le operazioni necessarie
che potranno variare a seconda dell'MTA che si sta utilizzando.

Oltre agli \textit{alias}, che possono essere gestiti soltanto
dall'amministratore del servizio di posta elettronica, un'altra funzionalità
derivata da \textit{Sendmail} è quella che consente ai singoli utenti di
redirigere la propria posta verso un altro indirizzo a loro scelta. Questo può
essere ottenuto scrivendo detto indirizzo dentro il file \texttt{.forward}
posto nella propria home directory. 

In realtà, come per gli \textit{alias}, anche in questo caso si possono
specificare più indirizzi come lista separata da spazi ed in presenza di
questo file il server, all'atto di recapitare la posta all'utente, ne leggerà
il contenuto e la reinvierà automaticamente agli indirizzi ivi specificati.


Un altro comando generico usato nella gestione della posta è
\index{comando!\texttt{mailq}} \texttt{mailq}, che stampa la coda dei messaggi
in attesa di spedizione. L'uscita del comando dipende dall'MTA che si sta
utilizzando, ma il risultato è quello di mostrare un elenco di messaggi con le
relative informazioni. Ad esempio con \textit{Postfix} si otterrà qualcosa del
tipo:
\begin{Console}
root@hain:~# \textbf{mailq}
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
494FD52A00C     1886 Wed Aug 22 23:43:34  pinco@truelite.it
        (connect to friends.filly.com[76.74.177.175]:25: Connection timed out)
                                         nobody@friends.filly.com

D5FE2F82A6     5593 Wed Aug 22 16:07:27  MAILER-DAEMON
      (connect to smtp.anbid.com.br[200.186.108.102]:25: Connection timed out)
                                         magnumsu00@anbid.com.br

75146F82A5     5131 Tue Aug 21 23:06:13  MAILER-DAEMON
                  (connect to dhl.ie[165.72.192.235]:25: Connection timed out)
                                         specializationbhk@dhl.ie

-- 13 Kbytes in 3 Requests.
\end{Console}
che mostra dei messaggi (in questo caso notifiche di errore) che non sono
stati recapitati per impossibilità di connettersi al server del destinatario. 

In genere l'uso di \texttt{mailq} è a scopo diagnostico per capire se ci sono
problemi nella spedizione della posta elettronica da parte del proprio server,
ad esempio a causa di un eventuale crollo della connessione di rete verso
l'esterno. La lista dei messaggi e le relative indicazioni permettono di
capire lo stato del proprio sistema di posta, il comando non prende argomenti
e non prevede l'uso di nessuna opzione.

Sia \texttt{mailq} che \texttt{newaliases} vengono in genere realizzati come
link simbolici al programma \index{comando!\texttt{sendmail}}
\texttt{sendmail}, che nel caso di \textit{Sendmail} è anche il binario del
server stesso, mentre per altri MTA costituisce solo il programma che consente
di inviare istruzioni al server usando l'interfaccia di compatibilità con
\textit{Sendmail}.

In particolare i due comandi citati sono equivalenti all'uso di
\texttt{sendmail} con l'opzione \texttt{ -I} (per \texttt{newaliases}) e
\texttt{-bp} (per \texttt{mailq}). Oltre a queste due opzioni, che però non
vengono usate esplicitamente, un'altra opzione molto usata è \texttt{-q}, che
serve per forzare il server di posta a tentare il reinvio immediato di tutti i
messaggi rimasti in coda (quella visualizzata con \texttt{mailq}).

In genere \texttt{sendmail -q} è il comando che si esegue sempre quando la
connessione si riattiva dopo un periodo di inattività per evitare che il
reinvio dei messaggi venga effettuato con i tempi standard (che in genere
prevedono attese di qualche ora) che sono usati per i problemi di
connessione. In condizioni normali infatti, come accennavamo in
sez.~\ref{sec:mail_structure}, è previsto che il server destinatario di un
messaggio possa non essere raggiungibile, e si debba ritentare in un secondo
tempo. Quando si sa, come nel caso citato, che le condizioni di
irraggiungibilità non sussistono più, si può richiedere di ritentare l'invio
immediatamente.

Oltre a quelle citate il comando \texttt{sendmail} ha una lunga serie di altre
opzioni molte delle quali attengono al funzionamento del \textit{Sendmail}
originale e o vengono ignorate o, se possibile ed applicabile, vengono
tradotte in istruzioni equivalenti per il proprio MTA. La trattazione delle
stesse va al di là di quanto possa interessare affrontare in questa sede e si
rimandano gli interessati alla lettura della pagina di manuale.


%%
%% INIZIO: Sezione specifica da non includere in AGL
%%
\ifx\lpispecificsection\undefined

\section{Antivirus e antispam}
\label{sec:antivirus_antispam}

\subsection{Il sistema antispam di \textit{Spamassassin}}
\label{sec:spamassassin_antispam}

\subsection{L'antivirus \textit{Clamav}}
\label{sec:clamav_antivirus}

\subsection{L'antivirus e antispam con \textit{Postfix}}
\label{sec:postfix_milter}

\section{Configurazioni avanzate}
\label{sec:postfix_advanced}

\subsection{La gestione delle \textit{mailbox} virtuali}
\label{sec:postfix_virtual}

\subsection{Cifratura della connessione e autenticazione}
\label{sec:postfix_auth_ssl}

\subsection{Politiche di accesso}
\label{sec:postfix_policyd}



\else
\relax
%%
%% FINE: Sezione specifica da non includere in AGL
%%
\fi



% LocalWords:  MTA Postfix sez Wietse Venema TCP wrappers postmaster root ftp
% LocalWords:  webmaster Squeeze mailer daemon nobody hostmaster usenet news
% LocalWords:  abuse security username reports truelite it newaliases forward
% LocalWords:  home mailq connect to timed sendmail antispam mailbox

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "mailserv"
%%% End: 
