Mail Server Sicuro con Postfix: differenze tra le versioni

Riga 1: Riga 1:
==Introduzione==
==Pacchettizzare ed installare Xorg su Debian Sid==
Con questa guida intendo spiegare all'utente debian come configurare un server mail basato su Postfix (http://www.postfix.org).
Postfix è un MTA abbastanza sicuro e di recente sviluppo, molto semplice da usare e per alcuni è considerato il successore di sendmail per altro troppo complicato da gestire e con noti problemi di sicurezza.


==Installazione di Postfix==
===Descrizione===
Prima di tutto abbiamo bisogno di due demoni uno per la gestione del protocollo pop3 e uno per l'imap. Io consiglio popa3d e imapd
Questa guida tenter� di illustrare i passi base necessari a chi volesse cimentarsi nella compilazione ed installazione di xorg su sid.<br>
Il nostro obiettivo � creare una serie di pacchetti .deb adattando quelli presenti nei repository dei sorgenti ubuntu e personalizzandoli per sid.<br>
Tutto questo lavoro di compilazione serve ad evitare di dover installare ulteriori pacchetti dal repository ubuntu, le cui versioni sono spesso presenti soltanto in quel particolare repository (molti pacchetti vengono personalizzati e modificati dal team di sviluppo) e che renderebbero il nostro sistema un misto tra ubuntu e debian.<br>
Tenuta presente comunque la buona compatibilit� dei sorgenti dei pacchetti ubuntu rispetto ai .deb prelevati da debian.org (specialmente in relazione alle dipendenze di ciascun pacchetto), � possibile ricostruire l'intero xorg sfruttando le librerie necessarie prelevandole  per�, direttamente da sid.<br>
Faccio notare come la durata di tutta l'operazione sia un fattore importante da valutare: sulla mia macchina (Athlon xp 2000+, 256Mb), ad esempio, sono necessari oltre '''100 minuti''' per portare a termine tutto il processo di compilazione.<br>


<pre>
===Configurazione sistema===
# apt-get update
Innanzitutto dobbiamo aggiungere ad i repository dei pacchetti che usiamo abitualmente, anche quello di ubuntu (NB: abbiamo bisogno solo dei sorgenti, quindi basta la sola riga con deb-src), commentando temporaneamente le altre righe deb-src presenti nel nostro '''sources.list'''.<br>
# apt-get install popa3d imapd
</pre>


fatto questo in /etc/inetd.conf verranno aggiunti i servizi per il pop3 e l'imapd.
<pre>deb-src http://us.archive.ubuntu.com/ubuntu hoary universe main restricted</pre>
Procediamo all'installazione dell'MTA vero e proprio


<pre>
Dopo aver aggiunto tale riga, provvediamo ad aggiornare le liste di apt con il solito '''apt-get update'''.<br>
# apt-get install postfix
Durante l'operazione, possiamo controllare se viene scaricata anche la lista appena inserita per i pacchetti di ubuntu.
</pre>


==Configurazione base==
Prepariamo adesso una directory di nome '''xorg''', con il comando <pre>mkdir xorg</pre> questa accoglier� i sorgenti prelevati dalla rete, i file oggetto prodotti dalla compilazione ed infine i pacchetti .deb.<br>
Quasi tutte le opzioni di configurazione di Postfix si trovano nel file /etc/postfix/main.cf
Per esperienza personale, consiglio di creare la cartella all'interno di una partizione con '''almeno 4.5 gb di spazio libero'''.


Ecco i principali tag a cui conviene prestare attenzione:
===Modifica degli script di compilazione===
Posizionamoci nella directory appena creata, e con <pre>apt-get source xorg</pre> procediamo al download dei sorgenti e alla scompattazione dei sorgenti di xorg.<br>
Attualmente, (versione '''6.8.2-10'''), il download consiste di circa '''51 MB''' di archivi.<br>
Alla fine del download, notiamo che sono stati creati all'interno della directory xorg, alcuni file ed una directory.


<pre>
* situazione del nostro filesystem
myhostname = valore indica il nome che assumerà il vostro server mail (es: mail.nomedominio.it).
<pre>[xorg]
myorigin = valore indica il dominio usato per la posta inviata dal server.
|
mydestination = localhost, altri_valori indicano i domini che il server dovrà riconoscere come locali e che smisterà internamente.
|_ [xorg-6.8.2]
mydomain = valore indica il dominio a cui appartiene il server.
|  |
relayhost = valore indica a quale server inoltrare le mail che non si riconoscono come locali.
|  |_ [debian]
mailbox_size_limit = 0 indica la dimensione massima delle caselle mail, 0 per nessun limite.
|  |_ ALTRI_FILES
mynetworks = valore altri_valori indica le reti nelle quali il server deve operare (es. 127.0.0.1/8 192.168.0.1/24).
|
mynetworks_syle = host/subnet/class
|_ xorg_6.8.2-10.diff.gz
</pre>
|_ xorg_6.8.2-10.dsc
|_ xorg_6.8.2.orig.tar.gz</pre>


Su questi ultimi due punti è il caso di soffermarsi. Stiamo considerando ora quali ip considerare validi per l'invio della posta.
La directory '''xorg-6.8.2''' raccoglie i sorgenti scompattati dell'archivio orginale di xorg (oltre ai file necessari alla compilazione di un sorgente debian), a cui non sono ancora state applicate le varie patch apportate dali sviluppatori ubuntu.<br>
I file, invece, rappresentano l'archivio con il sorgente originale, il file con le patch approntate dal team di ubuntu e quello con la descrizione del pacchetto debian.<br>
Posizionamoci pertanto nella sottodirectory '''debian''' di xorg-6.8.2.


Postfix non autorizza l'invio della posta da parte di client non autorizzati a farlo e/o di domini sconosciuti, ovvero non è un open-relay. Questo è un gran vantaggio perché impedisce che il vostro server possa essere usato per spam o peggio.
Affinch� si possano adattare i sorgenti a sid, dobbiamo modificare 2 file: nel primo caso la modifica � pi� che altro cosmetica, nel secondo caso invece � una scelta obbligata.


Tranute mynetworks abilito gli ip presenti nella lista a spedire mail, con mynetworks_style posso specificare uno tra i seguenti tre valori:
Con il nostro editor preferito, apriamo pertanto il file '''changelog'''.<br>
Questo file mantiene lo storico delle modifiche fatte dagli sviluppatori ubuntu a partire dalla versione stable rilasciata dal team di xorg: tale file viene regolato da una sintassi ben precisa, in cui anche gli spazi hanno una loro funzione e pertanto vanno tenuti in considerazione per la buona riuscita della compilazione.<br>
E' necessario pertanto, prestare molta attenzione alla disposizione dei vari campi e al numero degli spazi che li delimitano.<br>
La entry pi� recente presente nella versione attuale del file changelog ci appare cos�:
<pre>xorg (6.8.2-10) hoary; urgency=low


;host: l'invio sarà consentito solo per la macchina locale.
  * Include patch from Ben Herrenschmidt to fix assertion of DDC GPIO lines
;class: l'invio sarà consentito a tutti i client appartenenti al network di classe A, C o C a cui il server appartiene.
    after a DDC probe had finished, which would render Apple Studio Displays
;subnet: indica che Postfix autorizza alla trasmissione tutti i client che appartengono alla stessa sottorete locale del mailserver e costituisce il valore di default.
    useless.
  * Don't reset all templates when migrating from xserver-xfree86; this will
    render the template migration useless.  Don't mess with $RECONFIGURE when
    migrating from xfree86. Set use_sync_ranges true when upgrading from
    xfree86 (closes: Ubuntu#8562, Ubuntu#8626).
  * Use debug_echo liberally in xserver-xorg.postinst.in to tell us why we're
    writing out sync ranges.


==Gestione degli Alias==
-- Daniel Stone <daniel.stone@ubuntu.com>  Tue,  5 Apr 2005 08:38:20 +1000</pre>
In teoria ad ogni utente locale del vostro server corrisponde una sola casella mail.
Si possono però creare degli alias che corrispondano ad un particolare utente, un secondo indirizzo a cui inviare mail per quel dato user.
Affinch� possiamo ottenere una nostra versione personalizzata dei pacchetti, dobbiamo aggiungere precendetemente al gruppo di linee appena descritto (quindi all'inizio del file), qualcosa del genere:
Di default esiste il file /etc/aliases che contiene una lista di alias a sinistra e i rispettivi utenti ai quali appartengono a destra.
In /etc/postfix/main.cf basta solo aggiungere
<pre>xorg (6.8.2-10-ld10) sid; urgency=low


<pre>
  * [Ld-xorg] packages for Debian Sid, based on Ubuntu sources.
alias_maps = hash:/etc/aliases
</pre>


e per rendere questo file una mappa utilizzabile da Postfix lanciamo il comando
-- Mario "Ldonesty" Di Nitto <ldonesty@debianizzati.org>  Sun, 15 May 2005 10:25:32 +0100</pre>


<pre>
mantenendo uno spazio di separazione con il gruppo successivo.
# postalias /etc/aliases
</pre>


==Multidominio, Virtual Domain e Sender Canonical==
Queste righe possono essere personalizzate secondo i propri gusti tenendo presente che '''6.8.2-10-ld10''' sar� la versione che comparir� nel nome di ogni pacchetto, dove -ld indica la nostra estensione personale, la quale *dovr�* essere seguita da un numero a scelta: es -myExt1.<br>
Nel caso il vostro Server debba ricevre la posta per più domini non dobbiamo fare altro che modificare la tag mydestination come segue
Infatti la mancanza di tale valore pregiudica irreparabilmente la compilazione e creazione dei pacchetti (lo script preposto all'operazione, si rifiuter� di assemblare i .deb)


<pre>
A questo punto salviamo il file changelog e dedichiamoci invece a '''control'''.<br>
mydestination = localhost, /etc/postfix/local-domain
La struttura del file control si puo riassumere in una sequenza di "blocchi" all'interno dei quali sono contenute tutte le informazioni proprie di un pacchetto debian raccolte per riga (ad esempio: la descrizione, le dipendenze, i conflitti, etc etc). <br>
</pre>
Dato che la versione di xorg su cui stiamo lavorando proviene dal repository ubuntu, � possibile che siano presenti alcune dipendenze relative a pacchetti contenuti solamente in tale repository.<br>
Pertanto questi pacchetti risulterebbero non disponibili all'atto dell'installazione sulla nostra sid, pregiudicando cos� tutta l'operazione.<br>
Possiamo evitare questa situazione ricercando nelle sole righe Depends del file control, i riferimenti ai pacchetti di ubuntu (presentano la segnatura "ubuntu" all'interno del numero di versione).<br>
Nel nostro caso, scorrendo il file (possiamo usare la funzione di ricerca del nostro editor) notiamo che alla riga 1895 � presente una referenza al pacchetto '''lsb-base''' nella versione ('''1.3-9ubuntu2''').


creare il file /etc/postfix/local-domain e inserire li i domini da considerare locali uno per riga senza virgole.
Dopo aver controllato che in sid esista tale pacchetto in una versione per lo meno uguale (meglio se superiore) a quella citata dal file control (possiamo usare '''apt-cache show lsb-base | grep Version''' per questo scopo), cancelliamo la parola "ubuntu" ed ogni eventuale numero postposto, lasciando quindi solo il numero della versione del pacchetto, infine salviamo.<br>
Quindi la versione di lsb-base nella riga Depends ci apparir� come ('''1.3-9''').<br>
Relativamente a questa versione di xorg, non ci sono altre referenze da modificare; nel caso in cui, invece, fossimo in presenza di parecchie dipendenze da sistemare dobbiamo valutare ciascun caso separatamente, ripetendo tutta la procedura di controllo e modifica.


Fatto questo conviene preparare un file per la gestione dei domini virtuali in modo tale da associare il giusto dominio al dato utente
===Controllo dipendenze e avvio compilazione===
creiamo allora il file /etc/postfix/virtual
A questo punto siamo in grado di avviare la compilazione/creazione dei pacchetti di xorg usando il comando '''dpkg-buildpackage''' dopo esserci posizionati nella cartella xorg-6.8.2 ed aver ottenuto i privilegi di root.
La sintassi da usare è la seguente:


<pre>
Molto probabilmente ci verr� notificato che alcune dipendenze non sono soddisfatte per portare a termine la compilazione:
info@dominio1.it marco -> le mail in arrivo per tale indirizzo sono redirezionate a marco
webmaster@dominio2.it andrea@dominio4.it -> le mail verranno inviate a andrea@dominio4.it
@dominio3.com alessandro -> tutte le mail inviate a qualsiasi indirizzo @dominio3.com sono inviate all'utente alessandro
</pre>


aggiungiamo in /etc/postfix/main.cf
es.


<pre>
<pre>dpkg-checkbuilddeps: Unmet build dependencies: flex bison groff zlib1g-dev |
virtual_maps = hash:/etc/postfix/virtual
libz-dev libpam0g-dev | libpam-dev libfreetype6-dev rman lynx
</pre>
libglide2-dev (>> 2001.01.26) libglide3-dev (>= 2002.04.10-7) libpng12-dev |
libpng-dev libexpat1-dev libfontconfig1-dev libxft-dev (>= 2.1.2) libxcursor-dev
dbs m4 libxrender-dev (>= 0.9.0) sharutils</pre>


e prepariamo la map con il comando
Per ovviare a questo problema possiamo installare i pacchetti suggeriti usando il comando:


<pre>
<pre>apt-get install flex bison groff zlib1g-dev libpam0g-dev libfreetype6-dev \
# postmap /etc/postfix/virtual
rman lynx libglide2-dev libglide3-dev libpng12-dev libexpat1-dev libfontconfig1-dev \
</pre>
libxft-dev libxcursor-dev dbs m4 libxrender-dev sharutils</pre>


Può essere utile sempre per la gestione di più domini usare un file che associ ad un nome utente un indirizzo mittente particolare.
A questo punto possiamo rilanciare il comando '''dpkg-buildpackage''' (a cui potremo preporre il comando '''time''', per visualizzare la durata effettiva di tutta l'operazione) ed attendere che i pacchetti vengano creati.
Creiamo perciò un file /etc/postfix/sender_canonical dove con la precedente sintassi associamo al nome utente l'indirizzo mittente da mostrare nelle mail inviate.
Aggiungiamo in /etc/main.cf la seguente riga:


<pre>
===Installazione===
sender_canonical_maps = hash:/etc/postfix/sender_canonical
Posizionamoci innanzitutto nella cartella dove sono contenuti i file .deb di xorg.
</pre>


ed infine prepariamo la map con
Possiamo avere 3 situazioni:
*  Macchina pulita: nessun xfree/xorg precedentemente installato
*  Xorg in una versione precedente
*  Xfree preso da sid


<pre>
<br>La prima situazione pu� essere risolta (NB, si potrebbe fare anche con un repository locale) con <pre>dpkg -i x-window-system-core*.deb </pre> aggiungendo volta per volta i pacchetti che vengono richiesti come mancanti in coda a dpkg -i, ovvero
# postmap /etc/postfix/sender_canonical
<pre>dpkg -i PKT1 PKT2 PKT3 PKT4</pre> dove i vari PKT corrispondono al nome del pacchetto '''completo di estensione'''.
</pre>


==Antivirus - Amavis e ClamaV==
{{stub}}
Passiamo ora alla configurazione dell'antivirus da installare sul vostro MTA.
Procediamo all'installazione:


<pre>
[[Utente:Ldonesty|Ldonesty]]
# apt-get install amavisd-new clamv clamv-daemon
</pre>
 
Dopo l'installazione dobbiamo dire a Postfix di far processare le mail dal vostro antivirus. Aggiungiamo a /etc/postfix/main.cf quanto segue:
 
<pre>
content_filter = amavis:[127.0.0.1]:10024
</pre>
mentre nel file /etc/postfix/master.cf:
<pre>
amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
 
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
</pre>
 
Di per se non si richiedono altre modifiche per il corretto funzionamento, comunque può essere utile dare un occhiata al file /etc/amavis/amavisd.conf per eventuali modifiche.
Il Demone clamav-daemon (freshclam) tiene aggiornato il vostro antivirus aggiornandosi 12 volte al giorno, per eventuali modifiche /etc/clamav/fresclam.conf e /etc/clamv/clamavd.conf
 
==Antispam - Spamassassin==
Può essere utile installare un antispam che filtri le mail nel vostro server. Spamassassin è ciò che fa per voi. Installiamolo insieme a procmail:
 
<pre>
# apt-get install spamassassin procmail
</pre>
 
a questo punto aggiungiamo in /etc/postfix/main.cf quanto segue
 
<pre>
mailbox_command = /usr/bin/spamc | procmail -a "$EXTENSION"
</pre>
 
abilitiamo spamassassin modificando in /etc/default/spamassassin
 
<pre>
ENABLE=1
</pre>
 
aggiungiamo al file /etc/procmailrc quanto segue:
 
<pre>
DROPPRIVS=yes
:0fw
| /usr/bin/spamassassin
</pre>
 
Per settaggi particolari di spamassassin vi consiglio di dare un'occhiata al file /etc/spamassassin/local.cf oppure consultare il sito web http://www.yrex.com/spam/spamconfig.php che vi consente di creare un file di configurazione personalizzato rispondendo alle varie domande.
 
==WebMail - Openwebmail==
Per poter usufruire del servizio di webmail è necessario usare un server web.
Io vi consiglio apache con supporto php e cgi. In questa guida presumo che nel vostro server sia già presente apache configurato a dovere.
Esistono diversi servizi di WebMail, io ho scelto openwebmail, installiamolo:
 
<pre>
# apt-get install openwebmail
</pre>
 
Dopo l'installazione recatevi in /etc/openwebmail e date un occhiata al file apache.conf che contiene le specifiche per configurare apache.
Apriamo ora /etc/openwebmail/openwebmail.conf e apportiamo le nostre personalizzazioni.
Attenzione alla voce domainnames, spesso auto può portare a dei problemi, vi consiglio di specificare il dominio di appartenenza.
Per altre modifiche consultate il file /usr/share/openwebmail/configs/openwebmail.conf
 
==Gestione Mailing-List Mailman + Hypermail==
Ogni mailserver che si rispetti ha anche un gestore di mailing-list. Io vi consiglio di installare mailman che possiede un ottimo supporto web per le varie configurazioni:
 
<pre>
# apt-get install mailman hypermail
</pre>
 
Fatto questo modificate /etc/postfix/main.cf aggiungendo quanto segue:
 
<pre>
alias_maps = hash:/etc/aliases
hash:/var/lib/mailman/data/aliases
transport_maps = hash:/etc/postfix/transport
relay_domains = lists.vostrodominio.com
mailman_destination_recipient_limit = 1
</pre>
 
creiamo /etc/postfix/transport e trasformiamolo in una mappa
 
<pre>
# echo lists.vostrodominio.com mailman: > /etc/postfix/transport
# postmap /etc/postfix/transport
</pre>
 
Modificate ora il file /etc/postfix/master.cf:
 
<pre>
mailman unix - n n - - pipe flags=FR user=list argv=/var/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}
</pre>
 
Modificate nel file /etc/mailman/mm_cfg.py i seguenti tag:
 
<pre>
DEFAULT_EMAIL_HOST = 'vostrodominio.com'
DEFAULT_URL_HOST = 'www.vostrosito.com'
MTA='Postfix'
PUBLIC_EXTERNAL_ARCHIVER = 'hypermail -L it -m /var/lib/mailman/archives/private/%(listname)s.mbox/%(listname)s.mbox -l %(listname)s -d /var/lib/mailman/archives/public/%(listname)s'
PRIVATE_EXTERNAL_ARCHIVER = 'hypermail -c -L it -m /var/lib/mailman/archives/private/%(listname)s.mbox/%(listname)s.mbox -l %(listname)s -d /var/lib/mailman/archives/private/%(listname)s'
PUBLIC_ARCHIVE_URL = '/archives/%(listname)s'
PRIVATE_ARCHIVE_URL = '/archives/%(listname)s'
ARCHIVE_TO_MBOX = 2
</pre>
 
Fate attenzione alle voci PUBLIC_ARCHIVE_URL e PRIVATE_ARCHIVE_URL.
Sono i link che in mailman verranno associati all'archivio delle vostre mailinglist (www.vostrodominio.it/archives/nomelista). di conseguenza un mio consiglio è creare un link simbolico nella DocumentRoot del server apache in questione:
 
<pre>
# ln -s /var/lib/mailman/archives/public/ archives
</pre>
 
Create poi una lista mailman di default per il server (altrimenti il suo demone si rifiuta di partire)
 
<pre>
# newlist mailman
</pre>
 
ed il gioco è fatto.
Per creare nuove mailing-list basta usare il comando newlist e per rimuoverle rmlist.
Per le altre configurazione mailman crea nella vostra directory cgi-bin un programma che vi consente tramite web di accedere alle varie mailing-list per poter modificarne alcuni parametri, anche in questo caso si richiede una corretta configurazione di apache.
 
----
Per qualsiasi informazione
 
www.giorgioravera.it
 
giorgio@giorgioravera.it
2

contributi