#
059c16a8 |
| 23-Dec-2023 |
christos <christos@NetBSD.org> |
Import Postfix 3.8.4 (last was 3.7.3)
December 22, 2023: 3.8.4/3.7.9 ==============================
Security: this release adds support to defend against an email spoofing attack (SMTP smuggling) o
Import Postfix 3.8.4 (last was 3.7.3)
December 22, 2023: 3.8.4/3.7.9 ==============================
Security: this release adds support to defend against an email spoofing attack (SMTP smuggling) on recipients at a Postfix server. For background, see https://www.postfix.org/smtp-smuggling.html.
Sites concerned about SMTP smuggling attacks should enable this feature on Internet-facing Postfix servers. For compatibility with non-standard clients, Postfix by default excludes clients in mynetworks from this countermeasure.
The recommended settings are:
# Optionally disconnect remote SMTP clients that send bare newlines, # but allow local clients with non-standard SMTP implementations # such as netcat, fax machines, or load balancer health checks. # smtpd_forbid_bare_newline = yes smtpd_forbid_bare_newline_exclusions = $mynetworks The smtpd_forbid_bare_newline feature is disabled by default.
November 1, 2023: 3.8.3/3.7.8 =============================
Bugfix (defect introduced Postfix 2.5, date 20080104): the Postfix SMTP server was waiting for a client command instead of replying immediately, after a client certificate verification error in TLS wrappermode. Reported by Andreas Kinzler.
Usability: the Postfix SMTP server (finally) attempts to log the SASL username after authentication failure. In Postfix logging, this appends ", sasl_username=xxx" after the reason for SASL authentication failure. The logging replaces an unavailable reason with "(reason unavailable)", and replaces an unavailable sasl_username with "(unavailable)". Based on code by Jozsef Kadlecsik.
Compatibility bugfix (defect introduced: Postfix 2.11, date 20130405): in forward_path, the expression ${recipient_delimiter} would expand to an empty string when a recipient address had no recipient delimiter. The compatibility fix is to use a configured recipient delimiter value instead. Reported by Tod A. Sandman.
September 1, 2023: 3.8.2/3.7.7 ==============================
Bugfix (defect introduced: Postfix alpha, 19980207): the valid_hostname() check in the Postfix DNS client library was blocking unusual but legitimate wildcard names (*.name) in some DNS lookup results and lookup requests. Examples:
name class/type result *.one.example IN CNAME *.other.example *.other.example IN A 10.0.0.1 *.other.example IN TLSA ..certificate info... Such syntax is blesed in RFC 1034 section 4.3.3.
Bugfix (defect introduced: Postfix 3.0, 20140218): when an address verification probe fails during or after an opportunistic TLS handshake, don't enforce a minimum time-in-queue before falling back to plaintext. Problem reported by Serg.
June 5, 2023: 3.8.1/3.7.6 =========================
Optional: harden a Postfix SMTP server against remote SMTP clients that violate RFC 2920 (or 5321) command pipelining constraints. With "smtpd_forbid_unauth_pipelining = yes", the server disconnects a client immediately, after responding with "554 5.5.0 Error: SMTP protocol synchronization" and after logging "improper command pipelining" with the unexpected remote SMTP client input. This feature is disabled by default in Postfix 3.5-3.8 to avoid breaking home-grown utilities, but it is enabled by default in Postfix 3.9. A similar feature is enabled by default in the Exim SMTP server.
Optional: some OS distributions crank up TLS security to 11, and in doing so increase the number of plaintext email deliveries. This introduces basic OpenSSL configuration file support that may be used to override OS-level settings. Details are in the postconf(5) manpage under tls_config_file and tls_config_name.
Bugfix (defect introduced: Postfix 1.0): the command "postconf .. name=v1 .. name=v2 .." (multiple instances of the same parameter name) created multiple main.cf name=value entries with the same parameter name. It now logs a warning and skips the earlier name(s) and value(s). Found during code maintenance.
Bugfix (defect introduced: Postfix 3.3): the command "postconf -M name1/type1='name2 type2 ...'" died with a segmentation violation when the request matched multiple master.cf entries. The master.cf file was not damaged. Problem reported by SATOH Fumiyasu.
Bugfix (defect introduced: Postfix 2.11): the command "postconf -M name1/type1='name2 type2 ...'" could add a service definition to master.cf that conflicted with an already existing service definition. It now replaces all existing service definitions that match the service pattern 'name1/type1' or the service name and type in 'name2 type2 ...' with a single service definition 'name2 type2 ...'. Problem reported by SATOH Fumiyasu.
Bugfix (defect introduced: Postfix 3.8) the posttls-finger command could access uninitialized memory when reconnecting. This also fixes a malformed warning message when a destination contains ":service" information. Reported by Thomas Korbar.
Bugfix (defect introduced: Postfix 3.2): the MySQL client could return "not found" instead of "error" (for example, resulting in a 5XX SMTP status instead of 4XX) during the time that all MySQL server connections were turned down after error. Found during code maintenance. File: global/dict_mysql.c. This was already fixed in Postfix 3.4-3.7.
April 18, 2023: 3.7.5 =====================
Bugfix (problem introduced in Postfix 3.5): check_ccert_access did not handle inline map specifications. Report and fix by Sean Gallagher.
Bugfix (problem introduced in Postfix 3.4): the posttls-finger command failed to detect that a connection was resumed in the case that a server did not return a certificate. Fix by Viktor Dukhovni.
Workaround: OpenSSL 3.x EVP_get_cipherbyname() can return lazily-bound handles. Postfix now checks that the expected functionality will be available instead of failing later. Fix by Viktor Dukhovni.
Safety: the long form "{ name = value }" in import_environment or export_environment is not documented (with spaces around the '='), but it was silently accepted, and it was stored in the process environment as the invalid form "name = value", thus not setting or overriding an entry for "name". This form is now stored as the expected "name=value". Found during code maintenance.
Bugfix (problem introduced in Postfix 3.2): the MySQL client could return "not found" instead of "error" (for example, resulting in a 5XX SMTP status instead of 4XX) during the time that all MySQL server connections were turned down after error. Found during code maintenance.
April 17, 2023: 3.8.0 =====================
Support to look up DNS SRV records in the Postfix SMTP/LMTP client, Based on code by Tomas Korbar (Red Hat). For example, with "use_srv_lookup = submission" and "relayhost = example.com:submission", the Postfix SMTP client will look up DNS SRV records for _submission._tcp.example.com, and will relay email through the hosts and ports that are specified with those records.
TLS obsolescence: Postfix now treats the "export" and "low" cipher grade settings as "medium". The "export" and "low" grades are no longer supported in OpenSSL 1.1.1, the minimum version required in Postfix 3.6.0 and later. Also, Postfix default settings now exclude deprecated or unused ciphers (SEED, IDEA, 3DES, RC2, RC4, RC5), digest (MD5), key exchange algorithms (DH, ECDH), and public key algorithm (DSS).
Attack resistance: the Postfix SMTP server can now aggregate smtpd_client_*_rate and smtpd_client_*_count statistics by network block instead of by IP address, to raise the bar against a memory exhaustion attack in the anvil(8) server; Postfix TLS support unconditionally disables TLS renegotiation in the middle of an SMTP connection, to avoid a CPU exhaustion attack.
The PostgreSQL client encoding is now configurable with the "encoding" Postfix configuration file attribute. The default is "UTF8". Previously the encoding was hard-coded as "LATIN1", which is not useful in the context of SMTP.
The postconf command now warns for #comment in or after a Postfix parameter value. Postfix programs do not support #comment after other text, and treat that as input.
January 12, 2023: 3.7.4 =======================
Workaround: with OpenSSL 3 and later always turn on SSL_OP_IGNORE_UNEXPECTED_EOF, to avoid warning messages and missed opportunities for TLS session reuse. This is safe because the SMTP protocol implements application-level framing, and is therefore not affected by TLS truncation attacks. Fix by Viktor Dukhovni.
Workaround: OpenSSL 3.x EVP_get_digestbyname() can return lazily-bound handles for digest implementations. In sufficiently hostile configurations, Postfix could mistakenly believe that a digest algorithm is available, and fail when it is not. A similar workaround may be needed for EVP_get_cipherbyname(). Fix by Viktor Dukhovni.
Bugfix (bug introduced in Postfix 2.11): the checkok() macro in tls/tls_fprint.c evaluated its argument unconditionally; it should evaluate the argument only if there was no prior error. Found during code review.
Bugfix (bug introduced in Postfix 2.8): postscreen died with a segmentation violation when postscreen_dnsbl_threshold < 1. It should reject such input with a fatal error instead. Discovered by Benny Pedersen.
Bitrot: fixes for linker warnings from newer Darwin (MacOS) versions. Viktor Dukhovni.
Portability: Linux 6 support.
Added missing documentation that cidr:, pcre: and regexp: tables support inline specification only in Postfix 3.7 and later.
show more ...
|
#
4a672054 |
| 08-Oct-2022 |
christos <christos@NetBSD.org> |
Import Postfix-3.7.3 (previous version was 3.5.2)
This is the Postfix 3.7 (stable) release.
The stable Postfix release is called postfix-3.7.x where 3=major release number, 7=minor release number,
Import Postfix-3.7.3 (previous version was 3.5.2)
This is the Postfix 3.7 (stable) release.
The stable Postfix release is called postfix-3.7.x where 3=major release number, 7=minor release number, x=patchlevel. The stable release never changes except for patches that address bugs or emergencies. Patches change the patchlevel and the release date.
New features are developed in snapshot releases. These are called postfix-3.8-yyyymmdd where yyyymmdd is the release date (yyyy=year, mm=month, dd=day). Patches are never issued for snapshot releases; instead, a new snapshot is released.
The mail_release_date configuration parameter (format: yyyymmdd) specifies the release date of a stable release or snapshot release.
If you upgrade from Postfix 3.5 or earlier, read RELEASE_NOTES-3.6 before proceeding.
License change ---------------
This software is distributed with a dual license: in addition to the historical IBM Public License 1.0, it is now also distributed with the more recent Eclipse Public License 2.0. Recipients can choose to take the software under the license of their choice. Those who are more comfortable with the IPL can continue with that license.
Bugfix for messages not delivered after "warning: Unexpected record type 'X' ============================================================================
Due to a bug introduced in Postfix 3.7.0, a message could falsely be flagged as corrupt with "warning: Unexpected record type 'X'".
Such messages were moved to the "corrupt" queue directory, where they may still be found. See below for instructions to deal with these falsely flagged messages.
This could happen for messages with 5000 or more recipients, or with fewer recipients on a busy mail server. The problem was first reported by Frank Brendel, reproduced by John Alex.
A file in the "corrupt" queue directory may be inspected with the command "postcat /var/spool/postfix/corrupt/<filename>. If delivery of the file is still desired, the file can be moved back to /var/spool/postfix/incoming after updating Postfix and executing "postfix reload".
Major changes - configuration -----------------------------
[Feature 20210605] Support to inline the content of small cidr:, pcre:, and regexp: tables in Postfix parameter values.
Example:
smtpd_forbidden_commands = CONNECT GET POST regexp:{{/^[^A-Z]/ Thrash}}
This is the new smtpd_forbidden_commands default value. It will immediately disconnect a remote SMTP client when a command does not start with a letter (a-z or A-Z).
The basic syntax is:
/etc/postfix/main.cf: parameter = .. map-type:{ { rule-1 }, { rule-2 } .. } ..
/etc/postfix/master.cf: .. -o { parameter = .. map-type:{ { rule-1 }, { rule-2 } .. } .. } ..
where map-type is one of cidr, pcre, or regexp.
Postfix ignores whitespace after '{' and before '}', and writes each rule as one text line to a nameless in-memory file:
in-memory file: rule-1 rule-2 ..
Postfix parses the result as if it is a file in /etc/postfix.
Note: if a rule contains $, specify $$ to keep Postfix from trying to do $name expansion as it evaluates the parameter value.
Major changes - lmdb support ----------------------------
[Feature 20210605] Overhauled the LMDB client's error handling, and added integration tests for future-proofing. There are no visible changes in documented behavior.
Major changes - logging -----------------------
[Feature 20210815] To make the maillog_file feature more useful, the postlog(1) command is now set-gid postdrop, so that unprivileged programs can use it to write logging through the postlogd(8) daemon. This required hardening the postlog(1) command against privilege escalation attacks. DO NOT turn on the set-gid bit with older postlog(1) implementations.
Major changes - pcre2 support -----------------------------
[Feature 20211127] Support for the pcre2 library (the legacy pcre library is no longer maintained). The Postfix build procedure automatically detects if the pcre2 library is installed, and if it is unavailable, the Postfix build procedure will detect if the legacy pcre library is installed. See PCRE_README if you need to build Postfix with a specific library.
Visible differences: some error messages may have a different text, and the 'X' pattern flag is no longer supported with pcre2.
Major changes - security ------------------------
[Feature 20220102] Postfix programs now randomize the initial state of in-memory hash tables, to defend against hash collision attacks involving a large number of attacker-chosen lookup keys. Presently, the only known opportunity for such attacks involves remote SMTP client IPv6 addresses in the anvil(8) service. The attack would require making hundreds of short-lived connections per second from thousands of different IP addresses, because the anvil(8) service drops inactive counters after 100s. Other in-memory hash tables with attacker-chosen lookup keys are by design limited in size. The fix is cheap, and therefore implemented for all Postfix in-memory hash tables. Problem reported by Pascal Junod.
[Feature 20211030] The postqueue command now sanitizes non-printable characters (such as newlines) in strings before they are formatted as json or as legacy output. These outputs are piped into other programs that are run by administrative users. This closes a hypothetical opportunity for privilege escalation.
[Feature 20210815] Updated defense against remote clients or servers that 'trickle' SMTP or LMTP traffic, based on per-request deadlines and minimum data rates.
Per-request deadlines:
The new {smtpd,smtp,lmtp}_per_request_deadline parameters replace {smtpd,smtp,lmtp}_per_record_deadline, with backwards compatible default settings. This defense is enabled by default in the Postfix SMTP server in case of overload.
The new smtpd_per_record_deadline parameter limits the combined time for the Postfix SMTP server to receive a request and to send a response, while the new {smtp,lmtp}_per_record_deadline parameters limit the combined time for the Postfix SMTP or LMTP client to send a request and to receive a response.
Minimum data rates:
The new smtpd_min_data_rate parameter enforces a minimum plaintext data transfer rate for DATA and BDAT requests, but only when smtpd_per_record_deadline is enabled. After a read operation transfers N plaintext bytes (possibly after TLS decryption), and after the DATA or BDAT request deadline is decreased by the elapsed time of that read operation, the DATA or BDAT request deadline is increased by N/smtpd_min_data_rate seconds. However, the deadline is never increased beyond the smtpd_timeout value. The default minimum data rate is 500 (bytes/second) but is still subject to change.
The new {smtp,lmtp}_min_data_rate parameters enforce the corresponding minimum DATA transfer rates for the Postfix SMTP and LMTP client.
Major changes - tls support ---------------------------
[Cleanup 20220121] The new tlsproxy_client_security_level parameter replaces tlsproxy_client_level, and the new tlsproxy_client_policy_maps parameter replaces tlsproxy_client_policy. This is for consistent parameter naming (tlsproxy_client_xxx corresponds to smtp_tls_xxx). This change was made with backwards-compatible default settings.
[Feature 20210926] Postfix was updated to support OpenSSL 3.0.0 API features, and to work around OpenSSL 3.0.0 bit-rot (avoid using deprecated API features).
Other code health -----------------
[typos] Typo fixes by raf.
[pre-release checks] Added pre-release checks to detect a) new typos in documentation and source-code comments, b) missing entries in the postfix-files file (some documentation would not be installed), c) missing rules in the postlink script (some text would not have a hyperlink in documentation), and d) missing map-based $parameter names in the proxy_read_maps default value (the proxymap daemon would not automatically authorize some proxied maps).
[memory stream] Improved support for memory-based streams made it possible to inline small cidr:, pcre:, and regexp: maps in Postfix parameter values, and to eliminate some ad-hoc code that converted tlsproxy(8) protocol data to or from serialized form.
*************************************************************************
This is the Postfix 3.6 (stable) release.
The stable Postfix release is called postfix-3.6.x where 3=major release number, 6=minor release number, x=patchlevel. The stable release never changes except for patches that address bugs or emergencies. Patches change the patchlevel and the release date.
New features are developed in snapshot releases. These are called postfix-3.7-yyyymmdd where yyyymmdd is the release date (yyyy=year, mm=month, dd=day). Patches are never issued for snapshot releases; instead, a new snapshot is released.
The mail_release_date configuration parameter (format: yyyymmdd) specifies the release date of a stable release or snapshot release.
If you upgrade from Postfix 3.4 or earlier, read RELEASE_NOTES-3.5 before proceeding.
License change ---------------
This software is distributed with a dual license: in addition to the historical IBM Public License 1.0, it is now also distributed with the more recent Eclipse Public License 2.0. Recipients can choose to take the software under the license of their choice. Those who are more comfortable with the IPL can continue with that license.
Major changes - internal protocol identification ------------------------------------------------
[Incompat 20200920] Internal protocols have changed. You need to "postfix stop" before updating, or before backing out to an earlier release, otherwise long-running daemons (pickup, qmgr, verify, tlsproxy, postscreen) may fail to communicate with the rest of Postfix, causing mail delivery delays until Postfix is restarted.
This change does not affect message files in Postfix queue directories, only the communication between running Postfix programs.
With this change, every Postfix internal service, including the postdrop command, announces the name of its protocol before doing any other I/O. Every Postfix client program, including the Postfix sendmail command, will verify that the protocol name matches what it is supposed to be.
The purpose of this change is to produce better error messages, for example, when someone configures the discard daemon as a bounce service in master.cf, or vice versa.
This change may break third-party programs that implement a Postfix-internal protocol such as qpsmtpd. Such programs have never been supported. Fortunately, this will be an easy fix: look at the first data from the cleanup daemon: if it is a protocol announcement, you're talking to Postfix 3.6 or later. That's the only real change.
Major changes - tls -------------------
[Incompat 20200705] The minimum supported OpenSSL version is 1.1.1, which will reach the end of life by 2023-09-11. Postfix 3.6 is expected to reach the end of support in 2025. Until then, Postfix will be updated as needed for compatibility with OpenSSL.
The default fingerprint digest has changed from md5 to sha256 (Postfix 3.6 with compatibility_level >= 3.6). With a lower compatibility_level setting, Postfix defaults to using md5, and logs a warning when a Postfix configuration specifies no explicit digest type.
Export-grade Diffie-Hellman key exchange is no longer supported, and the tlsproxy_tls_dh512_param_file parameter is ignored,
[Feature 20200906] The tlstype.pl helper script by Viktor Dukhovni reports TLS information per message delivery. This processes output from the collate.pl script. See auxiliary/collate/README.tlstype and auxiliary/collate/tlstype.pl.
Major changes - compatibility level -----------------------------------
[Feature 20210109] Starting with Postfix version 3.6, the compatibility level is "3.6". In future Postfix releases, the compatibility level will be the Postfix version that introduced the last incompatible change. The level is formatted as 'major.minor.patch', where 'patch' is usually omitted and defaults to zero. Earlier compatibility levels are 0, 1 and 2.
This also introduces main.cf and master.cf support for the <=level, <level, and other operators to compare compatibility levels. With the standard <=, <, etc. operators, compatibility level 3.10 would be less than 3.9, which is undesirable.
Major changes - services(5) override ------------------------------------
[Feature 20210418] Postfix no longer uses the services(5) database to look up the TCP ports for SMTP and LMTP services. Instead, this information is configured with the new known_tcp_ports configuration parameter (default: lmtp=24, smtp=25, smtps=submissions=465, submission=587). When a service is not specified in known_tcp_ports, Postfix will still query the services(5) database.
Major changes - local_login_sender_maps ---------------------------------------
[Feature 20201025] Fine-grained control over the envelope sender address for submission with the Postfix sendmail (or postdrop) commands.
The local_login_sender_maps parameter (default: static:*) specifies a list of lookup tables that are searched by the UNIX login name, and that return a list of allowed envelope sender patterns separated by space or comma. The default is backwards-compatible: every user may specify any sender envelope address.
This feature is enforced by the postdrop command. When no UNIX login name is available, the postdrop command will prepend "uid:" to the numerical UID and use that instead.
This feature ignores address extensions in the user-specified envelope sender address.
Besides the special pattern "*" which allows any sender address, there are "<>" which matches an empty sender address, and the "@domain" wildcard pattern. More information about those can be found in the postconf(5) manpage.
Example:
/etc/postfix/main.cf: # Allow root and postfix full control, anyone else can only # send mail as themselves. Use "uid:" followed by the numerical # UID when the UID has no entry in the UNIX password file. local_login_sender_maps = inline:{ { root = *}, { postfix = * } }, pcre:/etc/postfix/login_senders
/etc/postfix/login_senders: # Allow both the bare username and the user@domain forms. /(.+)/ $1 $1@example.com
Major changes - order of relay and recipient restrictions ---------------------------------------------------------
[Incompat 20210131] With smtpd_relay_before_recipient_restrictions=yes, the Postfix SMTP server will evaluate smtpd_relay_restrictions before smtpd_recipient_restrictions. This is the default behavior with compatibility_level >= 3.6.
This change makes the implemented behavior consistent with existing documentation. There is a backwards-compatibility warning that allows users to freeze historical behavior. See COMPATIBILITY_README for details.
Major changes - respectful logging ----------------------------------
[Feature 20210220] Postfix version 3.6 deprecates terminology that implies white is better than black. Instead, Postfix prefers 'allowlist', 'denylist', and variations on those words. This change affects Postfix documentation, and postscreen parameters and logging.
To keep the old postscreen logging set "respectful_logging = no" in main.cf.
Noel Jones assisted with the initial transition.
Changes in documentation ------------------------
Postfix documentation was updated to use 'allowlist', 'denylist', etc. These documentation changes do not affect Postfix behavior.
Changes in parameter names --------------------------
The following postscreen parameters replace names that contain 'blacklist' or 'whitelist':
postscreen_allowlist_interfaces postscreen_denylist_action postscreen_dnsbl_allowlist_threshold
These new parameters have backwards-compatible default settings that support the old parameter names, so that the name change should not affect Postfix behavior. This means that existing management tools that use the old parameter names should keep working as before.
This compatibility safety net may break when some management tools use the new parameter names, and some use the old names, such that different tools will disagree on how Postfix works.
Changes in logging ------------------
The following logging replaces forms that contain 'blacklist' or 'whitelist':
postfix/postscreen[pid]: ALLOWLIST VETO [address]:port postfix/postscreen[pid]: ALLOWLISTED [address]:port postfix/postscreen[pid]: DENYLISTED [address]:port
To avoid breaking logfile analysis tools, Postfix keeps logging the old forms by default, as long as the compatibility_level parameter setting is less than 3.6, and the respectful_logging parameter is not explicitly configured. As a reminder, Postfix will log the following:
postfix/postscreen[pid]: Using backwards-compatible default setting respectful_logging=no for client [address]:port
To keep logging the old form, make the setting "respectful_logging = no" permanent in main.cf, for example:
# postconf "respectful_logging = no" # postfix reload
To stop the reminder, configure the respectful_logging parameter to "yes" or "no", or configure "compatibility_level = 3.6".
Major changes - threaded bounces --------------------------------
[Feature 20201205] Support for threaded bounces. This allows mail readers to present a non-delivery, delayed delivery, or successful delivery notification in the same email thread as the original message.
Unfortunately, this also makes it easy for users to mistakenly delete the whole email thread (all related messages), instead of deleting only the delivery status notification.
To enable, specify "enable_threaded_bounces = yes".
Other changes - smtpd_sasl_mechanism_list -----------------------------------------
[Feature 20200906] The smtpd_sasl_mechanism_list parameter (default: !external, static:rest) prevents confusing errors when a SASL backend announces EXTERNAL support which Postfix does not support.
Other changes - delivery logging --------------------------------
[Incompat 20200531] Postfix delivery agents now log an explicit record when delegating delivery to a different Postfix delivery agent.
For example, with "best_mx_transport = local", an SMTP delivery agent will now log when a recipient will be delivered locally. This makes the delegating delivery agent visible, where it would otherwise have remained invisible, which would complicate troubleshooting.
postfix/smtp[pid]: queueid: passing <recipient> to transport=local
This will usually be followed by logging for an actual delivery:
postfix/local[pid]: queueid: to=<recipient>, relay=local, ...
Other examples: the local delivery agent will log a record that it defers mailbox delivery through mailbox_transport or through fallback_transport.
Other changes - error logging -----------------------------
[Incompat 20200531] Postfix programs will now log "Application error" instead of "Success" or "Unknown error: 0" when an operation fails with errno == 0, i.e., the error originates from non-kernel code.
Other changes - dns lookups ---------------------------
[Feature 20200509] The threadsafe resolver API (res_nxxx() calls) is now the default, not because the API is threadsafe, but because this is the API where new features are being added.
To build old style, build with:
make makefiles CCARGS="-DNO_RES_NCALLS..."
This is the default for systems that are known not to support the threadsafe resolver API.
show more ...
|
#
e262b48e |
| 14-Feb-2017 |
christos <christos@NetBSD.org> |
The stable Postfix release is called postfix-3.0.x where 3=major release number, 0=minor release number, x=patchlevel. The stable release never changes except for patches that address bugs or emerge
The stable Postfix release is called postfix-3.0.x where 3=major release number, 0=minor release number, x=patchlevel. The stable release never changes except for patches that address bugs or emergencies. Patches change the patchlevel and the release date.
New features are developed in snapshot releases. These are called postfix-3.1-yyyymmdd where yyyymmdd is the release date (yyyy=year, mm=month, dd=day). Patches are never issued for snapshot releases; instead, a new snapshot is released.
The mail_release_date configuration parameter (format: yyyymmdd) specifies the release date of a stable release or snapshot release.
If you upgrade from Postfix 2.10 or earlier, read RELEASE_NOTES-2.11 before proceeding.
Notes for distribution maintainers ----------------------------------
* New backwards-compatibility safety net.
With NEW Postfix installs, you MUST install a main.cf file with the setting "compatibility_level = 2". See conf/main.cf for an example.
With UPGRADES of existing Postfix systems, you MUST NOT change the main.cf compatibility_level setting, nor add this setting if it does not exist.
Several Postfix default settings have changed with Postfix 3.0. To avoid massive frustration with existing Postfix installations, Postfix 3.0 comes with a safety net that forces Postfix to keep running with backwards-compatible main.cf and master.cf default settings. This safety net depends on the main.cf compatibility_level setting (default: 0). Details are in COMPATIBILITY_README.
* New Postfix build system.
The Postfix build/install procedure has changed to support Postfix dynamically-linked libraries and database plugins. These must not be "shared" with non-Postfix programs, and therefore must not be installed in a public directory.
To avoid massive frustration due to broken patches, PLEASE BUILD POSTFIX FIRST WITHOUT APPLYING ANY PATCHES. Follow the INSTALL instructions (see "Building with Postfix dynamically-linked libraries and database plugins"), and see how things work and what the dynamically-linked libraries, database plugin, and configuration files look like. Then, go ahead and perform your platform-specific customizations. The INSTALL section "Tips for distribution maintainers" has further suggestions.
Major changes - critical ------------------------
[Incompat 20140714] After upgrading Postfix, "postfix reload" (or start/stop) is required. Several Postfix-internal protocols have been extended to support SMTPUTF8. Failure to reload or restart will result in mail staying queued, while Postfix daemons log warning messages about unexpected attributes.
Major changes - default settings --------------------------------
[Incompat 20141009] The default settings have changed for relay_domains (new: empty, old: $mydestination) and mynetworks_style (new: host, old: subnet). However the backwards-compatibility safety net will prevent these changes from taking effect, giving the system administrator the option to make an old default setting permanent in main.cf or to adopt the new default setting, before turning off backwards compatibility. See COMPATIBILITY_README for details.
[Incompat 20141001] A new backwards-compatibility safety net forces Postfix to run with backwards-compatible main.cf and master.cf default settings after an upgrade to a newer but incompatible Postfix version. See COMPATIBILITY_README for details.
While the backwards-compatible default settings are in effect, Postfix logs what services or what email would be affected by the incompatible change. Based on this the administrator can make some backwards-compatibility settings permanent in main.cf or master.cf, before turning off backwards compatibility.
See postconf.5.html#compatibility_level for details.
[Incompat 20141001] The default settings have changed for append_dot_mydomain (new: no. old: yes), master.cf chroot (new: n, old: y), and smtputf8 (new: yes, old: no).
Major changes - access control ------------------------------
[Feature 20141119] Support for BCC actions in header/body_checks and milter_header_checks. There is no limit on the number of BCC actions that may be specified, other than the implicit limit due to finite storage. BCC support will not be implemented in Postfix delivery agent header/body_checks.
It works in the same way as always_bcc and sender/recipient_bcc_maps: there can be only one address per action, recipients are added with the NOTIFY=NONE delivery status notification option, and duplicate recipients are ignored (with the same delivery status notification options).
[Incompat 20141009] The default settings have changed for relay_domains (new: empty, old: $mydestination) and mynetworks_style (new: host, old: subnet). However the backwards-compatibility safety net will prevent these changes from taking effect, giving the system administrator the option to make an old default setting permanent in main.cf or to adopt the new default setting, before turning off backwards compatibility. See COMPATIBILITY_README for details.
[Feature 20140618] New INFO action in access(5) tables, for consistency with header/body_checks.
[Feature 20140620] New check_xxx_a_access (for xxx in client, reverse_client, helo, sender, recipient) implements access control on all A and AAAA IP addresses for respectively the client hostname, helo parameter, sender domain or recipient domain. This complements the existing check_xxx_mx_access and check_xxx_ns_access features.
Major changes - address rewriting ---------------------------------
[Incompat 20141001] The default settings have changed for append_dot_mydomain (new: no. old: yes), master.cf chroot (new: n, old: y), and smtputf8 (new: yes, old: no).
Major changes - address verification ------------------------------------
[Feature 20141227] The new smtp_address_verify_target parameter (default: rcpt) specifies what protocol stage decides if a recipient is valid. Specify "data" for servers that reject invalid recipients in response to the DATA command.
Major changes - database support --------------------------------
[Feature 20140512] Support for Berkeley DB version 6.
[Feature 20140618] The "randmap" lookup table performs random selection. This may be used to implement load balancing, for example:
/etc/postfix/transport: # Deliver my own domain as usual. example.com : .example.com :
/etc/postfix/main.cf: transport_maps = # Deliver my own domain as usual. hash:/etc/postfix/transport # Deliver other domains via randomly-selected relayhosts randmap:{smtp:smtp0.example.com, smtp:smtp1.example.com}
A variant of this can randomly select SMTP clients with different smtp_bind_address settings.
To implement different weights, specify lookup results multiple times. For example, to choose smtp:smtp1.example.com twice as often as smtp:smtp0.example.com, specify smtp:smtp1.example.com twice.
A future version may support randmap:/path/to/file to load a list of results from file.
[Feature 20140618] As the name suggests, the "pipemap" table implements a pipeline of lookup tables. The name of the table specifies the pipeline as a sequence of tables. For example, the following prevents SMTP mail to system accounts that have "nologin" as their login shell:
/etc/postfix/main.cf: local_recipient_maps = pipemap:{unix:passwd.byname, pcre:/etc/postfix/no-nologin.pcre} alias_maps
/etc/postfix/no-nologin.pcre: !/nologin/ whatever
Each "pipemap:" query is given to the first table. Each table lookup result becomes the query for the next table in the pipeline, and the last table produces the final result. When any table lookup produces no result, the entire pipeline produces no result.
A future version may support pipemap:/path/to/file to load a list of lookup tables from file.
[Feature 20140924] Support for unionmap, with the same syntax as pipemap. This sends a query to all tables, and concatenates non-empty results, separated by comma.
[Feature 20131121] The "static" lookup table now supports whitespace when invoked as "static:{ text with whitespace }", so that it can be used, for example, at the end of smtpd_mumble_restrictions as "check_mumble_access static:{reject text...}".
[Feature 20141126] "inline:{key=value, { key = text with comma/space}}" avoids the need to create a database for just a few entries.
Major changes - delivery status notifications ---------------------------------------------
[Feature 20140321] Delivery status filter support, to replace the delivery status codes and explanatory text of successful or unsuccessful deliveries by Postfix mail delivery agents.
This was originally implemented for sites that want to turn certain soft delivery errors into hard delivery errors, but it can also be used to censor out information from delivery confirmation reports.
This feature is implemented as a filter that replaces the three-number enhanced status code and descriptive text in Postfix delivery agent success, bounce, or defer messages. Note: this will not override "soft_bounce=yes", and this will not change a successful delivery status into an unsuccessful status or vice versa.
The first example turns specific soft TLS errors into hard errors, by overriding the first number in the enhanced status code.
/etc/postfix/main.cf: smtp_delivery_status_filter = pcre:/etc/postfix/smtp_dsn_filter
/etc/postfix/smtp_dsn_filter: /^4(\.\d+\.\d+ TLS is required, but host \S+ refused to start TLS: .+)/ 5$1 /^4(\.\d+\.\d+ TLS is required, but was not offered by host .+)/ 5$1
The second example removes the destination command name and file name from local(8) successful delivery reports, so that they will not be reported when a sender requests confirmation of delivery.
/etc/postfix/main.cf: local_delivery_status_filter = pcre:/etc/postfix/local_dsn_filter
/etc/postfix/local_dsn_filter: /^(2\S+ delivered to file).+/ $1 /^(2\S+ delivered to command).+/ $1
This feature is supported in the lmtp(8), local(8), pipe(8), smtp(8) and virtual(8) delivery agents. That is, all delivery agents that actually deliver mail. It will not be implemented in the error and retry pseudo-delivery agents.
The new main.cf parameters and default values are:
default_delivery_status_filter = lmtp_delivery_status_filter = $default_delivery_status_filter local_delivery_status_filter = $default_delivery_status_filter pipe_delivery_status_filter = $default_delivery_status_filter smtp_delivery_status_filter = $default_delivery_status_filter virtual_delivery_status_filter = $default_delivery_status_filter
See the postconf(5) manpage for more details.
[Incompat 20140618] The pipe(8) delivery agent will now log a limited amount of command output upon successful delivery, and will report that output in "SUCCESS" delivery status reports. This is another good reason to disable inbound DSN requests at the Internet perimeter.
[Feature 20140907] With "confirm_delay_cleared = yes", Postfix informs the sender when delayed mail leaves the queue (this is in addition to the delay_warning_time feature that warns when mail is still queued). This feature is disabled by default, because it can result in a sudden burst of notifications when the queue drains at the end of a prolonged network outage.
Major changes - dns -------------------
[Feature 20141128] Support for DNS server reply filters in the Postfix SMTP/LMTP client and SMTP server. This helps to work around mail delivery problems with sites that have incorrect DNS information. Note: this has no effect on the implicit DNS lookups that are made by nsswitch.conf or equivalent mechanisms.
This feature renders each lookup result as one line of text in standard zone-file format as shown below. The class field is always "IN", the preference field exists only for MX records, the names of hosts, domains, etc. end in ".", and those names are in ASCII form (xn--mumble form for internationalized domain names).
name ttl class type preference value --------------------------------------------------------- postfix.org. 86400 IN MX 10 mail.cloud9.net.
Typically, one would match this text with a regexp: or pcre: table. When a match is found, the table lookup result specifies an action. By default, the table query and the action name are case-insensitive. Currently, only the IGNORE action is implemented.
For safety reasons, Postfix logs a warning or defers mail delivery when a DNS reply filter removes all lookup results from a successful query.
The Postfix SMTP/LMTP client uses the smtp_dns_reply_filter and lmtp_dns_reply_filter features only for Postfix SMTP client lookups of MX, A, and AAAAA records to locate a remote SMTP or LMTP server, including lookups that implement the features reject_unverified_sender and reject_unverified_recipient. The filters are not used for lookups made through nsswitch.conf and similar mechanisms.
The Postfix SMTP server uses the smtpd_dns_reply_filter feature only for Postfix SMTP server lookups of MX, A, AAAAA, and TXT records to implement the features reject_unknown_helo_hostname, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_rbl_*, and reject_rhsbl_*. The filter is not used for lookups made through nsswitch.conf and similar mechanisms, such as lookups of the remote SMTP client name.
[Feature 20141126] Nullmx support (MX records with a null hostname). This change affects error messages only. The Postfix SMTP client already bounced mail for such domains, and the Postfix SMTP server already rejected such domains with reject_unknown_sender/recipient_domain. This feature introduces a new SMTP server configuration parameter nullmx_reject_code (default: 556).
Major changes - dynamic linking -------------------------------
[Feature 20140530] Support to build Postfix with Postfix dynamically-linked libraries, and with dynamically-loadable database clients. These MUST NOT be used by non-Postfix programs. Postfix dynamically-linked libraries introduce minor runtime overhead and result in smaller Postfix executable files. Dynamically-loadable database clients are useful when you distribute or install pre-compiled packages. Postfix 3.0 supports dynamic loading for CDB, LDAP, LMDB, MYSQL, PCRE, PGSQL, SDBM, and SQLITE database clients.
This implementation is based on Debian code by LaMont Jones, initially ported by Viktor Dukhovni. Currently, support exists for recent versions of Linux, FreeBSD, MacOS X, and for the ancient Solaris 9.
To support Postfix dynamically-linked libraries and dynamically-loadable database clients, the Postfix build procedure had to be changed (specifically, the files makedefs and Makefile.in, and the files postfix-install and post-install that install or update Postfix).
[Incompat 20140530] The Postfix 3.0 build procedure expects that you specify database library dependencies with variables named AUXLIBS_CDB, AUXLIBS_LDAP, etc. With Postfix 3.0 and later, the old AUXLIBS variable still supports building a statically-loaded CDB etc. database client, but only the new AUXLIBS_CDB etc. variables support building a dynamically-loaded or statically-loaded CDB etc. database client. See CDB_README, LDAP_README, etc. for details.
Failure to follow this advice will defeat the purpose of dynamic database client loading. Every Postfix executable file will have database library dependencies. And that was exactly what dynamic database client loading was meant to avoid.
Major changes - future proofing -------------------------------
[Cleanup 20141224] The changes described here have no visible effect on Postfix behavior, but they make Postfix code easier to maintain, and therefore make new functionality easier to add.
* Compile-time argument typechecks of non-printf/scanf-like variadic function argument lists.
* Deprecating the use of "char *" for non-text purposes such as memory allocation and pointers to application context for call-back functions. This dates from long-past days before void * became universally available.
* Replace integer types for counters and sizes with size_t or ssize_t equivalents. This eliminates some wasteful 64<->32bit conversions on 64-bit systems.
Major changes - installation pathnames --------------------------------------
[Incompat 20140625] For compliance with file system policies, some non-executable files have been moved from $daemon_directory to the directory specified with the new meta_directory configuration parameter which has the same default value as the config_directory parameter. This change affects non-executable files that are shared between multiple Postfix instances such as postfix-files, dynamicmaps.cf, and multi-instance template files.
For backwards compatibility with Postfix 2.6 .. 2.11, specify "meta_directory = $daemon_directory" in main.cf before installing or upgrading Postfix, or specify "meta_directory = /path/name" on the "make makefiles", "make install" or "make upgrade" command line.
Major changes - milter ----------------------
[Feature 20140928] Support for per-Milter settings that override main.cf parameters. For details see the section "Advanced policy client configuration" in the SMTPD_POLICY_README document.
Here is an example that uses both old and new syntax:
smtpd_milters = { inet:127.0.0.1:port1, default_action=accept, ... }, inet:127.0.0.1:port2, ...
The supported attribute names are: command_timeout, connect_timeout, content_timeout, default_action, and protocol. These have the same names as the corresponding main.cf parameters, without the "milter_" prefix.
The per-milter settings are specified as attribute=value pairs separated by comma or space; specify { name = value } to allow spaces around the "=" or within an attribute value.
[Feature 20141018] DMARC compatibility: when a Milter inserts a header ABOVE Postfix's own Received: header, Postfix no longer exposes its own Received: header to Milters (violating protocol) and Postfix no longer hides the Milter-inserted header from Milters (wtf).
Major changes - parameter syntax --------------------------------
[Feature 20140921] In preparation for configurable mail headers and logging, new main.cf support for if-then-else expressions:
${name?{text1}:{text2}}
and for logical expressions:
${{text1}=={text2}?{text3}:{text4}} ${{text1}!={text2}?{text3}:{text4}}
Whitespace before and after {text} is ignored. This can help to make complex expressions more readable. See the postconf(5) manpage for further details.
[Feature 20140928] Support for whitespace in daemon command-line arguments. For details, see the "Command name + arguments" section in the master(5) manpage. Example:
smtpd -o { parameter = value containing whitespace } ...
The { ... } form is also available for non-option command-line arguments in master.cf, for example:
pipe ... argv=command { argument containing whitespace } ...
In both cases, whitespace immediately after "{" and before "}" is ignored.
[Feature 20141005] Postfix import_environment and export_environment now allow "{ name=value }" to protect whitespace in attribute values.
[Feature 20141006] The new message_drop_header parameter replaces a hard-coded table that specifies what message headers the cleanup daemon will remove. The list of supported header names covers RFC 5321, 5322, MIME RFCs, and some historical names.
Major changes - pipe daemon ---------------------------
[Incompat 20140618] The pipe(8) delivery agent will now log a limited amount of command output upon successful delivery, and will report that output in "SUCCESS" delivery status reports. This is another good reason to disable inbound DSN requests at the Internet perimeter.
Major changes - policy client -----------------------------
[Feature 20140703] This release introduces three new configuration parameters that control error recovery for failed SMTPD policy requests.
* smtpd_policy_service_default_action (default: 451 4.3.5 Server configuration problem): The default action when an SMTPD policy service request fails.
* smtpd_policy_service_try_limit (default: 2): The maximal number of attempts to send an SMTPD policy service request before giving up. This must be a number greater than zero.
* smtpd_policy_service_retry_delay (default: 1s): The delay between attempts to resend a failed SMTPD policy service request. This must be a number greater than zero.
See postconf(5) for details and limitations.
[Feature 20140928] Support for per-policy service settings that override main.cf parameters. For details see the section "Different settings for different Milter applications" in the MILTER_README document.
Here is an example that uses both old and new syntax:
smtpd_recipient_restrictions = ... check_policy_service { inet:127.0.0.1:port3, default_action=DUNNO } check_policy_service inet:127.0.0.1:port4 ...
The per-policy service settings are specified as attribute=value pairs separated by comma or space; specify { name = value } to allow spaces around the "=" or within an attribute value.
The supported attribute names are: default_action, max_idle, max_ttl, request_limit, retry_delay, timeout, try_limit. These have the same names as the corresponding main.cf parameters, without the "smtpd_policy_service_" prefix.
[Feature 20140505] A client port attribute was added to the policy delegation protocol.
[Feature 20140630] New smtpd_policy_service_request_limit feature to limit the number of requests per Postfix SMTP server policy connection. This is a workaround to avoid error-recovery delays with policy servers that cannot maintain a persistent connection.
Major changes - position-independent executables ------------------------------------------------
[Feature 20150205] Preliminary support for building position-independent executables (PIE), tested on Fedora Core 20, Ubuntu 14.04, FreeBSD 9 and 10, and NetBSD 6. Specify:
$ make makefiles pie=yes ...other arguments...
On some systems, PIE is used by the ASLR exploit mitigation technique (ASLR = Address-Space Layout Randomization). Whether specifying "pie=yes" has any effect at all depends on the compiler. Reportedly, some compilers always produce PIE executables.
Major changes - postscreen --------------------------
[Feature 20140501] Configurable time limit (postscreen_dnsbl_timeout) for DNSBL or DNSWL lookups. This is separate from the timeouts in the dnsblog(8) daemon which are controlled by system resolver(3) routines.
Major changes - session fingerprint -----------------------------------
[Feature 20140801] The Postfix SMTP server now logs at the end of a session how many times an SMTP command was successfully invoked, followed by the total number of invocations if some invocations were unsuccessful.
This logging will enough to diagnose many problems without using verbose logging or network sniffer.
Normal session, no TLS: disconnect from name[addr] ehlo=1 mail=1 rcpt=1 data=1 quit=1
Normal session. with TLS: disconnect from name[addr] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1
All recipients rejected, no ESMTP command pipelining: disconnect from name[addr] ehlo=1 mail=1 rcpt=0/1 quit=1
All recipients rejected, with ESMTP command pipelining: disconnect from name[addr] ehlo=1 mail=1 rcpt=0/1 data=0/1 rset=1 quit=1
Password guessing bot, hangs up without QUIT: disconnect from name[addr] ehlo=1 auth=0/1
Mis-configured client trying to use TLS wrappermode on port 587: disconnect from name[addr] unknown=0/1
Logfile analyzers can trigger on the presence of "/". It indicates that Postfix rejected at least one command.
[Feature 20150118] As a late addition, the SMTP server now also logs the total number of commands (as "commands=x/y") even when the client did not send any commands. This helps logfile analyzers to recognize sessions without commands.
Major changes - smtp client ---------------------------
[Feature 20141227] The new smtp_address_verify_target parameter (default: rcpt) determines what protocol stage decides if a recipient is valid. Specify "data" for servers that reject recipients after the DATA command.
Major changes - smtputf8 ------------------------
[Incompat 20141001] The default settings have changed for append_dot_mydomain (new: no, old: yes), master.cf chroot (new: n, old: y), and smtputf8 (new: yes, old: no).
[Incompat 20140714] After upgrading Postfix, "postfix reload" (or start/stop) is required. Several Postfix-internal protocols have been extended to support SMTPUTF8. Failure to reload or restart will result in mail staying queued, while Postfix daemons log warning messages about unexpected attributes.
[Feature 20140715] Support for Email Address Internationalization (EAI) as defined in RFC 6531..6533. This supports UTF-8 in SMTP/LMTP sender addresses, recipient addresses, and message header values. The implementation is based on initial work by Arnt Gulbrandsen that was funded by CNNIC.
See SMTPUTF8_README for a description of Postfix SMTPUTF8 support.
[Feature 20150112] UTF-8 Casefolding support for Postfix lookup tables and matchlists (mydestination, relay_domains, etc.). This is enabled only with "smtpuf8 = yes".
[Feature 20150112] With smtputf8_enable=yes, SMTP commands with UTF-8 syntax errors are rejected, table lookup results with invalid UTF-8 syntax are handled as configuration errors, and UTF-8 syntax errors in policy server replies result in execution of the policy server's default action.
Major changes - tls support ---------------------------
(see "Major changes - delivery status notifications" above for turning 4XX soft errors into 5XX bounces when a remote SMTP server does not offer STARTTLS support).
[Feature 20140209] the Postfix SMTP client now also falls back to plaintext when TLS fails AFTER the TLS protocol handshake.
[Feature 20140218] The Postfix SMTP client now requires that a queue file is older than $minimal_backoff_time, before falling back from failed TLS to plaintext (both during or after the TLS handshake).
[Feature 20141021] Per IETF TLS WG consensus, the tls_session_ticket_cipher default setting was changed from aes-128-cbc to aes-256-cbc.
[Feature 20150116] TLS wrappermode support in the Postfix smtp(8) client (new smtp_tls_wrappermode parameter) and in posttls-finger(1) (new -w option). There still is life in that deprecated protocol, and people should not have to jump hoops with stunnel.
show more ...
|