Postfix, server per gestire la posta elettronica in uscita (protocollo SMTP)
Postfix è un server per gestire la posta elettronica in uscita (protocollo SMTP). Postfix può essere considerato come alternativa a Sendmail, con il vantaggio di essere molto più semplice da utilizzare.

Postfix è un demone di posta SMTP (categorizzato comunemente MTA, o Mail Transfer Agent) scritto inizialmente da Wietse Zweitze Venema e rilasciato con licenza IBM Public License, attualmente riceve molteplici e svariati contributi dal mondo open source. Attualmente è compilabile ed eseguibile sui sistemi operativi AIX, BSD, HP-UX, IRIX, Linux, Mac OS X, Solaris, Tru64 UNIX e in genere su tutti i sistemi operativi Unix-like dotati di un compilatore ANSI C, librerie di sviluppo compatibili POSIX e che abbia anche le librerie necessarie per gestire i socket BSD.

Nasce alla fine degli anni '90 con lo scopo di fornire un'alternativa a Sendmail che offrisse maggiori garanzie per quanto riguarda la sicurezza.
Fra i pregi di Postfix ci sono l'enorme tolleranza e capacità di contenimento riguardo ai buffer overflow ed è capace di gestire grandi quantità di messaggi di posta elettronica. Attualmente è presente nella quasi totalità delle distribuzioni Linux e scelto come MTA di default su molte di queste.
È giunto alla versione 2.3, nella quale offre supporto per:
* Transport Layer Security (TLS);
* la possibilità di grey-list e il content filtering avanzato;
* supporto per vari database per le tabelle di configurazione e conversione: Berkeley DB, CDB, DBM, LDAP, MySQL e PostgreSQL;
* supporto per mailbox, maildir e domini virtuali;
* manipolazione degli indirizzi, VERP, autenticazione SASL e molto altro.
Postfix si struttura in diversi demoni che svolgono ognuno una sola funzione, ognuno dei quali eseguito con diritti minimi. Questo garantisce che qualsiasi bug o exploit che coinvolga uno dei "pezzi" di Postfix non comprometta l'intero sistema di delivery delle e-mail. Un solo processo deve avere diritti privilegiati, tutti gli altri hanno diritti minimi e spesso un file di configurazione proprio, pochi di questi ultimi hanno la capacità di scrivere sulle periferiche di memorizzazione di massa.
Anatomia
Un'immagine proveniente dalla home page di Postfix per descriverne la fisionomia:
Legenda:
* nel rettangolo bordato di nero c'è Postfix
* le ellissi gialle rappresentano i processi/demoni di Postfix
* i rettangoli gialli sono le destinazioni locali di posta (mailbox o maildir) o delle code di posta in ingresso/uscita
* i rettangoli azzurri sono i file di configurazione legati ai singoli processi
Descrittivamente Postfix accetta messaggi in due modi:
1. sorgente locale (Sendmail o altro eseguibile che inietta il messaggio sul pickup);
2. la rete esterna alla macchina (che sia una rete Intranet o Internet).
Nel secondo caso si ha in ascolto sulla porta TCP 25 il demone smtpd, che si occupa di colloquiare con il mittente per definire come stabilire la trasmissione. Il demone ha alcuni file di configurazione che gli permettono di utilizzare fonti esterne per autorizzare la ricezione, fra cui le DNSBL e una access-list (basabile su IP, domini, autenticazione del mittente tramite nome utente e password). Se smtpd accetta l'e-mail passa al demone cleanup il messaggio, terminando il suo compito. cleanup si occupa di prendere in carico il messaggio e inserirlo nella coda di arrivo. Prima di tale operazione viene analizzato l'indirizzo e-mail del mittente e di destinazione ed eventualmente tradotto tramite virtual e canonical (operazione svolta dal demone rewrite), cioè vengono riscritti i campi FROM e TO (più correttamente RCPT) del messaggio. virtual è un derivato di local; il suo compito è quello di rintracciare tramite delle tabelle un indirizzo di posta elettronica e rimpiazzarlo con l'identificativo di un utente locale (esempio: riscrive il RCPT da utente@example.com a utente permettendo la preparazione al salvataggio dell'e-mail nella maildir/mailbox di "utente"). Questo avviene tendenzialmente alle e-mail in arrivo dall'esterno della macchina. canonical svolge la funzione inversa di virtual, modificando il campo FROM convertendo utente@localhost in utente@example.com, indirizzo a cui il resto del mondo potrà eventualmente rispondere.
La locazione di incoming serve come parcheggio temporaneo mentre la parte di assimilazione di Postfix finisce il proprio incarico. Ogni qualvolta viene alterato il contenuto di incoming viene segnalato al demone qmgr che è necessaria un'opera di smaltimento, il quale si prenderà carico dell'e-mail e proverà a passarla a chi di dovere per portarla alla destinazione finale; se si presentano problemi o difficoltà nello svolgere tale compito allora il messaggio viene posto in una differente coda chiamata deferred e rielaborata in seguito. qmgr controlla la coda "deferred" a intervalli regolari solo se la locazione non è vuota. qmgr verifica inanzitutto la disponibilità immediata della destinazione, utilizzando principalmente il relocated, ovvero un elenco di spostamenti della destinazione (nel caso si tratti di destinazione locale) con segnali interpretati come l'utente pippo@example.com è stato spostato su pluto@example.com. Se invece la destinazione è reale e raggiungibile allora "qmgr" si comporta in base ad alcune condizioni:
1. transport tramite resolve stabilisce se l'utente è locale o se l'e-mail deve essere instradata altrove;
2. se la destinazione è un utente locale allora viene passata a local;
3. se la destinazione risiede su un altro server allora il messaggio viene inviato a pipe o smtp per l'invio alla macchina remota.
local è il demone che si occupa di scrivere fisicamente nella mailbox/maildir il messaggio. Per stabilire in modo univoco la reale destinazione si appoggia su una tabella chiamata alias che è un elenco di equivalenze che permettono di attribuire più indirizzi a un unico utente, oppure fa uso di forward che si occupa di inoltrare l'e-mail in una locazione diversa dalla mailbox/maildir propria dell'utente. smtp si comporta complementarmente a smtpd, però anziché ascoltare sulla porta 25 per l'eventuale arrivo di messaggi si fa carico di inoltrare l'e-mail verso il server di destinazione (o comunque definito come passo successivo per raggiungere poi la destinazione) alla porta 25.
UUCP è un protocollo un po' datato, che svolge le stesse funzioni di smtp pero' cercando all'altro capo della comunicazione un server in grado di colloquiare con lo stesso linguaggio.
Accenni sulla configurazione di base
Esistono poi alcuni file di configurazione "globali" all'host (che sia reale o virtuale) in cui è installato il sistema Postfix, fra cui "main.cf". Di norma le impostazioni di default delle forme pacchettizate dalle varie distribuzioni Linux, nelle varie versioni di sistemi operativi BSD suddetto file presenta già parametri idonei a un uso casalingo o amatoriale, rimangono da specificare poche cose, fra cui:
myhostname = FQDN_della_macchina
mydomain = il_vostro_dominio_di_appartenenza
myorigin = cosa_viene_appeso_dopo_la_@
relayhost = il_server_SMTP_del_vostro_ISP
Per ogni altra personalizzazione è raccomandabile usare un motore di ricerca per essere certi di utilizzare la guida più indicata per il sistema operativo in uso.
Supported environments
Postfix runs on AIX, BSD, HP-UX, IRIX, LINUX, MacOS X, Solaris, Tru64 UNIX, and other UNIX systems. It requires ANSI C, a POSIX.1 library, and BSD sockets. See below for the gory details of what Postfix expects from the file system.
Gory details: the Postfix mail queue requires that (1) the file system can rename a file to a near-by directory without changing the file's inode number, and that (2) mail is safely stored after fsync() of that file (not its parent directory) returns successfully, even when that file is renamed to a near-by directory at some later point in time. Maildir delivery also requires that (3) a file can be hard linked between different near-by directories. Mailbox delivery introduces no additional requirements beyond what is already needed for Postfix queues.
Main features
The following is a list of major Postfix features. Some features require third-party libraries (examples: LDAP, SQL, TLS). Other features are available only when the necessary operating system support exists and Postfix knows how to use it (examples: IP version 6, connection caching).
Protocol support
| Postfix 2.2 | Connection cache for SMTP |
| Postfix 2.3 | DKIM, DomainKeys and SenderID authentication (via Milter plug-in) |
| Postfix 2.3 | DSN status notifications |
| Postfix 2.3 | Enhanced status codes |
| Postfix 1.0 | ETRN on-demand relay |
| Postfix 2.2 | IP version 6 |
| Postfix 1.0 | LMTP client |
| Postfix 2.0 | MIME (including 8BITMIME to 7BIT conversion) |
| Postfix 1.0 | Pipelining (SMTP client and server) |
| Postfix 2.3 | Plug-in support for multiple SASL implementations (Cyrus, Dovecot) |
| Postfix 1.0 | SASL authentication |
| Postfix 2.2 | TLS encryption and authentication |
| Postfix 1.1 | QMQP server |
By popular demand...
| Postfix 2.3 | Configurable delivery status notification message text |
| Postfix 2.3 | Sender-dependent SMTP relay lookup |
| Postfix 2.3 | Sender-dependent SASL password lookup |
Junk mail control
| Postfix 2.1 | Access control per client/sender/recipient/etc. |
| Postfix 2.1 | Address probing callout |
| Postfix 1.1 | Content filter (built-in, external before queue, external after queue) |
| Postfix 2.3 | Sendmail Milter (mail filter) protocol |
| Postfix 2.1 | Greylisting plug-in |
| Postfix 2.1 | SPF plug-in |
| Postfix 2.2 | SMTP server per-client rate and concurrency limits |
| Postfix 2.5 | Stress-dependent configuration |
Database support
| Postfix 1.0 | Berkeley DB database |
| Postfix 2.2 | CDB database |
| Postfix 1.0 | DBM database |
| Postfix 1.0 | LDAP database |
| Postfix 1.0 | MySQL database |
| Postfix 2.0 | PostgreSQL database |
Mailbox support
| Postfix 1.0 | Maildir and mailbox format |
| Postfix 1.0 | Virtual domains |
Address manipulation
| Postfix 2.2 | Masquerading addresses in outbound SMTP mail |
| Postfix 2.2 | Selective address rewriting |
| Postfix 1.1 | VERP envelope return addresses |
Postfix Howtos and FAQs
To have information listed on this page, please send mail to wietse@porcupine.org. The information listed here is maintained by the respective authors. It is listed without formal evaluation, in other words, no implied warranty of any kind.
FAQs
- Kyle Dent's Postfix resources.
- Ralf Hildebrandt's Postfix shrine.
PostfixWiki
- Mischa Peters runs a PostfixWiki.
Training
- Heinlein Linux Akademie offers a five-day training course on Postfix.
- GFU It-Consult offers Postfix workshops up to 4 times a year.
- Linuxhotel offers a five-day training course on Postfix.
- Guru Labs class GL275 covers Postfix, email theory, DNS, SMTP Auth, STARTTLS, SpamAssassin, POP3/IMAP4 daemons, and Webmail with Squirrelmail.
- Adaptech Systems class AS220 is a two-day course on Postfix and email security including a spam quarantine system that was developed to work with Postfix.
MS Exchange Integration
The following documents describe how to build the list of valid Exchange recipients for a Postfix 2.x "front end" MTA, so that you don't clog the Postfix mail queue with undeliverable MAILER-DAEMON messages.
- Running commands on the Exchange server and then copying the result to the Postfix box (by Steve Friedl).
- Running a PERL-based LDAP client on the Postfix box that queries the Active Directory domain controllers (by Chris Covington).
TLS
- Postfix SASL Authentication and TLS howto by Patrick Koetter.
- Supplement to Patrick Koetter's document by Adam Shostack.
- Gmail on Home Linux Box using Postfix/TLS/SASL and Fetchmail howto by Mike Chirico.
- Postfix SASL + TLS + OpenBSD howto by Jeffrey Posluns.
- Postfix SASL + TLS + FreeBSD howto by Tim Yocum.
SASL
- Postfix SASL Authentication and TLS howto by Patrick Koetter.
- Gmail on Home Linux Box using Postfix/TLS/SASL and Fetchmail howto by Mike Chirico.
- Cyrus-SASL-2.1.19 + checkpw.c CRYPT PATCH + MySQL-3.23.x + Postfix-2.x howto by Cody Tubbs.
- Postfix SASL + TLS + OpenBSD howto by Jeffrey Posluns.
- Postfix SASL + TLS + FreeBSD howto by Tim Yocum.
- Postfix SASL for Slackware by Henryk Liniowski (Linio).
- Postfix SMTP Authentication howto by Devin L. Ganger.
- Postfix+SASL+OpenSSL howto for Solaris 8 by Andy Barclay.
Adding disclaimers
- Altermime system to alter mime-encoded messages. With Postfix, use this as an external content filter in order to mutilate transit mail.
UCE/Virus
- Gentoo mailfiltering gateway guide
- Filtering spam with Postfix with spf, postgrey and Amavis by Kirk Strauser.
- How to get Dspam, Postfix, and Procmail to play well together by John Locke.
- Postfix Anti-UCE Cheat-Sheet by Jim Seymour.
- My Understanding Of How UCE Actually Works by Meng Wong.
- Anti-SPAM Gateway Using OpenBSD, Postfix, Amavisd-new, SpamAssassin, Razor and DCC by Scott Vintinner.
- Postfix UCE/anti-spam guide by Jeffrey Posluns.
- UCE and other howtos by Ralf Hildebrandt.
- Header/body junk mail patterns by Jesus Climent.
- See also the add-on software page for SpamAssassin etc.
POP/IMAP and the kitchen sink
- Gentoo Virtual Mailhosting System with Postfix Guide
- MAC OS X howto for using Postfix with the (ugh) UW IMAP server.
- GNU pop3d howto by Jørgen Thomsen.
- RedHat 7.1 + Postfix + Courier Maildrop + Courier IMAP howto by Robin Whittle.
- Postfix+Cyrus+Web-cyradm howto by Luc de Louw.
- Postfix+LDAP+Courier-IMAP howto by Jeroen Vriesman.
- Postfix+MySQL+Courier-IMAP howto by Phil Pereira.
- Postfix+MySQL+Courier-IMAP howto by Mischa Peters.
- Postfix+MySQL+Courier-IMAP howto by Kirby Menzel and Lucas Peet.
- Postfix+MySQL+Courier-IMAP howto by Keith Matthews and contributors.
- Postfix+MySQL+Courier-IMAP+Maildrop+SpamAssassin howto by Serge Stepanov.
- Postfix+MySQL+Dovecot-POP/IMAP+Amavis howto on Debian Etch by Christoph Haas.
- Postfix+MySQL+Courier-IMAP+Amavis howto by Martin List-Petersen.
- Postfix+MySQL+Courier+SpamAssassin+Clamav+Amavisd-new+SASL+Maildrop+Squirrelmail howto by Genco Yilmaz. Uses the postfixmanager user management tool.
Miscellaneous
- Multiple Postfix instances howto by Derrick Webber.
- RedHat 7.3 laptop howto by Mark Frazer.
- Postfix Howtos by Ralf Hildebrandt.
- Postfix Howtos by Matthias Andree.
General Email/System Administration
- Fixing common DNS problems (bind8nt.meiway.com)
- Simplifying Mailer Daemons and Associated Tools by Chuck S. Mead, Jr.
- Configuring large-scale UNIX/Linux servers (www.kegel.com)






digg it
del.icio.us







