Postfix: History
Please note this is an old version of this entry, which may differ significantly from the current revision.
Contributor:

Postfix is a free and open-source mail transfer agent (MTA) that routes and delivers electronic mail. It is released under the IBM Public License 1.0 which is a free software license. Alternatively, starting with version 3.2.5, it is available under the Eclipse Public License 2.0 at the user's option. Originally written in 1997 by Wietse Venema at the IBM Thomas J. Watson Research Center in New York, and first released in December 1998, Postfix continues (As of 2022) to be actively developed by its creator and other contributors. The software is also known by its former names VMailer and IBM Secure Mailer. The name Postfix is a compound of "post" (which is another word for "mail") and "fix "(which is for other software that inspired Postfix development). In a study published on June 1, 2022 by E-Soft, Inc., approximately 34% of the publicly reachable mail-servers on the Internet ran Postfix, making it the second most popular mail server behind Exim. Note: this survey covers less than 25% of the 4+ million reachable SMTP servers on the Internet.

  • 3.2.5
  • free software
  • free and open-source

1. Typical Deployment

As an SMTP server, Postfix implements a first layer of defense against spambots and malware. Administrators can combine Postfix with other software that provides spam/virus filtering (e.g., Amavisd-new), message-store access (e.g., Dovecot), or complex SMTP-level access-policies (e.g., postfwd, milter-regex, policyd-weight).

As an SMTP client, Postfix implements a high-performance parallelized mail-delivery engine. Postfix is often combined with mailing-list software (such as Mailman).

2. Operating Systems

Postfix runs (or has run) on AIX, BSD, HP-UX, Linux, macOS, Solaris and, generally speaking, on every Unix-like operating system that ships with a C compiler and delivers a standard POSIX development environment. It is the default MTA for the macOS, NetBSD,[1] RedHat/CentOS[2] and Ubuntu operating systems.[3]

3. Architecture

Postfix consists of a combination of server programs that run in the background, and client programs that are invoked by user programs or by system administrators.

The Postfix core consists of several dozen server programs that run in the background, each handling one specific aspect of email delivery. Examples are the SMTP server, the scheduler, the address rewriter, and the local delivery server. For damage-control purposes, most server programs run with fixed reduced privileges, and terminate voluntarily after processing a limited number of requests. To conserve system resources, most server programs terminate when they become idle.

Client programs run outside the Postfix core. They interact with Postfix server programs through mail delivery instructions in the user's ~/.forward file, and through small "gate" programs to submit mail or to request queue status information.

Other programs provide administrative support to start or stop Postfix, query status information, manipulate the queue, or to examine or update its configuration files.

Yellow ellipses

One of Postfix' many daemons serving exactly one purpose. This split-up into many smaller pieces of software is considered one of the reasons why Postfix is secure and stable.

Blue boxes

The blue boxes represent so-called lookup tables. A lookup table consists of two columns (key and value) containing information used for access control, e-mail routing etc.

Orange boxes

The orange boxes are either mail queues or files. In either case, e-mails are stored on persistent media (e.g., a hard disk).

White clouds

The clouds stand for points at which e-mails enter or leave Postfix. For example, smtpd receives mail from other mail servers or users whereas smtp relays mail to other MTAs.

4. Implementation

The Postfix implementation uses safe subsets of the C language and of the POSIX system API. These subsets are buried under an abstraction layer that contains about 50% of all Postfix source code, and that provides the foundation on which all Postfix programs are built. For example, the "vstring" primitive makes Postfix code resistant to buffer overflow[4] attacks, and the "safe open" primitive makes Postfix code resistant to race condition attacks on systems that implement the POSIX file system API. This abstraction layer does not affect the attack resistance of non-Postfix code, such as code in system libraries or in third-party libraries.

5. Robustness

Conceptually, Postfix manages pipelines of processes that pass the responsibility for message delivery and error notification from one process to the next. All message and notification "state" information is persisted in the file system. The processes in a pipeline operate mostly without centralized control; this relative autonomy simplifies error recovery. When a process fails before completing its part of a file or protocol transaction, its predecessor in the pipeline backs off and retries the request later, and its successor in the pipeline discards unfinished work. Many Postfix daemons can simply "die" when they run into a problem; they are automatically restarted when the next service request arrives. This approach makes Postfix highly resilient, as long as the operating system or hardware don't fail catastrophically.

6. Performance

One single Postfix instance has been clocked at ~300 message deliveries/second[5] across the Internet, running on commodity hardware (a vintage-2003 Dell 1850 system with battery-backed MegaRAID controller and two SCSI disks). This delivery rate is an order of magnitude below the "intrinsic" limit of 2500 message deliveries/second[5] that was achieved with the mail queue on a RAM disk while delivering to the "discard" transport (with a dual-core Opteron system in 2007).

Mail systems such as Postfix and Qmail achieve high performance by delivering mail in parallel sessions. With mail systems such as Sendmail and Exim that make one connection at a time, high performance can be achieved by submitting limited batches of mail in parallel, so that each batch is delivered by a different process. Postfix and Qmail require parallel submission into different MTA instances once they reach their intrinsic performance limit, or the performance limits of the hardware or operating system.

The delivery rates cited above are largely theoretical. With bulk mail delivery, the true delivery rate is primarily determined by the receiver's mail receiving policies and by the sender's reputation.

7. Base Configuration

The main.cf file stores site-specific Postfix configuration parameters while master.cf defines daemon processes.[6] The Postfix Basic Configuration tutorial covers the core settings that each site needs to consider, and the Postfix Standard Configuration Examples document discusses configuration settings for a few common environments. The Postfix Address Rewriting document covers address rewriting and mail routing. The full documentation collection is at Postfix Documentation

More complex Postfix implementations may include: integration with other applications such as SpamAssassin; support for multiple virtual domain names - and use databases such as MySQL to control complex configurations.

8. Release History

Version Release date [7][8][9] Significant changes
Major Minor
rowspan="10" 0.8 0.8.0 6 September 1999  
0.8.1 6 September 1999  
0.8.2 6 September 1999  
0.8.3 21 September 1999  
0.8.4 22 September 1999  
0.8.5 22 September 1999  
0.8.6 6 November 1999  
0.8.7 12 November 1999  
0.8.8 21 November 1999  
0.8.9 10 December 1999  
rowspan="14" 0.9 0.9.0 31 December 1999  
0.9.1 1 January 2000  
0.9.2 3 January 2000  
0.9.3 26 January 2000  
0.9.4 29 january 2000  
0.9.5 8 March 2000  
0.9.6 29 March 2000  
0.9.7 11 May 2000  
0.9.8 30 May 2000  
0.9.9 17 September 2000  
0.9.10 29 October 2000  
0.9.11 21 November 2000  
0.9.12 7 December 2000  
0.9.13 9 December 2000  
rowspan="9" 1.0 1.0.0 28 February 2001  
1.0.1 28 March 2001  
1.0.2 29 April 2001  
1.0.3 25 May 2001  
1.0.4 30 July 2001  
1.0.5 16 September 2001  
1.0.6 3 November 2001  
1.0.7 13 November 2001  
1.0.8 14 November 2001  
rowspan="14" 1.1 1.1.0 17 January 2002  
1.1.1 21 January 2002  
1.1.2 24 January 2002  
1.1.3 1 February 2002  
1.1.4 25 February 2002  
1.1.5 10 March 2002  
1.1.6 25 March 2002  
1.1.7 30 March 2002  
1.1.8 4 May 2002  
1.1.9 12 May 2002  
1.1.10 13 May 2002  
1.1.11 27 May 2002  
1.1.12 21 Nov 2002  
1.1.13 27 July 2003  
rowspan="21" 2.0 2.0.0 22 December 2002  
2.0.1 23 February 2003  
2.0.2 23 February 2003  
2.0.3 23 February 2003  
2.0.4 23 February 2003  
2.0.5 2 March 2003  
2.0.6 4 March 2003  
2.0.7 18 March 2003  
2.0.8 14 April 2003  
2.0.9 17 April 2003  
2.0.10 20 May 2003  
2.0.11 8 June 2003  
2.0.12 10 june 2003  
2.0.13 28 June 2003  
2.0.14 11 August 2003  
2.0.15 4 September 2003  
2.0.16 21 January 2004  
2.0.17 21 January 2004  
2.0.18 24 January 2004  
2.0.19 11 March 2004  
2.0.20 21 April 2004  
rowspan="7" 2.1 2.1.0 22 April 2004  
2.1.1 2 May 2004  
2.1.2 14 June 2004  
2.1.3 17 June 2004  
2.1.4 29 June 2004  
2.1.5 14 September 2004  
2.1.6 8 May 2005  
rowspan="13" 2.2 2.2.0 09 March 2005  
2.2.1 14 March 2005  
2.2.2 31 March 2005  
2.2.3 28 April 2005  
2.2.4 20 June 2005  
2.2.5 18 July 2005  
2.2.6 28 November 2005  
2.2.7 7 December 2005  
2.2.8 2 January 2006  
2.2.9 20 February 2006  
2.2.10 5 April 2006  
2.2.11 23 July 2006  
2.2.12 20 October 2007  
rowspan="20" 2.3 2.3.0 10 july 2006  
2.3.1 23 July 2006  
2.3.2 26 July 2006  
2.3.3 24 August 2006  
2.3.4 31 October 2006  
2.3.5 10 December 2006  
2.3.6 31 December 2006  
2.3.7 29 January 2007  
2.3.8 1 March 2007  
2.3.9 22 April 2007  
2.3.10 29 May 2007  
2.3.11 30 May 2007  
2.3.12 30 July 2007  
2.3.13 16 October 2007  
2.3.14 30 January 2008  
2.3.15 4 August 2008  
2.3.16 3 January 2009  
2.3.17 11 May 2009  
2.3.18 25 August 2009  
2.3.19 27 August 2009  
rowspan="17" 2.4 2.4.0 22 April 2007  
2.4.1 29 may 2007  
2.4.2 30 May 2007  
2.4.3 30 June 2007  
2.4.4 30 July 2007  
2.4.5 30 July 2007  
2.4.6 16 October 2007  
2.4.7 30 January 2008  
2.4.8 4 August 2008  
2.4.9 30 August 2008  
2.4.10 3 January 2009  
2.4.11 11 May 2009  
2.4.12 25 August 2009  
2.4.13 27 August 2009  
2.4.14 21 March 2010  
2.4.15 22 November 2010  
2.4.16 28 February 2011  
rowspan="18" 2.5 2.5.0 24 January 2008  
2.5.1 15 February 2008  
2.5.2 7 May 2008  
2.5.3 26 July 2008  
2.5.4 13 August 2008  
2.5.5 30 August 2008  
2.5.6 3 January 2008  
2.5.7 11 May 2009  
2.5.8 28 August 2009 Withdrawn release.
2.5.9 28 August 2009  
2.5.10 21 March 2010  
2.5.11 22 November 2010  
2.5.12 28 February 2011  
2.5.13 18 April 2011  
2.5.14 6 July 2011  
2.5.15 1 September 2011  
2.5.16 22 October 2011  
2.5.17 6 February 2012 EOL 2.5
rowspan="20" 2.6 2.6.0 11 May 2009  
2.6.1 19 May 2009  
2.6.2 03 June 2009  
2.6.3 02 August 2009 Unannounced release.
2.6.4 25 August 2009 Withdrawn release.
2.6.5 28 August 2009  
2.6.6 19 March 2010  
2.6.7 08 June 2010  
2.6.8 23 November 2010  
2.6.9 03 March 2011  
2.6.10 09 May 2011  
2.6.11 07 July 2011  
2.6.12 02 September 2011  
2.6.13 24 October 2011  
2.6.14 04 February 2012  
2.6.15 24 April 2012  
2.6.16 20 May 2012  
2.6.17 01 August 2012  
2.6.18 13 December 2012  
2.6.19 03 February 2013 EOL 2.6
rowspan="17" 2.7 2.7.0 13 February 2010  
2.7.1 08 June 2010  
2.7.2 23 November 2010  
2.7.3 03 March 2011  
2.7.4 09 May 2011  
2.7.5 07 July 2011  
2.7.6 02 September 2011  
2.7.7 24 October 2011  
2.7.8 04 February 2012  
2.7.9 24 April 2012  
2.7.10 20 May 2012  
2.7.11 01 August 2012  
2.7.12 13 December 2012  
2.7.13 03 February 2013  
2.7.14 22 June 2013  
2.7.15 05 September 2013  
2.7.16 16 January 2014 EOL 2.7[10]
rowspan="21" 2.8 2.8.0 20 January 2011 Introduction of postscreen daemon that sits before the main postfix and acts as a Zombie blocker. Also: DNS whitelisting, SQLite support[11]
2.8.1 22 February 2011  
2.8.2 21 March 2011  
2.8.3 9 May 2011  
2.8.4 7 July 2011  
2.8.5 3 September 2011  
2.8.6 24 October 2011  
2.8.7 7 November 2011  
2.8.8 1 February 2012  
2.8.9 5 March 2012  
2.8.10 24 April 2012  
2.8.11 20 May 2012  
2.8.12 1 August 2012  
2.8.13 13 December 2012  
2.8.14 4 February 2013  
2.8.15 22 June 2013  
2.8.16 5 September 2013  
2.8.17 16 January 2014  
2.8.18 13 October 2014  
2.8.19 19 October 2014  
2.8.20 8 February 2015 EOL 2.8[12]
rowspan="16" 2.9 2.9.0 1 February 2012 Memcache support, gradual degradation[13]
2.9.1 18 February 2012  
2.9.2 24 April 2012  
2.9.3 20 May 2012  
2.9.4 1 August 2012  
2.9.5 13 December 2012  
2.9.6 4 February 2013  
2.9.7 22 June 2013  
2.9.8 5 September 2013  
2.9.9 16 January 2014  
2.9.10 13 October 2014  
2.9.11 19 October 2014  
2.9.12 8 February 2015  
2.9.13 12 April 2015  
2.9.14 20 July 2015  
2.9.15 10 October 2015 EOL 2.9[14]
rowspan="11" 2.10 2.10.0 11 February 2013 Support for TLSv1.1 and TLSv1.2[15]
2.10.1 22 June 2013  
2.10.2 5 September 2013  
2.10.3 16 January 2014  
2.10.4 13 October 2014  
2.10.5 19 October 2014  
2.10.6 8 February 2015  
2.10.7 12 April 2015  
2.10.8 20 July 2015  
2.10.9 10 October 2015  
2.10.10 15 May 2016 EOL 2.10[16]
rowspan="12" 2.11 2.11.0 15 January 2014 Support for DANE[17][18]
2.11.1 7 May 2014  
2.11.2 13 October 2014  
2.11.3 19 October 2014  
2.11.4 8 February 2015  
2.11.5 12 April 2015  
2.11.6 20 July 2015  
2.11.7 10 October 2015  
2.11.8 15 May 2016  
2.11.9 1 January 2017  
2.11.10 13 June 2017  
2.11.11 27 January 2018  
rowspan="15" 3.0
3.0.1 12 April 2015  
3.0.2 20 July 2015  
3.0.3 10 October 2015  
3.0.4 21 February 2016  
3.0.5 15 May 2016  
3.0.6 28 August 2016  
3.0.7 1 October 2016  
3.0.8 1 January 2017  
3.0.10 13 June 2017  
3.0.11 28 October 2017  
3.0.12 27 January 2018  
3.0.13 20 May 2018  
3.0.14 24 November 2018  
3.0.15 26 February 2019  
rowspan="15" 3.1 3.1.0 24 February 2016 Simplified setup of opportunistic TLS and SMTP server key/certificate management, positive and negative DNS reply TTL support in postscreen, SASL AUTH rate limit in the SMTP server, safety limit on the number of address verify requests, JSON queue listing, destination-independent delivery rate delay, inter alia.[19]
3.1.1 15 May 2016  
3.1.2 28 August 2016  
3.1.3 1 October 2016  
3.1.4 1 January 2017  
3.1.6 13 June 2017  
3.1.7 28 October 2017  
3.1.8 27 January 2018  
3.1.9 20 May 2018  
3.1.10 24 November 2018  
3.1.11 26 February 2019  
3.1.12 30 March 2019  
3.1.13 29 June 2019  
3.1.14 22 September 2019  
3.1.15 3 February 2020  
rowspan="23" 3.2 3.2.0 28 February 2017 Elliptic curve negotiation with OpenSSL ≥ 1.0.2, stored-procedure support for MySQL databases, cidr: table support for if/endif and negation, support for per-client Milter configuration, "PASS" and "STRIP" actions in header/body_checks, and more.[20]
3.2.1 10 June 2017  
3.2.2 13 June 2017  
3.2.3 24 September 2017  
3.2.4 28 October 2017  
3.2.5 27 January 2018  
3.2.6 19 May 2018  
3.2.7 24 November 2018  
3.2.8 26 February 2019  
3.2.9 30 March 2019  
3.2.10 29 June 2019  
3.2.11 21 September 2019  
3.2.12 03 February 2020  
3.2.13 12 March 2020  
3.2.14 18 April 2020  
3.2.15 16 May 2020  
3.2.16 14 June 2020  
3.2.17 27 June 2020  
3.2.18 24 July 2020  
3.2.19 26 July 2020  
3.2.20 07 November 2020  
3.2.21 17 January 2021  
3.2.22 11 April 2021  
rowspan="23" 3.3 3.3.0 21 February 2018 Support for legacy release Postfix 2.11 ended[21]
3.3.1 19 May 2018  
3.3.2 24 November 2018  
3.3.3 26 February 2019  
3.3.4 30 March 2019  
3.3.5 29 June 2019  
3.3.6 21 September 2019  
3.3.7 03 February 2020  
3.3.8 12 March 2020  
3.3.9 18 April 2020  
3.3.10 16 May 2020  
3.3.11 14 June 2020  
3.3.12 27 June 2020  
3.3.13 24 July 2020  
3.3.14 26 July 2020  
3.3.15 07 November 2020  
3.3.16 17 January 2021  
3.3.17 11 April 2021  
3.3.18 13 June 2021  
3.3.19 24 July 2021  
3.3.20 07 November 2021  
3.3.21 14 January 2022  
3.3.22 05 February 2022  
rowspan="26" 3.4 3.4.0 27 February 2019 Support for legacy release Postfix 3.0 ended[22]
3.4.1 07 March 2019  
3.4.2 10 March 2019  
3.4.3 10 March 2019  
3.4.4 14 March 2019  
3.4.5 30 March 2019  
3.4.6 29 June 2019  
3.4.7 21 September 2019  
3.4.8 24 November 2019  
3.4.9 03 February 2020  
3.4.10 12 March 2020  
3.4.11 18 April 2020  
3.4.12 16 May 2020  
3.4.13 14 June 2020  
3.4.14 27 June 2020  
3.4.15 24 July 2020  
3.4.16 26 July 2020  
3.4.17 30 August 2020  
3.4.18 07 November 2020  
3.4.19 17 January 2021  
3.4.20 11 April 2021  
3.4.21 13 June 2021  
3.4.22 24 July 2021  
3.4.23 07 November 2021  
3.4.24 14 January 2022  
3.4.25 05 February 2022  
rowspan="16" 3.5 3.5.0 16 March 2020 Support for legacy release Postfix 3.1 ended[23]
3.5.1 18 April 2020  
3.5.2 16 May 2020  
3.5.3 14 June 2020  
3.5.4 27 June 2020  
3.5.5 24 July 2020  
3.5.6 26 July 2020  
3.5.7 30 August 2020  
3.5.8 07 November 2020  
3.5.9 17 January 2021  
3.5.10 11 April 2021  
3.5.11 13 June 2021  
3.5.12 24 July 2021  
3.5.13 07 November 2021  
3.5.14 14 January 2022  
3.5.15 05 February 2022  
rowspan="6" 3.6 3.6.0 29 April 2021 Support for legacy release Postfix 3.2 ended[24]
3.6.1 13 June 2021  
3.6.2 24 July 2021  
3.6.3 07 November 2021  
3.6.4 14 January 2022  
3.6.5 05 February 2022  
rowspan="1" 3.7 3.7.0 05 February 2022 Support for legacy release Postfix 3.3 ended[25]
3.8   25 March 2022  
{{{2}}}

The content is sourced from: https://handwiki.org/wiki/Software:Postfix

References

  1. "The NetBSD Guide. Chapter 27. Mail and news". http://netbsd.org/docs/guide/en/chap-mail.html. 
  2. "CHAPTER 24. POSTFIX". https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/chap-managing_confined_services-postfix. 
  3. "Postfix". Community Documentation, Ubuntu Wiki. https://help.ubuntu.com/community/Postfix. 
  4. Hontañón, Ramón J (July 10, 2001). Linux Security. San Francisco: Sybex. p. 166. ISBN 978-0-7821-2741-6. https://books.google.com/?id=wYBbM8ol2McC&pg=PA166&lpg=PA166&dq=postfix+resilient+against+buffer+overflow. Retrieved 2011-09-21. 
  5. "Bulk Mailing Performance". https://groups.google.com/forum/?fromgroups=#!topic/mailing.postfix.users/pPcRJFJmdeA. 
  6. Postfix-Tutorial.com: Postfix, Courier/POP, SASL & Spamassassin – with MySQL admin http://www.postfix-tutorial.com/
  7. Postfix Source Code http://ftp.porcupine.org/mirrors/postfix-release/index.html
  8. Index of /pub/postfix-release/official http://mirror.reverse.net/pub/postfix-release/official/
  9. Postfix Announcements http://www.postfix.org/announcements.html
  10. "Postfix legacy releases 2.10.3, 2.9.9, 2.8.17, and 2.7.16". http://www.postfix.org/announcements/postfix-2.10.3.html. 
  11. "Postfix stable release 2.8.0". http://www.postfix.org/announcements/postfix-2.8.0.html. 
  12. "Postfix legacy releases 2.11.4, 2.10.6, 2.9.12, and 2.8.20". http://www.postfix.org/announcements/postfix-2.11.4.html. 
  13. "Postfix stable release 2.9.0". http://www.postfix.org/announcements/postfix-2.9.0.html. 
  14. "Postfix stable release 3.1.0". http://www.postfix.org/announcements/postfix-3.1.0.html. 
  15. "Postfix stable release 2.10.0". http://www.postfix.org/announcements/postfix-2.10.0.html. 
  16. "Postfix stable release 3.1.4 and legacy releases 3.0.8, 2.11.9". http://www.postfix.org/announcements/postfix-3.1.4.html. 
  17. "Postfix 2.11.0-RC2 available with feature-complete DANE support". http://www.ietf.org/mail-archive/web/dane/current/msg06294.html. 
  18. "Postfix stable release 2.11.0". http://www.postfix.org/announcements/postfix-2.11.0.html. 
  19. "Postfix stable release 3.1.0". http://www.postfix.org/announcements/postfix-3.1.0.html. 
  20. "Postfix stable release 3.2.0". http://www.postfix.org/announcements/postfix-3.2.0.html. 
  21. "Postfix stable release 3.3.0". http://www.postfix.org/announcements/postfix-3.3.0.html. 
  22. "Postfix stable release 3.4.0". http://www.postfix.org/announcements/postfix-3.4.0.html. 
  23. "Postfix stable release 3.5.0". http://www.postfix.org/announcements/postfix-3.5.0.html. 
  24. "Postfix stable release 3.6.0". http://www.postfix.org/announcements/postfix-3.6.0.html. 
  25. "Postfix stable release 3.7.0". http://www.postfix.org/announcements/postfix-3.7.0.html. 
More
This entry is offline, you can click here to edit this entry!
Video Production Service