2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-30 05:38:06 +00:00

postfix-3.9.2

This commit is contained in:
Wietse Z Venema 2025-02-16 00:00:00 -05:00 committed by Viktor Dukhovni
parent 8d30e3b376
commit 4b0368d35e
22 changed files with 383 additions and 71 deletions

View File

@ -28023,3 +28023,78 @@ Apologies for any names omitted.
by Postfix (for example, a From: header with UTF8 full name
information from the password file). Reported by Michael
Tokarev. File: src/cleanup/cleanup_message.c.
20241205
Portability: include <sys_socket.h> for a SUNOS5 workaround.
Gary R. Schmidt. File: util/peekfd.c.
20241230
Bugfix (defect introduced: Postfix 3.3, date 20180107) small
memory leak in the cleanup daemon when generating a "From:
full-name <addr-spec>" message header. The impact is limited
because the number of requests is bounded by the "max_use"
configuration parameter. Found during code maintenance.
File: cleanup/cleanup_message.c.
20250111
Forward compatibility: ignore new queue file flag bits that may
be used with Postfix 3.10 and later. This is a safety in case
a Postfix 3.10 upgrade needs to be rolled back, after the new
TLS-Required feature has been used. Files: global/smtputf8.h,
*qmgr/qmgr_message.c.
20250115
Bugfix (defect introduced: Postfix 3.0): the bounce daemon
mangled a non-ASCII address localpart in the "X-Postfix-Sender:"
field of a delivery status notification. It backslash-escaped
each byte in a multi-byte character. This behavior was
implemented in Postfix 2.1 (no support for UTF8 local-parts),
but it became incorrect after SMTPUTF8 support was implemented
in Postfix 3.0. File: bounce/bounce_notify_util.c.
20250207
Performance: when a mysql: or pgsql: configuration specifies
a single host, assume that it is a load balancer and reconnect
immediately after a single failure, instead of failing all
requests for 60s. Files: global/dict_pgsql.c, global/dict_mysql.c.
20250210
Bugfix (defect introduced: Postfix 3.6): Reverted the default
smtp_tls_dane_insecure_mx_policy setting to "dane" as of Postfix
3.6.17, 3.7.13, 3.8.8, 3.9.2, and 3.10.0. By mistake the default
was dependent on the smtp_tls_security_level setting. Files:
global/mail_params.h, proto/postconf.proto, smtp/smtp.c.
20250212
Support for OpenSSL 3.5 post-quantum cryptography. To manage
algorithm selection, OpenSSL introduces new TLS group syntax
that Postfix will not attempt to imitate. Instead, Postfix
now allows the tls_eecdh_auto_curves and tls_ffdhe_auto_groups
parameter values to have an empty value. When both are set
empty, the algorithm selection can be managed through OpenSSL
configuration. Viktor Dukhovni. Files: tls/tls_dh.c,
tls/tls_misc.c.
Bugfix (defect introduced: Postfix 3.4, date 20181113): a
server with multiple TLS certificates could report, for a
resumed TLS session, the wrong server-signature and
server-digest names in logging and Received: message headers.
Viktor Dukhovni. File: tls/tls_misc.c.
20250213
Documentation: updated postconf(5) that the parameters
smtpd_tls_eecdh_grade, tls_eecdh_strong_curve,
tls_eecdh_ultra_curve, and tlsproxy_tls_eecdh_grade, are
not used since Postfix 3.6; updated the tls_eecdh_auto_curves
and tls_ffdhe_auto_groups description with post-quantum
configuration; added a post-quantum example to the
tls_config_file description. File: proto/postconf.proto.
The unused parameters will be deleted in Postfix 3.11.

View File

@ -694,7 +694,7 @@ SMTP,(LMTP) SMTP,(LMTP)
Available in Postfix version 3.1 and later:
<b><a href="postconf.5.html#smtp_tls_dane_insecure_mx_policy">smtp_tls_dane_insecure_mx_policy</a> (see 'postconf -d' output)</b>
<b><a href="postconf.5.html#smtp_tls_dane_insecure_mx_policy">smtp_tls_dane_insecure_mx_policy</a> (dane)</b>
The TLS policy for MX hosts with "secure" TLSA records when the
nexthop destination security level is <b>dane</b>, but the MX record
was found via an "insecure" MX lookup.

View File

@ -13130,7 +13130,7 @@ TLS connection reuse</a>" for background details. </p>
</DD>
<DT><b><a name="smtp_tls_dane_insecure_mx_policy">smtp_tls_dane_insecure_mx_policy</a>
(default: see "postconf -d" output)</b></DT><DD>
(default: dane)</b></DT><DD>
<p> The TLS policy for MX hosts with "secure" TLSA records when the
nexthop destination security level is <b>dane</b>, but the MX
@ -13154,10 +13154,9 @@ authentication succeeds, it will be logged only as "Trusted", not
"Verified", because the MX host name could have been forged. </dd>
</dl>
<p> The default setting for Postfix &ge; 3.6 is "dane" with
"<a href="postconf.5.html#smtp_tls_security_level">smtp_tls_security_level</a> = dane", otherwise "may". This behavior
was backported to Postfix versions 3.5.9, 3.4.19, 3.3.16. 3.2.21.
With earlier Postfix versions the default setting was always "dane".
<p> The default setting is "dane" as of Postfix versions 3.6.17,
3.7.13, 3.8.8, 3.9.2, and 3.10.0. With earlier versions the default
was mistakenly dependent on the <a href="postconf.5.html#smtp_tls_security_level">smtp_tls_security_level</a> setting.
</p>
<p> Though with "insecure" MX records an active attacker can
@ -18609,6 +18608,8 @@ this parameter is always ignored, and Postfix behaves as though the
<b>auto</b> value (described below) was chosen.
</p>
<p> This feature is not used as of Postfix 3.6. Do not specify. </p>
<p> The available choices are: </p>
<dl>
@ -19808,6 +19809,45 @@ MinProtocol = TLSv1
</pre>
</blockquote>
<p> Example: Custom OpenSSL group settings. </p>
<pre>
<a href="postconf.5.html">main.cf</a>:
<a href="postconf.5.html#tls_config_file">tls_config_file</a> = ${<a href="postconf.5.html#config_directory">config_directory</a>}/openssl.cnf
<a href="postconf.5.html#tls_config_name">tls_config_name</a> = postfix
</pre>
<pre>
openssl.cnf:
postfix = postfix_settings
</pre>
<pre>
[postfix_settings]
ssl_conf = postfix_ssl_settings
</pre>
<pre>
[postfix_ssl_settings]
system_default = baseline_postfix_settings
</pre>
<pre>
[baseline_postfix_settings]
# New OpenSSL 3.5 syntax, for older releases consider
# the Postfix default:
#
# Groups = X25519:X448:prime256v1:secp384r1:secp521r1:ffdhe2048:ffdhe3072
#
Groups = *X25519MLKEM768 / *X25519:X448 / P-256:P-384
</pre>
<p> Caution: It is typically best to just use the default OpenSSL
group settings, by setting "<a href="postconf.5.html#tls_config_file">tls_config_file</a> = none". Overly strict
system-wide TLS settings will conflict with Postfix's opportunistic
TLS, where being less restrictive is better than downgrading to
cleartext SMTP. </p>
<p> This feature is available in Postfix &ge; 3.9, 3.8.1, 3.7.6,
3.6.10, and 3.5.20. </p>
@ -19999,8 +20039,7 @@ be using 0.9.6! </dd>
(default: see "postconf -d" output)</b></DT><DD>
<p> The prioritized list of elliptic curves supported by the Postfix
SMTP client and server. These curves are used by the Postfix SMTP
server when "<a href="postconf.5.html#smtpd_tls_eecdh_grade">smtpd_tls_eecdh_grade</a> = auto". The selected curves must be
SMTP client and server. The selected curves must be
implemented by OpenSSL and be standardized for use in TLS (<a href="https://tools.ietf.org/html/rfc8422">RFC 8422</a>).
It is unwise to list only "bleeding-edge" curves supported by a small
subset of clients. The default list is suitable for most users. </p>
@ -20019,6 +20058,14 @@ customizing the list of FFDHE groups enabled with TLS 1.3. That setting
is introduced with Postfix 3.8, when built against OpenSSL 3.0 or later.
</p>
<p> Post-quantum cryptography support: OpenSSL 3.5 introduces new
configuration syntax that Postfix will not attempt to imitate.
Instead, with Postfix 3.6.17, 3.7.13, 3.8.8, 3.9.2, and later, set
both <a href="postconf.5.html#tls_eecdh_auto_curves">tls_eecdh_auto_curves</a> and if available <a href="postconf.5.html#tls_ffdhe_auto_groups">tls_ffdhe_auto_groups</a>
to the empty value, to enable algorithm selection through OpenSSL
configuration. See <a href="postconf.5.html#tls_config_file">tls_config_file</a> for a configuration example.
</p>
<p> This feature is available in Postfix 3.2 and later, when it is
compiled and linked with OpenSSL 1.0.2 or later on platforms where
EC algorithms have not been disabled by the vendor. </p>
@ -20042,6 +20089,8 @@ must support this curve for EECDH key exchange to take place. It
is unwise to choose only "bleeding-edge" curves supported by only a
small subset of clients. </p>
<p> This feature is not used as of Postfix 3.6. Do not specify. </p>
<p> The default "strong" curve is rated in NSA <a
href="https://web.archive.org/web/20160330034144/https://www.nsa.gov/ia/programs/suiteb_cryptography/">Suite
B</a> for information classified up to SECRET. </p>
@ -20086,6 +20135,8 @@ client implementations must support this curve for EECDH key exchange
to take place. It is unwise to choose only "bleeding-edge" curves
supported by only a small subset of clients. </p>
<p> This feature is not used as of Postfix 3.6. Do not specify. </p>
<p> This default "ultra" curve is rated in NSA <a
href="https://web.archive.org/web/20160330034144/https://www.nsa.gov/ia/programs/suiteb_cryptography/">Suite
B</a> for information classified up to TOP SECRET. </p>
@ -20162,10 +20213,15 @@ on whether any of the "kDHE" ciphers are included in the cipherlist.
</p>
<p> Conversely, setting "<a href="postconf.5.html#tls_eecdh_auto_curves">tls_eecdh_auto_curves</a>" empty disables TLS 1.3
EC key agreement in OpenSSL 3.0 and later. Note that at least one of
"<a href="postconf.5.html#tls_eecdh_auto_curves">tls_eecdh_auto_curves</a>" and "<a href="postconf.5.html#tls_ffdhe_auto_groups">tls_ffdhe_auto_groups</a>" must be non-empty,
this is required by OpenSSL 3.0. If both are inadvertently set empty,
Postfix will fall back to the compiled-in defaults. </p>
EC key agreement in OpenSSL 3.0 and later. If both are set empty,
Postfix will fall back to OpenSSL preferences as described next. </p>
<p> Post-quantum cryptography support: OpenSSL 3.5 introduces new
configuration syntax that Postfix will not attempt to imitate.
Instead, with Postfix 3.6.17, 3.7.13, 3.8.8, 3.9.2, and later, set
both <a href="postconf.5.html#tls_eecdh_auto_curves">tls_eecdh_auto_curves</a> and <a href="postconf.5.html#tls_ffdhe_auto_groups">tls_ffdhe_auto_groups</a> to the empty
value, to enable algorithm selection through OpenSSL configuration.
See <a href="postconf.5.html#tls_config_file">tls_config_file</a> for a configuration example. </p>
<p> All the default groups and EC curves should sufficiently strong
to make "pruning" the defaults unwise. At a minimum, "X25519" and
@ -21103,7 +21159,7 @@ the "<a href="postconf.5.html#tlsproxy_tls_chain_files">tlsproxy_tls_chain_files
elliptic-curve Diffie-Hellman (EECDH) key exchange. See
<a href="postconf.5.html#smtpd_tls_eecdh_grade">smtpd_tls_eecdh_grade</a> for further details. </p>
<p> This feature is deprecated as of Postfix 3.9. Do not specify. </p>
<p> This feature is not used as of Postfix 3.6. Do not specify. </p>
<p> This feature is available in Postfix 2.8 and later. </p>

View File

@ -694,7 +694,7 @@ SMTP,(LMTP) SMTP,(LMTP)
Available in Postfix version 3.1 and later:
<b><a href="postconf.5.html#smtp_tls_dane_insecure_mx_policy">smtp_tls_dane_insecure_mx_policy</a> (see 'postconf -d' output)</b>
<b><a href="postconf.5.html#smtp_tls_dane_insecure_mx_policy">smtp_tls_dane_insecure_mx_policy</a> (dane)</b>
The TLS policy for MX hosts with "secure" TLSA records when the
nexthop destination security level is <b>dane</b>, but the MX record
was found via an "insecure" MX lookup.

View File

@ -8589,7 +8589,7 @@ See "Client\-side
TLS connection reuse" for background details.
.PP
This feature is available in Postfix 3.4 and later.
.SH smtp_tls_dane_insecure_mx_policy (default: see "postconf \-d" output)
.SH smtp_tls_dane_insecure_mx_policy (default: dane)
The TLS policy for MX hosts with "secure" TLSA records when the
nexthop destination security level is \fBdane\fR, but the MX
record was found via an "insecure" MX lookup. The choices are:
@ -8610,10 +8610,9 @@ authentication succeeds, it will be logged only as "Trusted", not
"Verified", because the MX host name could have been forged.
.br
.br
The default setting for Postfix >= 3.6 is "dane" with
"smtp_tls_security_level = dane", otherwise "may". This behavior
was backported to Postfix versions 3.5.9, 3.4.19, 3.3.16. 3.2.21.
With earlier Postfix versions the default setting was always "dane".
The default setting is "dane" as of Postfix versions 3.6.17,
3.7.13, 3.8.8, 3.9.2, and 3.10.0. With earlier versions the default
was mistakenly dependent on the smtp_tls_security_level setting.
.PP
Though with "insecure" MX records an active attacker can
compromise SMTP transport security by returning forged MX records,
@ -13164,6 +13163,8 @@ Diffie\-Hellman (EECDH) key exchange. As of Postfix 3.6, the value of
this parameter is always ignored, and Postfix behaves as though the
\fBauto\fR value (described below) was chosen.
.PP
This feature is not used as of Postfix 3.6. Do not specify.
.PP
The available choices are:
.IP "\fBauto\fR"
Use the most preferred curve that is
@ -14167,6 +14168,65 @@ MinProtocol = TLSv1
.ft R
.in -4
.PP
Example: Custom OpenSSL group settings.
.PP
.nf
.na
.ft C
main.cf:
tls_config_file = ${config_directory}/openssl.cnf
tls_config_name = postfix
.fi
.ad
.ft R
.PP
.nf
.na
.ft C
openssl.cnf:
postfix = postfix_settings
.fi
.ad
.ft R
.PP
.nf
.na
.ft C
[postfix_settings]
ssl_conf = postfix_ssl_settings
.fi
.ad
.ft R
.PP
.nf
.na
.ft C
[postfix_ssl_settings]
system_default = baseline_postfix_settings
.fi
.ad
.ft R
.PP
.nf
.na
.ft C
[baseline_postfix_settings]
# New OpenSSL 3.5 syntax, for older releases consider
# the Postfix default:
#
# Groups = X25519:X448:prime256v1:secp384r1:secp521r1:ffdhe2048:ffdhe3072
#
Groups = *X25519MLKEM768 / *X25519:X448 / P\-256:P\-384
.fi
.ad
.ft R
.PP
Caution: It is typically best to just use the default OpenSSL
group settings, by setting "tls_config_file = none". Overly strict
system\-wide TLS settings will conflict with Postfix's opportunistic
TLS, where being less restrictive is better than downgrading to
cleartext SMTP.
.PP
This feature is available in Postfix >= 3.9, 3.8.1, 3.7.6,
3.6.10, and 3.5.20.
.SH tls_config_name (default: empty)
@ -14327,8 +14387,7 @@ Postfix >= 3.4. See \fBSSL_CTX_set_options\fR(3).
This feature is available in Postfix 2.8 and later.
.SH tls_eecdh_auto_curves (default: see "postconf \-d" output)
The prioritized list of elliptic curves supported by the Postfix
SMTP client and server. These curves are used by the Postfix SMTP
server when "smtpd_tls_eecdh_grade = auto". The selected curves must be
SMTP client and server. The selected curves must be
implemented by OpenSSL and be standardized for use in TLS (RFC 8422).
It is unwise to list only "bleeding\-edge" curves supported by a small
subset of clients. The default list is suitable for most users.
@ -14346,6 +14405,13 @@ See also the "tls_ffdhe_auto_groups" parameter, which supports
customizing the list of FFDHE groups enabled with TLS 1.3. That setting
is introduced with Postfix 3.8, when built against OpenSSL 3.0 or later.
.PP
Post\-quantum cryptography support: OpenSSL 3.5 introduces new
configuration syntax that Postfix will not attempt to imitate.
Instead, with Postfix 3.6.17, 3.7.13, 3.8.8, 3.9.2, and later, set
both tls_eecdh_auto_curves and if available tls_ffdhe_auto_groups
to the empty value, to enable algorithm selection through OpenSSL
configuration. See tls_config_file for a configuration example.
.PP
This feature is available in Postfix 3.2 and later, when it is
compiled and linked with OpenSSL 1.0.2 or later on platforms where
EC algorithms have not been disabled by the vendor.
@ -14363,6 +14429,8 @@ must support this curve for EECDH key exchange to take place. It
is unwise to choose only "bleeding\-edge" curves supported by only a
small subset of clients.
.PP
This feature is not used as of Postfix 3.6. Do not specify.
.PP
The default "strong" curve is rated in NSA Suite
B for information classified up to SECRET.
.PP
@ -14398,6 +14466,8 @@ client implementations must support this curve for EECDH key exchange
to take place. It is unwise to choose only "bleeding\-edge" curves
supported by only a small subset of clients.
.PP
This feature is not used as of Postfix 3.6. Do not specify.
.PP
This default "ultra" curve is rated in NSA Suite
B for information classified up to TOP SECRET.
.PP
@ -14452,10 +14522,15 @@ Whether FFDHE key agreement is enabled in TLS 1.2 and earlier depends
on whether any of the "kDHE" ciphers are included in the cipherlist.
.PP
Conversely, setting "tls_eecdh_auto_curves" empty disables TLS 1.3
EC key agreement in OpenSSL 3.0 and later. Note that at least one of
"tls_eecdh_auto_curves" and "tls_ffdhe_auto_groups" must be non\-empty,
this is required by OpenSSL 3.0. If both are inadvertently set empty,
Postfix will fall back to the compiled\-in defaults.
EC key agreement in OpenSSL 3.0 and later. If both are set empty,
Postfix will fall back to OpenSSL preferences as described next.
.PP
Post\-quantum cryptography support: OpenSSL 3.5 introduces new
configuration syntax that Postfix will not attempt to imitate.
Instead, with Postfix 3.6.17, 3.7.13, 3.8.8, 3.9.2, and later, set
both tls_eecdh_auto_curves and tls_ffdhe_auto_groups to the empty
value, to enable algorithm selection through OpenSSL configuration.
See tls_config_file for a configuration example.
.PP
All the default groups and EC curves should sufficiently strong
to make "pruning" the defaults unwise. At a minimum, "X25519" and
@ -15088,7 +15163,7 @@ The Postfix \fBtlsproxy\fR(8) server security grade for ephemeral
elliptic\-curve Diffie\-Hellman (EECDH) key exchange. See
smtpd_tls_eecdh_grade for further details.
.PP
This feature is deprecated as of Postfix 3.9. Do not specify.
This feature is not used as of Postfix 3.6. Do not specify.
.PP
This feature is available in Postfix 2.8 and later.
.SH tlsproxy_tls_enable_rpk (default: $smtpd_tls_enable_rpk)

View File

@ -630,7 +630,7 @@ Request that the Postfix SMTP client connects using the
SUBMISSIONS/SMTPS protocol instead of using the STARTTLS command.
.PP
Available in Postfix version 3.1 and later:
.IP "\fBsmtp_tls_dane_insecure_mx_policy (see 'postconf -d' output)\fR"
.IP "\fBsmtp_tls_dane_insecure_mx_policy (dane)\fR"
The TLS policy for MX hosts with "secure" TLSA records when the
nexthop destination security level is \fBdane\fR, but the MX
record was found via an "insecure" MX lookup.

View File

@ -13262,8 +13262,7 @@ parameter. See there for details. </p>
%PARAM tls_eecdh_auto_curves see "postconf -d" output
<p> The prioritized list of elliptic curves supported by the Postfix
SMTP client and server. These curves are used by the Postfix SMTP
server when "smtpd_tls_eecdh_grade = auto". The selected curves must be
SMTP client and server. The selected curves must be
implemented by OpenSSL and be standardized for use in TLS (RFC 8422).
It is unwise to list only "bleeding-edge" curves supported by a small
subset of clients. The default list is suitable for most users. </p>
@ -13282,6 +13281,14 @@ customizing the list of FFDHE groups enabled with TLS 1.3. That setting
is introduced with Postfix 3.8, when built against OpenSSL 3.0 or later.
</p>
<p> Post-quantum cryptography support: OpenSSL 3.5 introduces new
configuration syntax that Postfix will not attempt to imitate.
Instead, with Postfix 3.6.17, 3.7.13, 3.8.8, 3.9.2, and later, set
both tls_eecdh_auto_curves and if available tls_ffdhe_auto_groups
to the empty value, to enable algorithm selection through OpenSSL
configuration. See tls_config_file for a configuration example.
</p>
<p> This feature is available in Postfix 3.2 and later, when it is
compiled and linked with OpenSSL 1.0.2 or later on platforms where
EC algorithms have not been disabled by the vendor. </p>
@ -13312,10 +13319,15 @@ on whether any of the "kDHE" ciphers are included in the cipherlist.
</p>
<p> Conversely, setting "tls_eecdh_auto_curves" empty disables TLS 1.3
EC key agreement in OpenSSL 3.0 and later. Note that at least one of
"tls_eecdh_auto_curves" and "tls_ffdhe_auto_groups" must be non-empty,
this is required by OpenSSL 3.0. If both are inadvertently set empty,
Postfix will fall back to the compiled-in defaults. </p>
EC key agreement in OpenSSL 3.0 and later. If both are set empty,
Postfix will fall back to OpenSSL preferences as described next. </p>
<p> Post-quantum cryptography support: OpenSSL 3.5 introduces new
configuration syntax that Postfix will not attempt to imitate.
Instead, with Postfix 3.6.17, 3.7.13, 3.8.8, 3.9.2, and later, set
both tls_eecdh_auto_curves and tls_ffdhe_auto_groups to the empty
value, to enable algorithm selection through OpenSSL configuration.
See tls_config_file for a configuration example. </p>
<p> All the default groups and EC curves should sufficiently strong
to make "pruning" the defaults unwise. At a minimum, "X25519" and
@ -13340,6 +13352,8 @@ must support this curve for EECDH key exchange to take place. It
is unwise to choose only "bleeding-edge" curves supported by only a
small subset of clients. </p>
<p> This feature is not used as of Postfix 3.6. Do not specify. </p>
<p> The default "strong" curve is rated in NSA <a
href="https://web.archive.org/web/20160330034144/https://www.nsa.gov/ia/programs/suiteb_cryptography/">Suite
B</a> for information classified up to SECRET. </p>
@ -13380,6 +13394,8 @@ client implementations must support this curve for EECDH key exchange
to take place. It is unwise to choose only "bleeding-edge" curves
supported by only a small subset of clients. </p>
<p> This feature is not used as of Postfix 3.6. Do not specify. </p>
<p> This default "ultra" curve is rated in NSA <a
href="https://web.archive.org/web/20160330034144/https://www.nsa.gov/ia/programs/suiteb_cryptography/">Suite
B</a> for information classified up to TOP SECRET. </p>
@ -13406,6 +13422,8 @@ this parameter is always ignored, and Postfix behaves as though the
<b>auto</b> value (described below) was chosen.
</p>
<p> This feature is not used as of Postfix 3.6. Do not specify. </p>
<p> The available choices are: </p>
<dl>
@ -15881,7 +15899,7 @@ the "tlsproxy_tls_chain_files" parameter. </p>
elliptic-curve Diffie-Hellman (EECDH) key exchange. See
smtpd_tls_eecdh_grade for further details. </p>
<p> This feature is deprecated as of Postfix 3.9. Do not specify. </p>
<p> This feature is not used as of Postfix 3.6. Do not specify. </p>
<p> This feature is available in Postfix 2.8 and later. </p>
@ -17490,7 +17508,7 @@ clients). </p>
This feature is available in Postfix 3.1 and later.
</p>
%PARAM smtp_tls_dane_insecure_mx_policy see "postconf -d" output
%PARAM smtp_tls_dane_insecure_mx_policy dane
<p> The TLS policy for MX hosts with "secure" TLSA records when the
nexthop destination security level is <b>dane</b>, but the MX
@ -17514,10 +17532,9 @@ authentication succeeds, it will be logged only as "Trusted", not
"Verified", because the MX host name could have been forged. </dd>
</dl>
<p> The default setting for Postfix &ge; 3.6 is "dane" with
"smtp_tls_security_level = dane", otherwise "may". This behavior
was backported to Postfix versions 3.5.9, 3.4.19, 3.3.16. 3.2.21.
With earlier Postfix versions the default setting was always "dane".
<p> The default setting is "dane" as of Postfix versions 3.6.17,
3.7.13, 3.8.8, 3.9.2, and 3.10.0. With earlier versions the default
was mistakenly dependent on the smtp_tls_security_level setting.
</p>
<p> Though with "insecure" MX records an active attacker can
@ -19087,6 +19104,45 @@ MinProtocol = TLSv1
</pre>
</blockquote>
<p> Example: Custom OpenSSL group settings. </p>
<pre>
main.cf:
tls_config_file = ${config_directory}/openssl.cnf
tls_config_name = postfix
</pre>
<pre>
openssl.cnf:
postfix = postfix_settings
</pre>
<pre>
[postfix_settings]
ssl_conf = postfix_ssl_settings
</pre>
<pre>
[postfix_ssl_settings]
system_default = baseline_postfix_settings
</pre>
<pre>
[baseline_postfix_settings]
# New OpenSSL 3.5 syntax, for older releases consider
# the Postfix default:
#
# Groups = X25519:X448:prime256v1:secp384r1:secp521r1:ffdhe2048:ffdhe3072
#
Groups = *X25519MLKEM768 / *X25519:X448 / P-256:P-384
</pre>
<p> Caution: It is typically best to just use the default OpenSSL
group settings, by setting "tls_config_file = none". Overly strict
system-wide TLS settings will conflict with Postfix's opportunistic
TLS, where being less restrictive is better than downgrading to
cleartext SMTP. </p>
<p> This feature is available in Postfix &ge; 3.9, 3.8.1, 3.7.6,
3.6.10, and 3.5.20. </p>

View File

@ -356,7 +356,8 @@ static BOUNCE_INFO *bounce_mail_alloc(const char *service,
quote_822_local_flags(bounce_info->sender,
VSTRING_LEN(bounce_info->buf) ?
STR(bounce_info->buf) :
mail_addr_mail_daemon(), 0);
mail_addr_mail_daemon(),
QUOTE_FLAG_8BITCLEAN);
}
/*

View File

@ -779,7 +779,7 @@ static void cleanup_header_done_callback(void *context)
}
if (token) {
tok822_externalize(state->temp2, token, TOK822_STR_NONE);
tok822_free(token);
tok822_free_tree(token);
vstring_strcat(state->temp2, " ");
}
vstring_sprintf_append(state->temp2, "<%s>",

View File

@ -733,6 +733,9 @@ static void mysql_parse_config(DICT_MYSQL *dict_mysql, const char *mysqlcf)
msg_info("%s: %s: no hostnames specified, defaulting to '%s'",
myname, mysqlcf, dict_mysql->hosts->argv[0]);
}
/* Don't blacklist the load balancer! */
if (dict_mysql->hosts->argc == 1)
argv_add(dict_mysql->hosts, dict_mysql->hosts->argv[0], (char *) 0);
myfree(hosts);
}

View File

@ -687,6 +687,9 @@ static void pgsql_parse_config(DICT_PGSQL *dict_pgsql, const char *pgsqlcf)
msg_info("%s: %s: no hostnames specified, defaulting to '%s'",
myname, pgsqlcf, dict_pgsql->hosts->argv[0]);
}
/* Don't blacklist the load balancer! */
if (dict_pgsql->hosts->argc == 1)
argv_add(dict_pgsql->hosts, dict_pgsql->hosts->argv[0], (char *) 0);
myfree(hosts);
}

View File

@ -1660,7 +1660,7 @@ extern bool var_smtp_tls_force_tlsa;
/* SMTP only */
#define VAR_SMTP_TLS_INSECURE_MX_POLICY "smtp_tls_dane_insecure_mx_policy"
#define DEF_SMTP_TLS_INSECURE_MX_POLICY "${{$smtp_tls_security_level} == {dane} ? {dane} : {may}}"
#define DEF_SMTP_TLS_INSECURE_MX_POLICY "dane"
extern char *var_smtp_tls_insecure_mx_policy;
/*

View File

@ -20,8 +20,8 @@
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
#define MAIL_RELEASE_DATE "20241204"
#define MAIL_VERSION_NUMBER "3.9.1"
#define MAIL_RELEASE_DATE "20250216"
#define MAIL_VERSION_NUMBER "3.9.2"
#ifdef SNAPSHOT
#define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE

View File

@ -99,6 +99,11 @@ extern int smtputf8_autodetect(int);
#define SMTPUTF8_FLAG_SENDER (1<<2) /* queue file/delivery/bounce request */
#define SMTPUTF8_FLAG_RECIPIENT (1<<3) /* delivery request only */
#define SMTPUTF8_FLAG_ALL (SMTPUTF8_FLAG_REQUESTED \
| SMTPUTF8_FLAG_HEADER \
| SMTPUTF8_FLAG_SENDER \
| SMTPUTF8_FLAG_RECIPIENT)
/* LICENSE
/* .ad
/* .fi

View File

@ -285,6 +285,7 @@ qmgr_message.o: ../../include/resolve_clnt.h
qmgr_message.o: ../../include/rewrite_clnt.h
qmgr_message.o: ../../include/scan_dir.h
qmgr_message.o: ../../include/sent.h
qmgr_message.o: ../../include/smtputf8.h
qmgr_message.o: ../../include/split_addr.h
qmgr_message.o: ../../include/split_at.h
qmgr_message.o: ../../include/stringops.h

View File

@ -137,6 +137,7 @@
#include <split_addr.h>
#include <dsn_mask.h>
#include <rec_attr_map.h>
#include <smtputf8.h>
/* Client stubs. */
@ -562,6 +563,8 @@ static int qmgr_message_read(QMGR_MESSAGE *message)
rec_type = REC_TYPE_ERROR;
break;
}
/* Forward compatibility. */
message->smtputf8 &= SMTPUTF8_FLAG_ALL;
} else if (count == 1) {
/* Postfix < 1.0 (a.k.a. 20010228). */
qmgr_message_oldstyle_scan(message);

View File

@ -301,6 +301,7 @@ qmgr_message.o: ../../include/rewrite_clnt.h
qmgr_message.o: ../../include/sane_time.h
qmgr_message.o: ../../include/scan_dir.h
qmgr_message.o: ../../include/sent.h
qmgr_message.o: ../../include/smtputf8.h
qmgr_message.o: ../../include/split_addr.h
qmgr_message.o: ../../include/split_at.h
qmgr_message.o: ../../include/stringops.h

View File

@ -146,6 +146,7 @@
#include <split_addr.h>
#include <dsn_mask.h>
#include <rec_attr_map.h>
#include <smtputf8.h>
/* Client stubs. */
@ -603,6 +604,8 @@ static int qmgr_message_read(QMGR_MESSAGE *message)
rec_type = REC_TYPE_ERROR;
break;
}
/* Forward compatibility. */
message->smtputf8 &= SMTPUTF8_FLAG_ALL;
} else if (count == 1) {
/* Postfix < 1.0 (a.k.a. 20010228). */
qmgr_message_oldstyle_scan(message);

View File

@ -596,7 +596,7 @@
/* SUBMISSIONS/SMTPS protocol instead of using the STARTTLS command.
/* .PP
/* Available in Postfix version 3.1 and later:
/* .IP "\fBsmtp_tls_dane_insecure_mx_policy (see 'postconf -d' output)\fR"
/* .IP "\fBsmtp_tls_dane_insecure_mx_policy (dane)\fR"
/* The TLS policy for MX hosts with "secure" TLSA records when the
/* nexthop destination security level is \fBdane\fR, but the MX
/* record was found via an "insecure" MX lookup.

View File

@ -385,7 +385,6 @@ static int setup_auto_groups(SSL_CTX *ctx, const char *origin,
void tls_auto_groups(SSL_CTX *ctx, const char *eecdh, const char *ffdhe)
{
#ifndef OPENSSL_NO_ECDH
char *def_eecdh = DEF_TLS_EECDH_AUTO;
#if OPENSSL_VERSION_PREREQ(3, 0)
@ -399,6 +398,10 @@ void tls_auto_groups(SSL_CTX *ctx, const char *eecdh, const char *ffdhe)
#endif
const char *origin;
/* Use OpenSSL defaults */
if (!*eecdh && !*ffdhe)
return;
/*
* Try the user-specified list first. If that fails (empty list or no
* known group name), try again with the Postfix defaults. We assume that
@ -424,7 +427,6 @@ void tls_auto_groups(SSL_CTX *ctx, const char *eecdh, const char *ffdhe)
return;
}
}
#endif
}
#ifdef TEST

View File

@ -674,8 +674,8 @@ void tls_param_init(void)
VAR_TLS_EXPORT_CLIST, DEF_TLS_EXPORT_CLIST, &var_tls_export_ignored, 0, 0,
VAR_TLS_NULL_CLIST, DEF_TLS_NULL_CLIST, &var_tls_null_clist, 1, 0,
VAR_TLS_EECDH_AUTO, DEF_TLS_EECDH_AUTO, &var_tls_eecdh_auto, 0, 0,
VAR_TLS_EECDH_STRONG, DEF_TLS_EECDH_STRONG, &var_tls_eecdh_strong, 1, 0,
VAR_TLS_EECDH_ULTRA, DEF_TLS_EECDH_ULTRA, &var_tls_eecdh_ultra, 1, 0,
VAR_TLS_EECDH_STRONG, DEF_TLS_EECDH_STRONG, &var_tls_eecdh_strong, 0, 0,
VAR_TLS_EECDH_ULTRA, DEF_TLS_EECDH_ULTRA, &var_tls_eecdh_ultra, 0, 0,
VAR_TLS_FFDHE_AUTO, DEF_TLS_FFDHE_AUTO, &var_tls_ffdhe_auto, 0, 0,
VAR_TLS_BUG_TWEAKS, DEF_TLS_BUG_TWEAKS, &var_tls_bug_tweaks, 0, 0,
VAR_TLS_SSL_OPTIONS, DEF_TLS_SSL_OPTIONS, &var_tls_ssl_options, 0, 0,
@ -1057,6 +1057,12 @@ void tls_get_signature_params(TLS_SESS_STATE *TLScontext)
kex_name = OBJ_nid2sn(EVP_PKEY_type(nid));
break;
#if defined(EVP_PKEY_KEYMGMT)
case EVP_PKEY_KEYMGMT:
kex_name = EVP_PKEY_get0_type_name(dh_pkey);
break;
#endif
case EVP_PKEY_DH:
kex_name = "DHE";
TLScontext->kex_bits = EVP_PKEY_bits(dh_pkey);
@ -1069,8 +1075,17 @@ void tls_get_signature_params(TLS_SESS_STATE *TLScontext)
break;
#endif
}
EVP_PKEY_free(dh_pkey);
}
if (kex_name) {
TLScontext->kex_name = mystrdup(kex_name);
TLScontext->kex_curve = kex_curve;
}
/* Not a problem if NULL */
EVP_PKEY_free(dh_pkey);
/* Resumption makes no use of signature keys or digests */
if (TLScontext->session_reused)
return;
/*
* On the client end, the certificate may be present, but not used, so we
@ -1096,12 +1111,19 @@ void tls_get_signature_params(TLS_SESS_STATE *TLScontext)
* the more familiar name. For "RSA" keys report "RSA-PSS", which
* must be used with TLS 1.3.
*/
if ((nid = EVP_PKEY_type(EVP_PKEY_id(local_pkey))) != NID_undef) {
if ((nid = EVP_PKEY_id(local_pkey)) != NID_undef) {
switch (nid) {
default:
locl_sig_name = OBJ_nid2sn(nid);
if ((nid = EVP_PKEY_type(nid)) != NID_undef)
locl_sig_name = OBJ_nid2sn(nid);
break;
#if defined(EVP_PKEY_KEYMGMT)
case EVP_PKEY_KEYMGMT:
locl_sig_name = EVP_PKEY_get0_type_name(local_pkey);
break;
#endif
case EVP_PKEY_RSA:
/* For RSA, TLS 1.3 mandates PSS signatures */
locl_sig_name = "RSA-PSS";
@ -1123,6 +1145,13 @@ void tls_get_signature_params(TLS_SESS_STATE *TLScontext)
*/
if (SSL_get_signature_nid(ssl, &nid) && nid != NID_undef)
locl_sig_dgst = OBJ_nid2sn(nid);
if (locl_sig_name) {
SIG_PROP(TLScontext, srvr, name) = mystrdup(locl_sig_name);
SIG_PROP(TLScontext, srvr, curve) = locl_sig_curve;
if (locl_sig_dgst)
SIG_PROP(TLScontext, srvr, dgst) = mystrdup(locl_sig_dgst);
}
}
peer_cert = TLS_PEEK_PEER_CERT(ssl);
if (peer_cert != 0) {
@ -1150,12 +1179,19 @@ void tls_get_signature_params(TLS_SESS_STATE *TLScontext)
* the more familiar name. For "RSA" keys report "RSA-PSS", which
* must be used with TLS 1.3.
*/
if ((nid = EVP_PKEY_type(EVP_PKEY_id(peer_pkey))) != NID_undef) {
if ((nid = EVP_PKEY_id(peer_pkey)) != NID_undef) {
switch (nid) {
default:
peer_sig_name = OBJ_nid2sn(nid);
if ((nid = EVP_PKEY_type(nid)) != NID_undef)
peer_sig_name = OBJ_nid2sn(nid);
break;
#if defined(EVP_PKEY_KEYMGMT)
case EVP_PKEY_KEYMGMT:
peer_sig_name = EVP_PKEY_get0_type_name(peer_pkey);
break;
#endif
case EVP_PKEY_RSA:
/* For RSA, TLS 1.3 mandates PSS signatures */
peer_sig_name = "RSA-PSS";
@ -1178,25 +1214,14 @@ void tls_get_signature_params(TLS_SESS_STATE *TLScontext)
if (SSL_get_peer_signature_nid(ssl, &nid) && nid != NID_undef)
peer_sig_dgst = OBJ_nid2sn(nid);
if (peer_sig_name) {
SIG_PROP(TLScontext, !srvr, name) = mystrdup(peer_sig_name);
SIG_PROP(TLScontext, !srvr, curve) = peer_sig_curve;
if (peer_sig_dgst)
SIG_PROP(TLScontext, !srvr, dgst) = mystrdup(peer_sig_dgst);
}
}
TLS_FREE_PEER_CERT(peer_cert);
if (kex_name) {
TLScontext->kex_name = mystrdup(kex_name);
TLScontext->kex_curve = kex_curve;
}
if (locl_sig_name) {
SIG_PROP(TLScontext, srvr, name) = mystrdup(locl_sig_name);
SIG_PROP(TLScontext, srvr, curve) = locl_sig_curve;
if (locl_sig_dgst)
SIG_PROP(TLScontext, srvr, dgst) = mystrdup(locl_sig_dgst);
}
if (peer_sig_name) {
SIG_PROP(TLScontext, !srvr, name) = mystrdup(peer_sig_name);
SIG_PROP(TLScontext, !srvr, curve) = peer_sig_curve;
if (peer_sig_dgst)
SIG_PROP(TLScontext, !srvr, dgst) = mystrdup(peer_sig_dgst);
}
}
/* tls_log_summary - TLS loglevel 1 one-liner, embellished with TLS 1.3 details */

View File

@ -39,6 +39,9 @@
#include <sys_defs.h>
#include <sys/ioctl.h>
#ifdef SUNOS5
#include <sys/socket.h> /* shutdown(2) */
#endif
#ifdef FIONREAD_IN_SYS_FILIO_H
#include <sys/filio.h>
#endif