Una raccolta sparsa semiragionata di pensieri riguardanti questo particolare MTA

Perchè qmail

29/11/03 Daniele Duca (daniele@area.trieste.it)

Pagina 14

Precisazione

Con questo talk non ho intenzione di denigrare nessun MTA, semplicemente porto a conoscenza quello che ho imparato su qmail, spiegando perche' io lo ritenga migliore rispetto ad altri pacchetti, magari piu' famosi.

Nonostante molta gente ritenga qmail complicato, posso comunque affermare che, una volta capita l'architettura del sistema, mantenere un server di posta che utilizzi qmail non necessita particolari abilita', se non una normale dose di testardaggine.

Alla fine della giornata avrete la possibilita' di compilare un mini questionario di 4 domande a risposta multipla che vi permettera', se risulterete essere i primi ad averlo compilato correttamente, di ricevere in regalo dei libri gentilmente offerti dalla HOPS Libri.

Pagina 14

Caratteristiche

Sicurezza

qmail è stato progettatto per un alto standard di sicurezza. Sendmail ha una lunga storia di grosse falle di sicurezza. Quando fu scritto Sendmail, Internet era un posto molto amichevole. Tutti si conoscevano, e c'era poco bisogno di progettare codice per un alto standard di sicurezza. Oggi Internet è un ambiente molto ostile per i server di rete. L'autore di Sendmail, Eric Allman, ha fatto un buon lavoro di consolidamento del programma, ma nulla più che una riprogettazione permette di raggiungere la vera sicurezza.

Performance

qmail parallelizza la consegna della posta, effettuando sino a 20 consegne simultanee, per default.

Affidabilità

Una volta che qmail accetta un messaggio, garantisce che questo non vada perduto. qmail supporta pure un nuovo formato di mailbox affidabile anche su NFS senza locking.

Semplicità

qmail è piccolo rispetto agli altri MTA con le medesime caratteristiche.

NB:

Questa lista e' presa dal libro “Life with qmail”

Pagina 14

Breve storia di qmail

qmail e' stato scritto da D. J. Bernstein principalmente perche' non trovava sendmail abbastanza performante.

La prima release risale al 24/01/1996 (0.70 beta), l'ultima invece è del 14/06/1998

Tutto il software aggiuntivo per qmail, come patch per il tarpitting, per LDAP ecc.. non sono supportate dall autore.

DJB è cosi' sicuro del suo codice che nel 1997 ha promesso 500$ a chi fosse riuscito a compromettere un server exploitando qmail, il premio non e' mai stato reclamato ma...

Piu' che fare concorrenza a sendmail, software noto per avere una lunga storia di bug, qmail si e' scontrato con Postfix (http://www.postfix.org) e il suo autore, Wietse Venema. Il sunto della storia d'amore tra DJB e Venema si puo' trovare su http://cr.yp.to/qmail/venema.html

qmail e' stato scritto anche per essere compatibile con la gran parte delle installazioni di sendmail esistenti, quindi la migrazione da un sistema all altro non e' per niente drammatico.

DJB, non contento di aver sviluppato un MTA ha deciso di aggiungerci una serie di pacchetti software (ucspi-tcp, daemontools, fastforward, dotforward .. ) che se usati in congiunzione con qmail possono dare non poche soddisfazioni

Pagina 14

Internet SMTP Server Survey

NB: Dai risultati sono stati tolti i server non raggiungibili, quelli sconosciuti e quelli volutamente offuscati, la fonte dei dati e' http://www.tty1.net/smtp-survey/index_en.html

NB2: Sendmail esiste almeno dal 1982.

Pagina 14

ucspi-tcp

Una menzione speciale nella lista dei software utili per qmail la merita sicuramente il pacchetto ucspi-tcp.

Questo pacchetto si occupa della parte di networking di qmail e in particolare dell abilitazione o meno del relaying.

Il database degli IP e' composto da due file, tcp.smtp e tcp.smtp.cdb. Il file tcp.smtp e' human readable ed e' composto da varie righe come ad esempio

140.105.:allow,RELAYCLIENT=""

che non fa altro che abilitare il range 140.105.0.0/255.255.0.0 al relaying.

DJB pero', essendo “ossessionato” dalle performance, ha deciso che il parsing di un file di testo ASCII e' troppo lento e quindi ha deciso che prima di usarlo e' necessario compilarlo con tcprules

Dopo la compilazione viene generato un database CDB (http://cr.yp.to/cdb.html) leggibile da tcpserver.

Pagina 14

daemontools

Questo pacchetto si occupa esclusivamente di far partire, fermare e mantenere attivi i processi di qmail (ma non solo, puo' essere una valida alternativa per molti altri script di avvio)

Nella tabella seguente, presa da http://cr.yp.to/daemontools/faq/create.html#why , si possono notare le motivazioni che hanno spinto DJB a scrivere un tool del genere

inittab	ttys	init.d	rc.local	/service

Easy service installation and removal	No	No	Yes	No	Yes

Easy first-time service startup	No	No	No	No	Yes

Reliable restarts	Yes	Yes	No	No	Yes

Easy, reliable signalling	No	No	No	No	Yes

Clean process state	Yes	Yes	No	No	Yes

Portability	No	No	No	No	Yes

Come si puo' notare, apparentemente e' tutto a vantaggio dei daemontools

Pagina 14

Perche' si dice che qmail sia sicuro?

qmail e in generale tutto il software di DJB e' programmato in maniera singolare rispetto alla norma.

Uno dei veri punti di forza secondo DJB e' assicurarsi che ogni buffer di memoria che venga utilizzato da funzioni che lavorino sulle stringhe sia stato precedentemente allocato, e in caso negativo che si provveda ad allocarlo prima di lavorarci.

In questa maniera forzare un overflow dovrebbe essere piu' difficile. (approfondimento: http://www.s0ftpj.org/docs/hackit03_djb.pdf)

qmail e' ritenuto sicuro anche perche', a differenza di altri daemon che girano come root per tutta la loro vita, spezzetta le sue attivita' demandando vari compiti a vari moduli esterni. Ogni modulo lavora ad un security level diverso dagli altri e si fida solo ed esclusivamente dei moduli autorizzati a parlare con lui.

La sicurezza sta anche nella maniera di memorizzare la coda di posta, seguendo un algoritmo tipo slit directory qmail riesce ad operare su code di grandi dimensioni anche su sistemi poco dotati.

DJB ha anche inventato il formato “Maildir” al posto di “mailbox” per la scrittura della posta degli utenti. Questo formato, riconosciuto come valido anche da Venema che lo ha implementato in Postfix, permette di effettuare piu' operazioni sulla stessa casella di posta senza doversi preoccupare di eventuali file lockati perche' gia' in uso.

Pagina 14

qmail picture #1 (local to local)

Messaggio originale:

To: fred

Hi.

qmail-inject	Si occupa di completare la mail aggiungendo l'header, la mail si trasforma quindi in:

|	(envelope) from joe@heaven.af.mil to fred@heaven.af.mil

|	From: joe@heaven.af.mil

|	To: fred@heaven.af.mil

|

|	Hi.

V

qmail-queue	Scrive in maniera affidabile i dati su disco

|	e lancia qmail-send

V

qmail-send	Guarda il destinatario: “fred@heaven.af.mil.”

|	Il dominio”heaven.af.mil” e' listato nel file “locals” ? Si.

|	Spedisci localmente a fred@heaven.af.mil.

V

qmail-lspawn ./Mailbox

|	Guarda il destinatario, “fred”

|	Fa parte di qmail-users? No.

|	C'e' un account di nome “fred”? Si.

|	L' UID di “fred” e' diverso da 0 ? Si.

|	La home di “fred” e' visibile all utente qmaulp? Si.

|	La home di “fred” e' effettivamente a nome di Fred? Si.

|	Pass ail messaggio a qmail-local.

|

V

qmail-local fred ~fred fred '' '' heaven.af.mil joe@heaven.af.mil ./Mailbox

Esiste il file ~fred/.qmail? No.

Scrivi il messaggio nella sua./Mailbox in formato mbox.

Pagina 14

qmail picture #2 (remote to local)

qmail-smtpd	riceve un messaggio da parte di un server di posta

|	MAIL FROM:<bill@irs.gov>

|	RCPT TO:<fred@heaven.af.mil>

|

|	La variabile $RELAYCLIENT e' settata? No.

|	Il dominio heaven.af.mile' presente nel file rcpthosts? Si.

|	Accetta il recpient (RCPT).

V

qmail-queue	Scrive in maniera affidabile i dati su disco

|	e lancia qmail-send

V

qmail-send	Guarda il destinatario: “fred@heaven.af.mil.”

|	Il dominio”heaven.af.mil” e' listato nel file “locals” ? Si.

|	Spedisci localmente a fred@heaven.af.mil.

V

qmail-lspawn ./Mailbox

|	Guarda il destinatario, “fred”

|	Fa parte di qmail-users? No.

|	C'e' un account di nome “fred”? Si.

|	L' UID di “fred” e' diverso da 0 ? Si.

|	La home di “fred” e' visibile all utente qmaulp? Si.

|	La home di “fred” e' effettivamente a nome di Fred? Si.

|	Pass ail messaggio a qmail-local.

|

V

qmail-local fred ~fred fred '' '' heaven.af.mil joe@heaven.af.mil ./Mailbox

Esiste il file ~fred/.qmail? No.

Scrivi il messaggio nella sua./Mailbox in formato mbox.

Pagina 14

qmail picture #3 (local to remote)

Messaggio originale:

To: bill@irs.gov

Hi.

qmail-inject	Si occupa di completare la mail aggiungendo l'header, la mail si trasforma quindi in:

|	(envelope) from joe@heaven.af.mil to bill@irs.gov

|	From: joe@heaven.af.mil

|	To: bill@irs.gov

|

|	Hi.

V

qmail-queue	Scrive in maniera affidabile i dati su disco

|	e lancia qmail-send

V

qmail-send	Guarda il destinatario, bill@irs.gov.

|	Il dominio irs.gov e' presente nel file locals? No.

|	La casella bill@irs.gov e' presente nei file virtualdomains? No.

|	Il dominio irs.gov eì presente nel file virtualdomains? No.

|	Il TLD .gov e' presente nel file virtualdomains? No.

|	Spedisci remotamente a bill@irs.gov.

V

qmail-rspawn	Fai partire qmail-remote

|

V

qmail-remote	Guarda il dominio irs.gov

E' presente una rotta statica nel file smtproutes? No.

Guarda tramite lookup DNS chi e' il MX per irs.gov:

MAIL FROM:<joe@heaven.af.mil>

RCPT TO:<bill@irs.gov>

Pagina 14

qmail picture #4 (relay autorizzato)

qmail-smtpd	Ricezione di un messaggio tramite SMTP

|	MAIL FROM:<joe@heaven.af.mil>

|	RCPT TO:<bill@irs.gov>

|

|	La variabile d'ambiente $RELAYCLIENT e' settata? Si.

|	Accetta la spedizione.

V

qmail-queue	Scrive in maniera affidabile i dati su disco

|	e lancia qmail-send

V

qmail-send	Guarda il destinatario, bill@irs.gov.

|	Il dominio irs.gov e' presente nel file locals? No.

|	La casella bill@irs.gov e' presente nei file virtualdomains? No.

|	Il dominio irs.gov eì presente nel file virtualdomains? No.

|	Il TLD .gov e' presente nel file virtualdomains? No.

|	Spedisci remotamente a bill@irs.gov.

V

qmail-rspawn	Fai partire qmail-remote

|

V

qmail-remote	Guarda il dominio irs.gov

E' presente una rotta statica nel file smtproutes? No.

Guarda tramite lookup DNS chi e' il MX per irs.gov:

MAIL FROM:<joe@heaven.af.mil>

RCPT TO:<bill@irs.gov>

Pagina 14

Antispam

Naturalmente, come per tutti gli MTA “seri”, anche per qmail sono disponibili specifici add-on per contrastare lo spam e i virus.

Il sistema antispam si chiama rblsmtpd e fa parte del pacchetto ucspi-tcp. Il funzionamento si basa sul noto sistema di blacklist (ad esempio: ORDB, Spamcop, Mail Abuse ..). Operativamente e' semplice, ad ogni connessione SMTP il sistema interroga in cascata vari server DNS chiedendo un record TXT dell IP che si e' collegato, se uno di questi risponde con un record non vuoto allora la mail viene rifiutata (con codice 451 o 553 in base alle impostazioni) adducendo come motivazione quello che e' scritto nel record, tipicamente una cosa come “Il tuo IP X.Y.Z.Q fa parte di una lista di spammer conosciuti e quindi la tua mail e' stata rifiutata; per saperne di piu' vai su http://www.ecc.ecc/ecc”.

La “cattiveria” delle liste e' dipendente dal fornitore del servizio; in ogni caso e' possibile definire localmente degli indirizzi IP (o dei range) dai quali accettare in ogni caso la posta. Il programma che si occupa di questi override locali si chiama rbldns, e fa parte del pacchetto djbdns, che e' un DNS server sviluppato sempre da DJB.

Il consumo di banda e' dipendente dalla quantita' di mail che si ricevono, ma puo' essere relativamente controllato tramie il caching delle query DNS. Il caching lo fa qualunque DNS “serio” come Bind o djbdns.

Pagina 14

Antivirus

Dovendo contrastare la moda dei virus mass mailer (grazie outlook) i sistemi di posta hanno dovuto cominciare ad integrare un antivirus.

Per qmail i pacchetti antivirus sono molteplici, ma si compongono quasi sempre da due software differenti; l'antivirus in se e il wrapper per qmail.

L' AV puo' essere uno dei tanti compatibili con linux, i piu' comuni sono F-Prot, NAI, NOD32, Kaspersky ...

Il wrapper e' un modulo aggiuntivo di qmail che sostituisce qmail-queue, si occupa di encodare l' eventuale attachment e passarlo all' antivirus. Se risulta essere infetto la mail viene messa in quarantena e partono due mail di avvertimento; una al mittente e una al destinatario. Se invece la mail risulta pulita allora il wrapper passa la palla al vero qmail-queue.

Due tra i piu' utilizzati wrapper per qmail ci sono Amavis (http://www.amavis.org) e qmail-scanner (qmail-scanner.sourceforge.net)

Inutile precisare che e' necessario mantenere aggiornato quotidianamente il software Antivirus.

Pagina 14

qmail picture #5 (rblsmtpd + amavis)

rblsmtpd	Ricezione di un messaggio tramite SMTP

|	L' IP del mittente e' blacklistato? No.

V	Passa a qmail-smtpd

qmail-smtpd

|	MAIL FROM:<joe@heaven.af.mil>

|	RCPT TO:<bill@irs.gov>

|

|	La variabile d'ambiente $RELAYCLIENT e' settata? Si.

|	Accetta la spedizione.

V

amavis-wrapper	La mail e' infetta? No.

V

qmail-queue-real	Scrive in maniera affidabile i dati su disco

|	e lancia qmail-send

V

qmail-send	Guarda il destinatario, bill@irs.gov.

|	Il dominio irs.gov e' presente nel file locals? No.

|	La casella bill@irs.gov e' presente nei file virtualdomains? No.

|	Il dominio irs.gov eì presente nel file virtualdomains? No.

|	Il TLD .gov e' presente nel file virtualdomains? No.

|	Spedisci remotamente a bill@irs.gov.

V

qmail-rspawn	Fai partire qmail-remote

|

V

qmail-remote	Guarda il dominio irs.gov

E' presente una rotta statica nel file smtproutes? No.

Guarda tramite lookup DNS chi e' il MX per irs.gov:

MAIL FROM:<joe@heaven.af.mil>

RCPT TO:<bill@irs.gov>

Pagina 14

I principali file di controllo di qmail

Gran parte della configurazione di qmail si effettua tramite la modifica dei file contenuti in /var/qmail/control

Naturalmente non e' necessario doverli usare tutti per un setup normale.

I piu' importanti sono:

me	Contiene l'FQDN del server, e' il file in assoluto piu' importante,	secondo il quale vengono effettuate tutte le operazioni che	comprendono l'hostname. qmail puo' sopravvivere con solamente	questo file compilato correttamente

badmailfrom	Fa in modo che una mail avente come mittente un indirizzo	scritto dentro questo file venga rifiutata

concurrencyremote	Numero massimo di spedizioni simultanee verso host remoti	(default 20, massimo: 500)

concurrencylocal	Numero massimo di spedizioni locali (default 10, massimo: 500)

queuelifetime	Vita massima in secondi di una mail in coda (default 604800,	ovvero una settimana)

virtualdomains	Definisce, nel formato “dominio.tld:accountlocale” un virtual	domain

Pagina 14

Software aggiuntivo

Per poter dire di avere un setup completo di qmail sono disponibili molti pacchetti software extra

vpopmail	Pacchetto per la gestione dei virtualdomains

qmailadmin	Amministrazione di account via web

sqwebmail	Client webmail

Tutti questi 3 pacchetti sono sviluppati e mantenuti da Inter7 (http://www.inter7.com)

ezmlm	Mailing list manager (scritto sempre dal granitico DJB)

courier-imapd	Server IMAP (Courier)

E in aggiunta ci sono miriadi di patch:

qmail-ldap

qmail-tarpitting

SSL Patches

Ulteriori informazioni e documentazione sono disponibili su www.qmail.org e www.lifewithqmail.org

Grazie della pazienza; se avete dubbi/domande/osservazioni potete chiedere

Fine...

Ricordatevi dei ricchi premi in palio alle ore 16:00 (questionario)

2003-11-20T13:33:36