mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-22 09:57:34 +00:00
postfix-3.10-20250215
This commit is contained in:
parent
a5f2cae618
commit
9f14bb25b6
1
postfix/.indent.pro
vendored
1
postfix/.indent.pro
vendored
@ -302,7 +302,6 @@
|
||||
-TRESPONSE
|
||||
-TREST_TABLE
|
||||
-TRES_CONTEXT
|
||||
-TRING
|
||||
-TRWR_CONTEXT
|
||||
-TSCACHE
|
||||
-TSCACHE_CLNT
|
||||
|
128
postfix/HISTORY
128
postfix/HISTORY
@ -28982,4 +28982,130 @@ Apologies for any names omitted.
|
||||
tls_config_file description. File: proto/postconf.proto.
|
||||
The unused parameters will be deleted in Postfix 3.11.
|
||||
|
||||
Postfix 3.10 code freeze.
|
||||
Baseline is postfix-3.10-20250215.
|
||||
|
||||
NONPROD CODE
|
||||
|
||||
Feature: support for the REQUIRETLS verb in SMTP. According
|
||||
to RFC 8689, this requires TLS server certificate matching.
|
||||
Files: cleanup/cleanup_api.c, global/cleanup_strflags.c,
|
||||
global/post_mail.c, global/post_mail.c, global/ehlo_mask.[hc],
|
||||
global/ehlo_mask_test.c, local/forward.c, smtpd/smtpd.c,
|
||||
smtp/smtp_connect.c, smtp/smtp_proto.c.
|
||||
|
||||
Added a configuration parameter "requiretls_enable" (default:
|
||||
yes). Files: cleanup/cleanup_api.c, global/cleanup_strflags.c,
|
||||
global/post_mail.c, global/post_mail.c, global/ehlo_mask.[hc],
|
||||
global/ehlo_mask_test.c, local/forward.c, smtpd/smtpd.c,
|
||||
smtp/smtp_connect.c, smtp/smtp_proto.c.
|
||||
|
||||
After a certificate check fails, or a remote SMTP server
|
||||
does not announce REQUIRETLS support, the Postfix SMTP
|
||||
client will override the RFC 8689 5.x.x. status and treat
|
||||
it as a soft error, until there are no more alternate MX
|
||||
servers to try. Files: smtp/smtp.h, smtp/smtp_proto.c,
|
||||
smtp/smtp_trouble.c.
|
||||
|
||||
When a message received with REQUIRETLS is returned in a
|
||||
delivery status notification, return the message headers
|
||||
only, and do not request delivery with REQUIRETLS. Files:
|
||||
bounce/bounce_notify_service.c, bounce/bounce_one_service.c,
|
||||
bounce/bounce_trace_service.c, bounce/bounce_verp_service.c,
|
||||
bounce/bounce_warn_service.c.
|
||||
|
||||
Completed: new Postfix sendmail command option "-O requiretls"
|
||||
to request that deliveries over SMTP use the REQUIRETLS
|
||||
extension. The option value "requiretls" is case-insensitive.
|
||||
Files: sendmail/sendmail.c, global/rec_types.h, pickup/pickup.c.
|
||||
|
||||
Cleanup: new Postfix sendmail command option "-O smtputf8"
|
||||
to request that deliveries over SMTP use the SMTPUTF8
|
||||
extension. This reuses logic that was introduced for
|
||||
REQUIRETLS. The option value "smtputf8" is case-insensitive.
|
||||
Files: sendmail/sendmail.c.
|
||||
|
||||
Cleanup: when message delivery requires that a remote SMTP
|
||||
server supports SMTPUTF8, try multiple MX servers before
|
||||
returning a message as undeliverable. This reuses logic
|
||||
that was introduced for REQUIRETLS. File: smtp/smtp_proto.c.
|
||||
|
||||
Completed: support in the pipe(8) daemon to propagate
|
||||
REQUIRETLS through post-queue content filters that pass
|
||||
filtered mail to the Postfix sendmail(1) command. This
|
||||
involves a new a pipe(8) macro ${requiretls} that expands
|
||||
into a suitable sendmail(1) command-line option. A more
|
||||
secretive alternative would be to pass the info with a
|
||||
REQUIRETLS environment variable, but that would require
|
||||
change to the default import_environment setting. Files:
|
||||
pipe/pipe.c, sendmail/sendmail.c.
|
||||
|
||||
Completed: the SMTP/LMTP client with "flags=X" will not
|
||||
require REQUIRETLS support in the final server. Files:
|
||||
smtp/smtp.c, smtp/smtp_proto.c.
|
||||
|
||||
Completed: REQUIRETLS support can be disabled in the Postfix
|
||||
SMTP/LMTP client with "{ -o requiretls_enable = no }". This
|
||||
is recommended for a perimeter MTA that hands off mail to
|
||||
internal servers that may not support REQUIRETLS.
|
||||
|
||||
Completed: smtp_enforce_requiretls list of next-hop domains
|
||||
(or UNIX-domain pathnames) that are ready for REQUIRETLS
|
||||
enforcement. This may help with gradual adoption.
|
||||
|
||||
TODO
|
||||
|
||||
Encapsulate the sendopts-to-cleanup-flags mapping.
|
||||
|
||||
sendmail -O TlsRequired option?
|
||||
|
||||
How do we make it work with multi-instance SMTP-based content
|
||||
filters? How is this different from the single-instance
|
||||
case?
|
||||
|
||||
What REQUIRETLS expectations can we enforce when delivering
|
||||
over a UNIX-domain channel? The SMTP/LMTP client currently
|
||||
implements the same behavior as for TCP, except that
|
||||
opportunistic TLS is converted into 'none'.
|
||||
|
||||
Document how REQUIRETLS works (or does not) with external
|
||||
content filters.
|
||||
|
||||
- REQUIRETLS will work with Milter-based content filters.
|
||||
|
||||
- REQUIRETLS will work with smtpd_proxy_filter as long as
|
||||
the filter passes the entire Postfix SMTP client's MAIL
|
||||
FROM command line through the filter to the Postfix SMTP
|
||||
server after the proxy filter. The Postfix proxy filter
|
||||
client does not need to see REQUIRETLS (or SMTPUTF8)
|
||||
announcements in the filter's EHLO response.
|
||||
|
||||
- REQUIRETLS will work with an SMTP-based after-queue content
|
||||
filters as long as the filter announces REQUIRETLS in the
|
||||
EHLO response (this could be 'always', or copied from the
|
||||
after-filter Postfix SMTP server's EHLO response), and
|
||||
as long as the filter passes the entire MAIL FROM command
|
||||
from the before-filter Postfix SMTP client to the
|
||||
after-filter Postfix SMTP server. Apart from that, the
|
||||
content filter does not need to 'know' that REQUIRETLS
|
||||
exists.
|
||||
|
||||
- REQUIRETLS will work with pipe(8)-filter-sendmail(1)
|
||||
after-queue content filters, by specifying a pipe(8) macro
|
||||
${requiretls} which expands to a suitable sendmail(1)
|
||||
command-line option.
|
||||
|
||||
- The Postfix LMTP client when run with the -X option will
|
||||
not require that the LMTP server announces REQUIRETLS
|
||||
support.
|
||||
|
||||
- Perimeter MTA configuration: disable REQUIRETLS on the
|
||||
inbound relay transport when internal infrastructure may
|
||||
not be suitable for REQUIRETLS enforcement.
|
||||
|
||||
If a message contains "TLS-Required: no", should a bounce
|
||||
message also contain this header?
|
||||
|
||||
Ditto for "tls_required_enable = no" and "TLS-Required:
|
||||
no". The header is provided by the sender, and enforcement
|
||||
is up the Postfix SMTP client.
|
||||
|
||||
|
@ -26,6 +26,12 @@ now also distributed with the more recent Eclipse Public License
|
||||
license of their choice. Those who are more comfortable with the
|
||||
IPL can continue with that license.
|
||||
|
||||
[Feature 20250119]
|
||||
|
||||
Support for the REQUIRETLS verb in SMTP. As specified in RFC 8689,
|
||||
this not only requires TLS encryption, but also server certificate
|
||||
matching. TODO(wietse): new configuration parameters.
|
||||
|
||||
[Feature 20250117]
|
||||
|
||||
Support for the RFC 8689 "TLS-Required: no" message header to request
|
||||
|
@ -174,7 +174,7 @@ SMTP(8) SMTP(8)
|
||||
<a href="https://tools.ietf.org/html/rfc6531">RFC 6531</a> (Internationalized SMTP)
|
||||
<a href="https://tools.ietf.org/html/rfc6533">RFC 6533</a> (Internationalized Delivery Status Notifications)
|
||||
<a href="https://tools.ietf.org/html/rfc7672">RFC 7672</a> (SMTP security via opportunistic DANE TLS)
|
||||
<a href="https://tools.ietf.org/html/rfc8689">RFC 8689</a> (TLS-Required message header)
|
||||
<a href="https://tools.ietf.org/html/rfc8689">RFC 8689</a> (SMTP REQUIRETLS extension)
|
||||
|
||||
<b><a name="diagnostics">DIAGNOSTICS</a></b>
|
||||
Problems and transactions are logged to <b>syslogd</b>(8) or <a href="postlogd.8.html"><b>postlogd</b>(8)</a>.
|
||||
@ -507,7 +507,7 @@ SMTP(8) SMTP(8)
|
||||
The delimiter between username and password in sasl_passwd_maps
|
||||
lookup results.
|
||||
|
||||
<b><a name="starttls_support_controls">STARTTLS SUPPORT CONTROLS</a></b>
|
||||
<b><a name="tls_support_controls">TLS SUPPORT CONTROLS</a></b>
|
||||
Detailed information about STARTTLS configuration may be found in the
|
||||
<a href="TLS_README.html">TLS_README</a> document.
|
||||
|
||||
@ -766,41 +766,52 @@ SMTP(8) SMTP(8)
|
||||
Enable support for the "TLS-Required: no" message header,
|
||||
defined in <a href="https://tools.ietf.org/html/rfc8689">RFC 8689</a>.
|
||||
|
||||
<b><a name="obsolete_starttls_controls">OBSOLETE STARTTLS CONTROLS</a></b>
|
||||
The following configuration parameters exist for compatibility with
|
||||
Postfix versions before 2.3. Support for these will be removed in a
|
||||
<b><a href="postconf.5.html#requiretls_enable">requiretls_enable</a> (yes)</b>
|
||||
Enable support for the ESMTP verb "REQUIRETLS", defined in <a href="https://tools.ietf.org/html/rfc8689">RFC</a>
|
||||
<a href="https://tools.ietf.org/html/rfc8689">8689</a>.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_enforce_requiretls">smtp_enforce_requiretls</a> (empty)</b>
|
||||
An optional list of next-hop destinations that the Postfix
|
||||
SMTP/LMTP client will enforce REQUIRETLS for, when a message was
|
||||
received with the REQUIRETLS option: the next-hop server must
|
||||
offer a matching TLS server certificate, and the server must
|
||||
announce REQUIRETLS support).
|
||||
|
||||
<b><a name="obsolete_tls_controls">OBSOLETE TLS CONTROLS</a></b>
|
||||
The following configuration parameters exist for compatibility with
|
||||
Postfix versions before 2.3. Support for these will be removed in a
|
||||
future release.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_use_tls">smtp_use_tls</a> (no)</b>
|
||||
Opportunistic mode: use TLS when a remote SMTP server announces
|
||||
Opportunistic mode: use TLS when a remote SMTP server announces
|
||||
STARTTLS support, otherwise send the mail in the clear.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_enforce_tls">smtp_enforce_tls</a> (no)</b>
|
||||
Enforcement mode: require that remote SMTP servers use TLS
|
||||
Enforcement mode: require that remote SMTP servers use TLS
|
||||
encryption, and never send mail in the clear.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_tls_enforce_peername">smtp_tls_enforce_peername</a> (yes)</b>
|
||||
With mandatory TLS encryption, require that the remote SMTP
|
||||
server hostname matches the information in the remote SMTP
|
||||
With mandatory TLS encryption, require that the remote SMTP
|
||||
server hostname matches the information in the remote SMTP
|
||||
server certificate.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> (empty)</b>
|
||||
Optional lookup tables with the Postfix SMTP client TLS usage
|
||||
policy by next-hop destination and by remote SMTP server host-
|
||||
Optional lookup tables with the Postfix SMTP client TLS usage
|
||||
policy by next-hop destination and by remote SMTP server host-
|
||||
name.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_tls_cipherlist">smtp_tls_cipherlist</a> (empty)</b>
|
||||
Obsolete Postfix < 2.3 control for the Postfix SMTP client TLS
|
||||
Obsolete Postfix < 2.3 control for the Postfix SMTP client TLS
|
||||
cipher list.
|
||||
|
||||
<b><a name="resource_and_rate_controls">RESOURCE AND RATE CONTROLS</a></b>
|
||||
<b><a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> (30s)</b>
|
||||
The Postfix SMTP client time limit for completing a TCP connec-
|
||||
The Postfix SMTP client time limit for completing a TCP connec-
|
||||
tion, or zero (use the operating system built-in time limit).
|
||||
|
||||
<b><a href="postconf.5.html#smtp_helo_timeout">smtp_helo_timeout</a> (300s)</b>
|
||||
The Postfix SMTP client time limit for sending the HELO or EHLO
|
||||
command, and for receiving the initial remote SMTP server
|
||||
The Postfix SMTP client time limit for sending the HELO or EHLO
|
||||
command, and for receiving the initial remote SMTP server
|
||||
response.
|
||||
|
||||
<b><a href="postconf.5.html#lmtp_lhlo_timeout">lmtp_lhlo_timeout</a> (300s)</b>
|
||||
@ -812,19 +823,19 @@ SMTP(8) SMTP(8)
|
||||
mand, and for receiving the remote SMTP server response.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_mail_timeout">smtp_mail_timeout</a> (300s)</b>
|
||||
The Postfix SMTP client time limit for sending the MAIL FROM
|
||||
The Postfix SMTP client time limit for sending the MAIL FROM
|
||||
command, and for receiving the remote SMTP server response.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_rcpt_timeout">smtp_rcpt_timeout</a> (300s)</b>
|
||||
The Postfix SMTP client time limit for sending the SMTP RCPT TO
|
||||
The Postfix SMTP client time limit for sending the SMTP RCPT TO
|
||||
command, and for receiving the remote SMTP server response.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_data_init_timeout">smtp_data_init_timeout</a> (120s)</b>
|
||||
The Postfix SMTP client time limit for sending the SMTP DATA
|
||||
The Postfix SMTP client time limit for sending the SMTP DATA
|
||||
command, and for receiving the remote SMTP server response.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_data_xfer_timeout">smtp_data_xfer_timeout</a> (180s)</b>
|
||||
The Postfix SMTP client time limit for sending the SMTP message
|
||||
The Postfix SMTP client time limit for sending the SMTP message
|
||||
content.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_data_done_timeout">smtp_data_done_timeout</a> (600s)</b>
|
||||
@ -838,13 +849,13 @@ SMTP(8) SMTP(8)
|
||||
Available in Postfix version 2.1 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_mx_address_limit">smtp_mx_address_limit</a> (5)</b>
|
||||
The maximal number of MX (mail exchanger) IP addresses that can
|
||||
result from Postfix SMTP client mail exchanger lookups, or zero
|
||||
The maximal number of MX (mail exchanger) IP addresses that can
|
||||
result from Postfix SMTP client mail exchanger lookups, or zero
|
||||
(no limit).
|
||||
|
||||
<b><a href="postconf.5.html#smtp_mx_session_limit">smtp_mx_session_limit</a> (2)</b>
|
||||
The maximal number of SMTP sessions per delivery request before
|
||||
the Postfix SMTP client gives up or delivers to a fall-back
|
||||
The maximal number of SMTP sessions per delivery request before
|
||||
the Postfix SMTP client gives up or delivers to a fall-back
|
||||
<a href="postconf.5.html#relayhost">relay host</a>, or zero (no limit).
|
||||
|
||||
<b><a href="postconf.5.html#smtp_rset_timeout">smtp_rset_timeout</a> (20s)</b>
|
||||
@ -854,17 +865,17 @@ SMTP(8) SMTP(8)
|
||||
Available in Postfix version 2.2 and earlier:
|
||||
|
||||
<b><a href="postconf.5.html#lmtp_cache_connection">lmtp_cache_connection</a> (yes)</b>
|
||||
Keep Postfix LMTP client connections open for up to $<a href="postconf.5.html#max_idle">max_idle</a>
|
||||
Keep Postfix LMTP client connections open for up to $<a href="postconf.5.html#max_idle">max_idle</a>
|
||||
seconds.
|
||||
|
||||
Available in Postfix version 2.2 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_connection_cache_destinations">smtp_connection_cache_destinations</a> (empty)</b>
|
||||
Permanently enable SMTP connection caching for the specified
|
||||
Permanently enable SMTP connection caching for the specified
|
||||
destinations.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_connection_cache_on_demand">smtp_connection_cache_on_demand</a> (yes)</b>
|
||||
Temporarily enable SMTP connection caching while a destination
|
||||
Temporarily enable SMTP connection caching while a destination
|
||||
has a high volume of mail in the <a href="QSHAPE_README.html#active_queue">active queue</a>.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_connection_reuse_time_limit">smtp_connection_reuse_time_limit</a> (300s)</b>
|
||||
@ -878,23 +889,23 @@ SMTP(8) SMTP(8)
|
||||
Available in Postfix version 2.3 and later:
|
||||
|
||||
<b><a href="postconf.5.html#connection_cache_protocol_timeout">connection_cache_protocol_timeout</a> (5s)</b>
|
||||
Time limit for connection cache connect, send or receive opera-
|
||||
Time limit for connection cache connect, send or receive opera-
|
||||
tions.
|
||||
|
||||
Available in Postfix version 2.9 - 3.6:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_per_record_deadline">smtp_per_record_deadline</a> (no)</b>
|
||||
Change the behavior of the smtp_*_timeout time limits, from a
|
||||
time limit per read or write system call, to a time limit to
|
||||
send or receive a complete record (an SMTP command line, SMTP
|
||||
response line, SMTP message content line, or TLS protocol mes-
|
||||
Change the behavior of the smtp_*_timeout time limits, from a
|
||||
time limit per read or write system call, to a time limit to
|
||||
send or receive a complete record (an SMTP command line, SMTP
|
||||
response line, SMTP message content line, or TLS protocol mes-
|
||||
sage).
|
||||
|
||||
Available in Postfix version 2.11 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_connection_reuse_count_limit">smtp_connection_reuse_count_limit</a> (0)</b>
|
||||
When SMTP connection caching is enabled, the number of times
|
||||
that an SMTP session may be reused before it is closed, or zero
|
||||
When SMTP connection caching is enabled, the number of times
|
||||
that an SMTP session may be reused before it is closed, or zero
|
||||
(no limit).
|
||||
|
||||
Available in Postfix version 3.4 and later:
|
||||
@ -905,13 +916,13 @@ SMTP(8) SMTP(8)
|
||||
Available in Postfix version 3.7 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_per_request_deadline">smtp_per_request_deadline</a> (no)</b>
|
||||
Change the behavior of the smtp_*_timeout time limits, from a
|
||||
time limit per plaintext or TLS read or write call, to a com-
|
||||
bined time limit for sending a complete SMTP request and for
|
||||
Change the behavior of the smtp_*_timeout time limits, from a
|
||||
time limit per plaintext or TLS read or write call, to a com-
|
||||
bined time limit for sending a complete SMTP request and for
|
||||
receiving a complete SMTP response.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_min_data_rate">smtp_min_data_rate</a> (500)</b>
|
||||
The minimum plaintext data transfer rate in bytes/second for
|
||||
The minimum plaintext data transfer rate in bytes/second for
|
||||
DATA requests, when deadlines are enabled with
|
||||
<a href="postconf.5.html#smtp_per_request_deadline">smtp_per_request_deadline</a>.
|
||||
|
||||
@ -919,54 +930,54 @@ SMTP(8) SMTP(8)
|
||||
|
||||
<b><a href="postconf.5.html#transport_destination_concurrency_limit">transport_destination_concurrency_limit</a> ($<a href="postconf.5.html#default_destination_concurrency_limit">default_destination_concur</a>-</b>
|
||||
<b><a href="postconf.5.html#default_destination_concurrency_limit">rency_limit</a>)</b>
|
||||
A transport-specific override for the <a href="postconf.5.html#default_destination_concurrency_limit">default_destination_con</a>-
|
||||
A transport-specific override for the <a href="postconf.5.html#default_destination_concurrency_limit">default_destination_con</a>-
|
||||
<a href="postconf.5.html#default_destination_concurrency_limit">currency_limit</a> parameter value, where <i>transport</i> is the <a href="master.5.html">master.cf</a>
|
||||
name of the message delivery transport.
|
||||
|
||||
<b><a href="postconf.5.html#transport_destination_recipient_limit">transport_destination_recipient_limit</a> ($<a href="postconf.5.html#default_destination_recipient_limit">default_destination_recipi</a>-</b>
|
||||
<b><a href="postconf.5.html#default_destination_recipient_limit">ent_limit</a>)</b>
|
||||
A transport-specific override for the <a href="postconf.5.html#default_destination_recipient_limit">default_destination_recip</a>-
|
||||
<a href="postconf.5.html#default_destination_recipient_limit">ient_limit</a> parameter value, where <i>transport</i> is the <a href="master.5.html">master.cf</a>
|
||||
<a href="postconf.5.html#default_destination_recipient_limit">ient_limit</a> parameter value, where <i>transport</i> is the <a href="master.5.html">master.cf</a>
|
||||
name of the message delivery transport.
|
||||
|
||||
<b><a name="smtputf8_controls">SMTPUTF8 CONTROLS</a></b>
|
||||
Preliminary SMTPUTF8 support is introduced with Postfix 3.0.
|
||||
|
||||
<b><a href="postconf.5.html#smtputf8_enable">smtputf8_enable</a> (yes)</b>
|
||||
Enable preliminary SMTPUTF8 support for the protocols described
|
||||
Enable preliminary SMTPUTF8 support for the protocols described
|
||||
in <a href="https://tools.ietf.org/html/rfc6531">RFC 6531</a>, <a href="https://tools.ietf.org/html/rfc6532">RFC 6532</a>, and <a href="https://tools.ietf.org/html/rfc6533">RFC 6533</a>.
|
||||
|
||||
<b><a href="postconf.5.html#smtputf8_autodetect_classes">smtputf8_autodetect_classes</a> (sendmail, verify)</b>
|
||||
Detect that a message requires SMTPUTF8 support for the speci-
|
||||
Detect that a message requires SMTPUTF8 support for the speci-
|
||||
fied mail origin classes.
|
||||
|
||||
Available in Postfix version 3.2 and later:
|
||||
|
||||
<b><a href="postconf.5.html#enable_idna2003_compatibility">enable_idna2003_compatibility</a> (no)</b>
|
||||
Enable 'transitional' compatibility between IDNA2003 and
|
||||
IDNA2008, when converting UTF-8 domain names to/from the ASCII
|
||||
Enable 'transitional' compatibility between IDNA2003 and
|
||||
IDNA2008, when converting UTF-8 domain names to/from the ASCII
|
||||
form that is used for DNS lookups.
|
||||
|
||||
<b><a name="trouble_shooting_controls">TROUBLE SHOOTING CONTROLS</a></b>
|
||||
<b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b>
|
||||
The increment in verbose logging level when a nexthop destina-
|
||||
tion, remote client or server name or network address matches a
|
||||
The increment in verbose logging level when a nexthop destina-
|
||||
tion, remote client or server name or network address matches a
|
||||
pattern given with the <a href="postconf.5.html#debug_peer_list">debug_peer_list</a> parameter.
|
||||
|
||||
<b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a> (empty)</b>
|
||||
Optional list of nexthop destination, remote client or server
|
||||
name or network address patterns that, if matched, cause the
|
||||
verbose logging level to increase by the amount specified in
|
||||
Optional list of nexthop destination, remote client or server
|
||||
name or network address patterns that, if matched, cause the
|
||||
verbose logging level to increase by the amount specified in
|
||||
$<a href="postconf.5.html#debug_peer_level">debug_peer_level</a>.
|
||||
|
||||
<b><a href="postconf.5.html#error_notice_recipient">error_notice_recipient</a> (postmaster)</b>
|
||||
The recipient of postmaster notifications about mail delivery
|
||||
The recipient of postmaster notifications about mail delivery
|
||||
problems that are caused by policy, resource, software or proto-
|
||||
col errors.
|
||||
|
||||
<b><a href="postconf.5.html#internal_mail_filter_classes">internal_mail_filter_classes</a> (empty)</b>
|
||||
What categories of Postfix-generated mail are subject to
|
||||
before-queue content inspection by <a href="postconf.5.html#non_smtpd_milters">non_smtpd_milters</a>,
|
||||
What categories of Postfix-generated mail are subject to
|
||||
before-queue content inspection by <a href="postconf.5.html#non_smtpd_milters">non_smtpd_milters</a>,
|
||||
<a href="postconf.5.html#header_checks">header_checks</a> and <a href="postconf.5.html#body_checks">body_checks</a>.
|
||||
|
||||
<b><a href="postconf.5.html#notify_classes">notify_classes</a> (resource, software)</b>
|
||||
@ -974,46 +985,46 @@ SMTP(8) SMTP(8)
|
||||
|
||||
<b><a name="miscellaneous_controls">MISCELLANEOUS CONTROLS</a></b>
|
||||
<b><a href="postconf.5.html#best_mx_transport">best_mx_transport</a> (empty)</b>
|
||||
Where the Postfix SMTP client should deliver mail when it
|
||||
Where the Postfix SMTP client should deliver mail when it
|
||||
detects a "mail loops back to myself" error condition.
|
||||
|
||||
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
|
||||
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and <a href="master.5.html">master.cf</a> con-
|
||||
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and <a href="master.5.html">master.cf</a> con-
|
||||
figuration files.
|
||||
|
||||
<b><a href="postconf.5.html#daemon_timeout">daemon_timeout</a> (18000s)</b>
|
||||
How much time a Postfix daemon process may take to handle a
|
||||
How much time a Postfix daemon process may take to handle a
|
||||
request before it is terminated by a built-in watchdog timer.
|
||||
|
||||
<b><a href="postconf.5.html#delay_logging_resolution_limit">delay_logging_resolution_limit</a> (2)</b>
|
||||
The maximal number of digits after the decimal point when log-
|
||||
The maximal number of digits after the decimal point when log-
|
||||
ging delay values.
|
||||
|
||||
<b><a href="postconf.5.html#disable_dns_lookups">disable_dns_lookups</a> (no)</b>
|
||||
Disable DNS lookups in the Postfix SMTP and LMTP clients.
|
||||
|
||||
<b><a href="postconf.5.html#inet_interfaces">inet_interfaces</a> (all)</b>
|
||||
The local network interface addresses that this mail system
|
||||
The local network interface addresses that this mail system
|
||||
receives mail on.
|
||||
|
||||
<b><a href="postconf.5.html#inet_protocols">inet_protocols</a> (see 'postconf -d' output)</b>
|
||||
The Internet protocols Postfix will attempt to use when making
|
||||
The Internet protocols Postfix will attempt to use when making
|
||||
or accepting connections.
|
||||
|
||||
<b><a href="postconf.5.html#ipc_timeout">ipc_timeout</a> (3600s)</b>
|
||||
The time limit for sending or receiving information over an
|
||||
The time limit for sending or receiving information over an
|
||||
internal communication channel.
|
||||
|
||||
<b><a href="postconf.5.html#lmtp_assume_final">lmtp_assume_final</a> (no)</b>
|
||||
When a remote LMTP server announces no DSN support, assume that
|
||||
the server performs final delivery, and send "delivered" deliv-
|
||||
When a remote LMTP server announces no DSN support, assume that
|
||||
the server performs final delivery, and send "delivered" deliv-
|
||||
ery status notifications instead of "relayed".
|
||||
|
||||
<b><a href="postconf.5.html#lmtp_tcp_port">lmtp_tcp_port</a> (24)</b>
|
||||
The default TCP port that the Postfix LMTP client connects to.
|
||||
|
||||
<b><a href="postconf.5.html#max_idle">max_idle</a> (100s)</b>
|
||||
The maximum amount of time that an idle Postfix daemon process
|
||||
The maximum amount of time that an idle Postfix daemon process
|
||||
waits for an incoming connection before terminating voluntarily.
|
||||
|
||||
<b><a href="postconf.5.html#max_use">max_use</a> (100)</b>
|
||||
@ -1027,21 +1038,21 @@ SMTP(8) SMTP(8)
|
||||
The process name of a Postfix command or daemon process.
|
||||
|
||||
<b><a href="postconf.5.html#proxy_interfaces">proxy_interfaces</a> (empty)</b>
|
||||
The remote network interface addresses that this mail system
|
||||
receives mail on by way of a proxy or network address transla-
|
||||
The remote network interface addresses that this mail system
|
||||
receives mail on by way of a proxy or network address transla-
|
||||
tion unit.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_address_preference">smtp_address_preference</a> (any)</b>
|
||||
The address type ("ipv6", "ipv4" or "any") that the Postfix SMTP
|
||||
client will try first, when a destination has IPv6 and IPv4
|
||||
client will try first, when a destination has IPv6 and IPv4
|
||||
addresses with equal MX preference.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_bind_address">smtp_bind_address</a> (empty)</b>
|
||||
An optional numerical network address that the Postfix SMTP
|
||||
An optional numerical network address that the Postfix SMTP
|
||||
client should bind to when making an IPv4 connection.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_bind_address6">smtp_bind_address6</a> (empty)</b>
|
||||
An optional numerical network address that the Postfix SMTP
|
||||
An optional numerical network address that the Postfix SMTP
|
||||
client should bind to when making an IPv6 connection.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_helo_name">smtp_helo_name</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
|
||||
@ -1061,7 +1072,7 @@ SMTP(8) SMTP(8)
|
||||
The syslog facility of Postfix logging.
|
||||
|
||||
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (see 'postconf -d' output)</b>
|
||||
A prefix that is prepended to the process name in syslog
|
||||
A prefix that is prepended to the process name in syslog
|
||||
records, so that, for example, "smtpd" becomes "prefix/smtpd".
|
||||
|
||||
Available with Postfix 2.2 and earlier:
|
||||
@ -1073,14 +1084,14 @@ SMTP(8) SMTP(8)
|
||||
Available with Postfix 2.3 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_fallback_relay">smtp_fallback_relay</a> ($<a href="postconf.5.html#fallback_relay">fallback_relay</a>)</b>
|
||||
Optional list of relay destinations that will be used when an
|
||||
SMTP destination is not found, or when delivery fails due to a
|
||||
Optional list of relay destinations that will be used when an
|
||||
SMTP destination is not found, or when delivery fails due to a
|
||||
non-permanent error.
|
||||
|
||||
Available with Postfix 3.0 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_address_verify_target">smtp_address_verify_target</a> (rcpt)</b>
|
||||
In the context of email address verification, the SMTP protocol
|
||||
In the context of email address verification, the SMTP protocol
|
||||
stage that determines whether an email address is deliverable.
|
||||
|
||||
Available with Postfix 3.1 and later:
|
||||
@ -1102,7 +1113,7 @@ SMTP(8) SMTP(8)
|
||||
Available in Postfix 3.7 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_bind_address_enforce">smtp_bind_address_enforce</a> (no)</b>
|
||||
Defer delivery when the Postfix SMTP client cannot apply the
|
||||
Defer delivery when the Postfix SMTP client cannot apply the
|
||||
<a href="postconf.5.html#smtp_bind_address">smtp_bind_address</a> or <a href="postconf.5.html#smtp_bind_address6">smtp_bind_address6</a> setting.
|
||||
|
||||
<b><a name="see_also">SEE ALSO</a></b>
|
||||
|
@ -168,12 +168,32 @@ SENDMAIL(1) SENDMAIL(1)
|
||||
Delivery status notification control. Specify either a
|
||||
comma-separated list with one or more of <b>failure</b> (send notifica-
|
||||
tion when delivery fails), <b>delay</b> (send notification when deliv-
|
||||
ery is delayed), or <b>success</b> (send notification when the message
|
||||
ery is delayed), or <b>success</b> (send notification after the message
|
||||
is delivered); or specify <b>never</b> (don't send any notifications at
|
||||
all).
|
||||
|
||||
This feature is available in Postfix 2.3 and later.
|
||||
|
||||
<b>-O requiretls</b>
|
||||
When delivering a message to an SMTP or LMTP server, the connec-
|
||||
tion must use TLS with a verified server certificate, and the
|
||||
server must support REQUIRETLS. Try multiple servers if possi-
|
||||
ble, and return the message as undeliverable when these require-
|
||||
ments were not satisfied with any of the servers that were
|
||||
tried. The "requiretls" option value is case-insensitive.
|
||||
|
||||
This feature is available in Postfix 3.10 and later.
|
||||
|
||||
<b>-O smtputf8</b>
|
||||
When delivering a message to an SMTP or LMTP server, the server
|
||||
must support SMTPUTF8. Try multiple servers if possible, and
|
||||
return the message as undeliverable when a message contains an
|
||||
UTF8 envelope address or message header, but SMTPUTF8 was not
|
||||
supported by any of the servers that were tried. The "smtputf8"
|
||||
option value is case-insensitive.
|
||||
|
||||
This feature is available in Postfix 3.10 and later.
|
||||
|
||||
<b>-n</b> (ignored)
|
||||
Backwards compatibility.
|
||||
|
||||
@ -483,6 +503,12 @@ SENDMAIL(1) SENDMAIL(1)
|
||||
the default Postfix instance, and that are started, stopped,
|
||||
etc., together with the default Postfix instance.
|
||||
|
||||
Postfix 3.10 and later:
|
||||
|
||||
<b><a href="postconf.5.html#requiretls_enable">requiretls_enable</a> (yes)</b>
|
||||
Enable support for the ESMTP verb "REQUIRETLS", defined in <a href="https://tools.ietf.org/html/rfc8689">RFC</a>
|
||||
<a href="https://tools.ietf.org/html/rfc8689">8689</a>.
|
||||
|
||||
<b><a name="files">FILES</a></b>
|
||||
/var/spool/postfix, mail queue
|
||||
/etc/postfix, configuration files
|
||||
@ -501,7 +527,7 @@ SENDMAIL(1) SENDMAIL(1)
|
||||
syslogd(8), system logging
|
||||
|
||||
<b><a name="readme_files">README_FILES</a></b>
|
||||
Use "<b>postconf <a href="postconf.5.html#readme_directory">readme_directory</a></b>" or "<b>postconf <a href="postconf.5.html#html_directory">html_directory</a></b>" to locate
|
||||
Use "<b>postconf <a href="postconf.5.html#readme_directory">readme_directory</a></b>" or "<b>postconf <a href="postconf.5.html#html_directory">html_directory</a></b>" to locate
|
||||
this information.
|
||||
<a href="DEBUG_README.html">DEBUG_README</a>, Postfix debugging howto
|
||||
<a href="ETRN_README.html">ETRN_README</a>, Postfix ETRN howto
|
||||
|
@ -168,12 +168,32 @@ SENDMAIL(1) SENDMAIL(1)
|
||||
Delivery status notification control. Specify either a
|
||||
comma-separated list with one or more of <b>failure</b> (send notifica-
|
||||
tion when delivery fails), <b>delay</b> (send notification when deliv-
|
||||
ery is delayed), or <b>success</b> (send notification when the message
|
||||
ery is delayed), or <b>success</b> (send notification after the message
|
||||
is delivered); or specify <b>never</b> (don't send any notifications at
|
||||
all).
|
||||
|
||||
This feature is available in Postfix 2.3 and later.
|
||||
|
||||
<b>-O requiretls</b>
|
||||
When delivering a message to an SMTP or LMTP server, the connec-
|
||||
tion must use TLS with a verified server certificate, and the
|
||||
server must support REQUIRETLS. Try multiple servers if possi-
|
||||
ble, and return the message as undeliverable when these require-
|
||||
ments were not satisfied with any of the servers that were
|
||||
tried. The "requiretls" option value is case-insensitive.
|
||||
|
||||
This feature is available in Postfix 3.10 and later.
|
||||
|
||||
<b>-O smtputf8</b>
|
||||
When delivering a message to an SMTP or LMTP server, the server
|
||||
must support SMTPUTF8. Try multiple servers if possible, and
|
||||
return the message as undeliverable when a message contains an
|
||||
UTF8 envelope address or message header, but SMTPUTF8 was not
|
||||
supported by any of the servers that were tried. The "smtputf8"
|
||||
option value is case-insensitive.
|
||||
|
||||
This feature is available in Postfix 3.10 and later.
|
||||
|
||||
<b>-n</b> (ignored)
|
||||
Backwards compatibility.
|
||||
|
||||
@ -483,6 +503,12 @@ SENDMAIL(1) SENDMAIL(1)
|
||||
the default Postfix instance, and that are started, stopped,
|
||||
etc., together with the default Postfix instance.
|
||||
|
||||
Postfix 3.10 and later:
|
||||
|
||||
<b><a href="postconf.5.html#requiretls_enable">requiretls_enable</a> (yes)</b>
|
||||
Enable support for the ESMTP verb "REQUIRETLS", defined in <a href="https://tools.ietf.org/html/rfc8689">RFC</a>
|
||||
<a href="https://tools.ietf.org/html/rfc8689">8689</a>.
|
||||
|
||||
<b><a name="files">FILES</a></b>
|
||||
/var/spool/postfix, mail queue
|
||||
/etc/postfix, configuration files
|
||||
@ -501,7 +527,7 @@ SENDMAIL(1) SENDMAIL(1)
|
||||
syslogd(8), system logging
|
||||
|
||||
<b><a name="readme_files">README_FILES</a></b>
|
||||
Use "<b>postconf <a href="postconf.5.html#readme_directory">readme_directory</a></b>" or "<b>postconf <a href="postconf.5.html#html_directory">html_directory</a></b>" to locate
|
||||
Use "<b>postconf <a href="postconf.5.html#readme_directory">readme_directory</a></b>" or "<b>postconf <a href="postconf.5.html#html_directory">html_directory</a></b>" to locate
|
||||
this information.
|
||||
<a href="DEBUG_README.html">DEBUG_README</a>, Postfix debugging howto
|
||||
<a href="ETRN_README.html">ETRN_README</a>, Postfix ETRN howto
|
||||
|
@ -309,6 +309,15 @@ PIPE(8) PIPE(8)
|
||||
This information is modified by the <b>hqu</b> flags for quoting
|
||||
and case folding.
|
||||
|
||||
<b>${requiretls}</b>
|
||||
This feature should be used with content filters that
|
||||
pass filtered mail to the Postfix <a href="sendmail.1.html">sendmail(1)</a> command.
|
||||
The macro expands to the <a href="sendmail.1.html">sendmail(1)</a> command-line option
|
||||
<b>-Orequiretls</b> if the sender requested REQUIRETLS, other-
|
||||
wise it expands to <b>-Onoop</b>.
|
||||
|
||||
This feature is available as of Postfix 3.10.
|
||||
|
||||
<b>${sasl_method}</b>
|
||||
This macro expands to the name of the SASL authentication
|
||||
mechanism in the AUTH command when the Postfix SMTP
|
||||
|
@ -5041,6 +5041,17 @@ configuration parameter. See there for details. </p>
|
||||
<p> This feature is available in Postfix 2.11 and later. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="lmtp_enforce_requiretls">lmtp_enforce_requiretls</a>
|
||||
(default: empty)</b></DT><DD>
|
||||
|
||||
<p> The LMTP-specific version of the <a href="postconf.5.html#smtp_enforce_requiretls">smtp_enforce_requiretls</a>
|
||||
configuration parameter. See there for details. </p>
|
||||
|
||||
<p> This feature is available in Postfix ≥ 3.10. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="lmtp_enforce_tls">lmtp_enforce_tls</a>
|
||||
@ -8218,6 +8229,13 @@ you really want to match subdomains.
|
||||
<a href="postconf.5.html#smtpd_client_event_limit_exceptions">smtpd_client_event_limit_exceptions</a>
|
||||
</dd>
|
||||
|
||||
<dt> Postfix version 3.10 and later </dt>
|
||||
|
||||
<dd>
|
||||
<a href="postconf.5.html#smtp_enforce_requiretls">smtp_enforce_requiretls</a>,
|
||||
<a href="postconf.5.html#lmtp_enforce_requiretls">lmtp_enforce_requiretls</a>
|
||||
</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
@ -10568,6 +10586,37 @@ the mail server (IMPORTING HOME DIRECTORIES IS NOT RECOMMENDED).
|
||||
</p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="requiretls_enable">requiretls_enable</a>
|
||||
(default: yes)</b></DT><DD>
|
||||
|
||||
<p> Enable support for the ESMTP verb "REQUIRETLS", defined in <a href="https://tools.ietf.org/html/rfc8689">RFC</a>
|
||||
<a href="https://tools.ietf.org/html/rfc8689">8689</a>. By issuing this verb in the "MAIL FROM" command, a sender
|
||||
specifies that a message must be delivered over TLS connections
|
||||
with a verified server certificate, to a server that announces
|
||||
"REQUIRETLS" support. This corresponds to the Postfix SMTP client
|
||||
TLS security levels "secure", "verify", "fingerprint", dane-only,
|
||||
or opportunistic "dane", with a successful certificate match. The
|
||||
Postfix SMTP client will try one or more servers, controlled with
|
||||
the <a href="postconf.5.html#smtp_mx_address_limit">smtp_mx_address_limit</a> parameter, until it finds a server that
|
||||
satisfies requirements. Otherwise, Postfix returns the message as
|
||||
undeliverable. </p>
|
||||
|
||||
<p> Notes: </p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li> <p> REQUIRETLS enforcement is controlled with <a href="postconf.5.html#smtp_enforce_requiretls">smtp_enforce_requiretls</a>
|
||||
or <a href="postconf.5.html#lmtp_enforce_requiretls">lmtp_enforce_requiretls</a>. </p>
|
||||
|
||||
<li> <p> REQUIRETLS overrides "TLS-Required: no". </p>
|
||||
|
||||
</ul>
|
||||
|
||||
<p> This feature is available in Postfix ≥ 3.10. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="reset_owner_alias">reset_owner_alias</a>
|
||||
@ -11899,6 +11948,86 @@ RES_USE_DNSSEC and RES_USE_EDNS0 resolver options. </p>
|
||||
<p> This feature is available in Postfix 2.11 and later. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="smtp_enforce_requiretls">smtp_enforce_requiretls</a>
|
||||
(default: empty)</b></DT><DD>
|
||||
|
||||
<p> An optional list of next-hop destinations that the Postfix
|
||||
SMTP/LMTP client will enforce REQUIRETLS for, when a message was
|
||||
received with the REQUIRETLS option: the next-hop server must offer
|
||||
a matching TLS server certificate, and the server must announce
|
||||
REQUIRETLS support). Such a message will be returned to the sender
|
||||
if some REQUIRETLS requirement cannot be satisfied. These "hard"
|
||||
REQUIRETLS failures are logged as "REQUIRETLS failure". </p>
|
||||
|
||||
<p> Other messages that were received with the REQUIRETLS option
|
||||
will be delivered with REQUIRETLS if possible. If not, a message
|
||||
will be delivered as if it was received without the REQUIRETLS
|
||||
option. This allows a mail sending site to discover when REQUIRETLS
|
||||
can be enforced, without disrupting email deliveries. These "soft"
|
||||
REQUIRETLS failures are logged with "REQUIRETLS Debug". </p>
|
||||
|
||||
<p> On a perimeter MTA, it can make sense to turn off REQUIRETLS
|
||||
enforcement, or even to turn off REQUIRETLS support, when delivering
|
||||
a message to an internal destination. The internal servers may not
|
||||
support REQUIRETLS, and their connections may be secured with means
|
||||
other than DANE, STS, and the like. </p>
|
||||
|
||||
<p> The supported syntax differs with SMTP and LMTP: </p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li> <p> With SMTP, specify a list of next-hop domain names (without
|
||||
the ":port" or ":service" suffix), "/file/name" patterns or
|
||||
"<a href="DATABASE_README.html">type:table</a>" lookup tables, separated by commas and/or whitespace.
|
||||
Continue long lines by starting the next line with whitespace. A
|
||||
"/file/name" pattern is replaced by its contents. A "<a href="DATABASE_README.html">type:table</a>"
|
||||
lookup table is matched when a domain appears as lookup key. Specify
|
||||
"!pattern" to exclude a domain. </p>
|
||||
|
||||
<li> <p> With LMTP, specify list of domain names (without the "inet":
|
||||
prefix, or ":port" or ":service" suffix), or UNIX-domain socket
|
||||
"/path/name" (without the "unix:" prefix), or "<a href="DATABASE_README.html">type:table</a>" lookup
|
||||
tables, separated by commas and/or whitespace. Continue long lines
|
||||
by starting the next line with whitespace. A "<a href="DATABASE_README.html">type:table</a>" lookup
|
||||
table is matched when a domain appears as lookup key. Specify
|
||||
"!pattern" to exclude a domain or socket path. </p>
|
||||
|
||||
</ul>
|
||||
|
||||
<p> Specify the form ".domain" to match any name ending in ".domain".
|
||||
To change this behavior, list "<a href="postconf.5.html#smtp_enforce_requiretls">smtp_enforce_requiretls</a>" or
|
||||
"<a href="postconf.5.html#lmtp_enforce_requiretls">lmtp_enforce_requiretls</a>" in the <a href="postconf.5.html#parent_domain_matches_subdomains">parent_domain_matches_subdomains</a>
|
||||
parameter value. </p>
|
||||
|
||||
<p>
|
||||
SMTP Examples:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
# Enforce REQUIRETLS for SMTP with selected next-hop domains.
|
||||
<a href="postconf.5.html#smtp_enforce_requiretls">smtp_enforce_requiretls</a> = example.com, foo.example
|
||||
<br>
|
||||
# Enforce REQUIRETLS for SMTP with all but a few next-hop domains.
|
||||
<a href="postconf.5.html#smtp_enforce_requiretls">smtp_enforce_requiretls</a> = !foo.example, <a href="DATABASE_README.html#types">static</a>:all
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
LMTP examples:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
# Don't enforce REQUIRETLS
|
||||
<a href="postconf.5.html#lmtp_enforce_requiretls">lmtp_enforce_requiretls</a> =
|
||||
<br>
|
||||
# Enforce REQUIRETLS for specific destinations.
|
||||
<a href="postconf.5.html#lmtp_enforce_requiretls">lmtp_enforce_requiretls</a> = /path/to/socket, message-store.example
|
||||
</pre>
|
||||
|
||||
<p> This feature is available in Postfix ≥ 3.10. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="smtp_enforce_tls">smtp_enforce_tls</a>
|
||||
@ -20728,6 +20857,8 @@ If a message contains a "TLS-Required: no" header, then Postfix
|
||||
will add that header to a delivery status notification for that
|
||||
message. </p>
|
||||
|
||||
<p> Note: REQUIRETLS overrides "TLS-Required: no". </p>
|
||||
|
||||
<p> This feature is available in Postfix ≥ 3.10. </p>
|
||||
|
||||
|
||||
|
@ -168,12 +168,32 @@ SENDMAIL(1) SENDMAIL(1)
|
||||
Delivery status notification control. Specify either a
|
||||
comma-separated list with one or more of <b>failure</b> (send notifica-
|
||||
tion when delivery fails), <b>delay</b> (send notification when deliv-
|
||||
ery is delayed), or <b>success</b> (send notification when the message
|
||||
ery is delayed), or <b>success</b> (send notification after the message
|
||||
is delivered); or specify <b>never</b> (don't send any notifications at
|
||||
all).
|
||||
|
||||
This feature is available in Postfix 2.3 and later.
|
||||
|
||||
<b>-O requiretls</b>
|
||||
When delivering a message to an SMTP or LMTP server, the connec-
|
||||
tion must use TLS with a verified server certificate, and the
|
||||
server must support REQUIRETLS. Try multiple servers if possi-
|
||||
ble, and return the message as undeliverable when these require-
|
||||
ments were not satisfied with any of the servers that were
|
||||
tried. The "requiretls" option value is case-insensitive.
|
||||
|
||||
This feature is available in Postfix 3.10 and later.
|
||||
|
||||
<b>-O smtputf8</b>
|
||||
When delivering a message to an SMTP or LMTP server, the server
|
||||
must support SMTPUTF8. Try multiple servers if possible, and
|
||||
return the message as undeliverable when a message contains an
|
||||
UTF8 envelope address or message header, but SMTPUTF8 was not
|
||||
supported by any of the servers that were tried. The "smtputf8"
|
||||
option value is case-insensitive.
|
||||
|
||||
This feature is available in Postfix 3.10 and later.
|
||||
|
||||
<b>-n</b> (ignored)
|
||||
Backwards compatibility.
|
||||
|
||||
@ -483,6 +503,12 @@ SENDMAIL(1) SENDMAIL(1)
|
||||
the default Postfix instance, and that are started, stopped,
|
||||
etc., together with the default Postfix instance.
|
||||
|
||||
Postfix 3.10 and later:
|
||||
|
||||
<b><a href="postconf.5.html#requiretls_enable">requiretls_enable</a> (yes)</b>
|
||||
Enable support for the ESMTP verb "REQUIRETLS", defined in <a href="https://tools.ietf.org/html/rfc8689">RFC</a>
|
||||
<a href="https://tools.ietf.org/html/rfc8689">8689</a>.
|
||||
|
||||
<b><a name="files">FILES</a></b>
|
||||
/var/spool/postfix, mail queue
|
||||
/etc/postfix, configuration files
|
||||
@ -501,7 +527,7 @@ SENDMAIL(1) SENDMAIL(1)
|
||||
syslogd(8), system logging
|
||||
|
||||
<b><a name="readme_files">README_FILES</a></b>
|
||||
Use "<b>postconf <a href="postconf.5.html#readme_directory">readme_directory</a></b>" or "<b>postconf <a href="postconf.5.html#html_directory">html_directory</a></b>" to locate
|
||||
Use "<b>postconf <a href="postconf.5.html#readme_directory">readme_directory</a></b>" or "<b>postconf <a href="postconf.5.html#html_directory">html_directory</a></b>" to locate
|
||||
this information.
|
||||
<a href="DEBUG_README.html">DEBUG_README</a>, Postfix debugging howto
|
||||
<a href="ETRN_README.html">ETRN_README</a>, Postfix ETRN howto
|
||||
|
@ -174,7 +174,7 @@ SMTP(8) SMTP(8)
|
||||
<a href="https://tools.ietf.org/html/rfc6531">RFC 6531</a> (Internationalized SMTP)
|
||||
<a href="https://tools.ietf.org/html/rfc6533">RFC 6533</a> (Internationalized Delivery Status Notifications)
|
||||
<a href="https://tools.ietf.org/html/rfc7672">RFC 7672</a> (SMTP security via opportunistic DANE TLS)
|
||||
<a href="https://tools.ietf.org/html/rfc8689">RFC 8689</a> (TLS-Required message header)
|
||||
<a href="https://tools.ietf.org/html/rfc8689">RFC 8689</a> (SMTP REQUIRETLS extension)
|
||||
|
||||
<b><a name="diagnostics">DIAGNOSTICS</a></b>
|
||||
Problems and transactions are logged to <b>syslogd</b>(8) or <a href="postlogd.8.html"><b>postlogd</b>(8)</a>.
|
||||
@ -507,7 +507,7 @@ SMTP(8) SMTP(8)
|
||||
The delimiter between username and password in sasl_passwd_maps
|
||||
lookup results.
|
||||
|
||||
<b><a name="starttls_support_controls">STARTTLS SUPPORT CONTROLS</a></b>
|
||||
<b><a name="tls_support_controls">TLS SUPPORT CONTROLS</a></b>
|
||||
Detailed information about STARTTLS configuration may be found in the
|
||||
<a href="TLS_README.html">TLS_README</a> document.
|
||||
|
||||
@ -766,41 +766,52 @@ SMTP(8) SMTP(8)
|
||||
Enable support for the "TLS-Required: no" message header,
|
||||
defined in <a href="https://tools.ietf.org/html/rfc8689">RFC 8689</a>.
|
||||
|
||||
<b><a name="obsolete_starttls_controls">OBSOLETE STARTTLS CONTROLS</a></b>
|
||||
The following configuration parameters exist for compatibility with
|
||||
Postfix versions before 2.3. Support for these will be removed in a
|
||||
<b><a href="postconf.5.html#requiretls_enable">requiretls_enable</a> (yes)</b>
|
||||
Enable support for the ESMTP verb "REQUIRETLS", defined in <a href="https://tools.ietf.org/html/rfc8689">RFC</a>
|
||||
<a href="https://tools.ietf.org/html/rfc8689">8689</a>.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_enforce_requiretls">smtp_enforce_requiretls</a> (empty)</b>
|
||||
An optional list of next-hop destinations that the Postfix
|
||||
SMTP/LMTP client will enforce REQUIRETLS for, when a message was
|
||||
received with the REQUIRETLS option: the next-hop server must
|
||||
offer a matching TLS server certificate, and the server must
|
||||
announce REQUIRETLS support).
|
||||
|
||||
<b><a name="obsolete_tls_controls">OBSOLETE TLS CONTROLS</a></b>
|
||||
The following configuration parameters exist for compatibility with
|
||||
Postfix versions before 2.3. Support for these will be removed in a
|
||||
future release.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_use_tls">smtp_use_tls</a> (no)</b>
|
||||
Opportunistic mode: use TLS when a remote SMTP server announces
|
||||
Opportunistic mode: use TLS when a remote SMTP server announces
|
||||
STARTTLS support, otherwise send the mail in the clear.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_enforce_tls">smtp_enforce_tls</a> (no)</b>
|
||||
Enforcement mode: require that remote SMTP servers use TLS
|
||||
Enforcement mode: require that remote SMTP servers use TLS
|
||||
encryption, and never send mail in the clear.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_tls_enforce_peername">smtp_tls_enforce_peername</a> (yes)</b>
|
||||
With mandatory TLS encryption, require that the remote SMTP
|
||||
server hostname matches the information in the remote SMTP
|
||||
With mandatory TLS encryption, require that the remote SMTP
|
||||
server hostname matches the information in the remote SMTP
|
||||
server certificate.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> (empty)</b>
|
||||
Optional lookup tables with the Postfix SMTP client TLS usage
|
||||
policy by next-hop destination and by remote SMTP server host-
|
||||
Optional lookup tables with the Postfix SMTP client TLS usage
|
||||
policy by next-hop destination and by remote SMTP server host-
|
||||
name.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_tls_cipherlist">smtp_tls_cipherlist</a> (empty)</b>
|
||||
Obsolete Postfix < 2.3 control for the Postfix SMTP client TLS
|
||||
Obsolete Postfix < 2.3 control for the Postfix SMTP client TLS
|
||||
cipher list.
|
||||
|
||||
<b><a name="resource_and_rate_controls">RESOURCE AND RATE CONTROLS</a></b>
|
||||
<b><a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> (30s)</b>
|
||||
The Postfix SMTP client time limit for completing a TCP connec-
|
||||
The Postfix SMTP client time limit for completing a TCP connec-
|
||||
tion, or zero (use the operating system built-in time limit).
|
||||
|
||||
<b><a href="postconf.5.html#smtp_helo_timeout">smtp_helo_timeout</a> (300s)</b>
|
||||
The Postfix SMTP client time limit for sending the HELO or EHLO
|
||||
command, and for receiving the initial remote SMTP server
|
||||
The Postfix SMTP client time limit for sending the HELO or EHLO
|
||||
command, and for receiving the initial remote SMTP server
|
||||
response.
|
||||
|
||||
<b><a href="postconf.5.html#lmtp_lhlo_timeout">lmtp_lhlo_timeout</a> (300s)</b>
|
||||
@ -812,19 +823,19 @@ SMTP(8) SMTP(8)
|
||||
mand, and for receiving the remote SMTP server response.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_mail_timeout">smtp_mail_timeout</a> (300s)</b>
|
||||
The Postfix SMTP client time limit for sending the MAIL FROM
|
||||
The Postfix SMTP client time limit for sending the MAIL FROM
|
||||
command, and for receiving the remote SMTP server response.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_rcpt_timeout">smtp_rcpt_timeout</a> (300s)</b>
|
||||
The Postfix SMTP client time limit for sending the SMTP RCPT TO
|
||||
The Postfix SMTP client time limit for sending the SMTP RCPT TO
|
||||
command, and for receiving the remote SMTP server response.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_data_init_timeout">smtp_data_init_timeout</a> (120s)</b>
|
||||
The Postfix SMTP client time limit for sending the SMTP DATA
|
||||
The Postfix SMTP client time limit for sending the SMTP DATA
|
||||
command, and for receiving the remote SMTP server response.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_data_xfer_timeout">smtp_data_xfer_timeout</a> (180s)</b>
|
||||
The Postfix SMTP client time limit for sending the SMTP message
|
||||
The Postfix SMTP client time limit for sending the SMTP message
|
||||
content.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_data_done_timeout">smtp_data_done_timeout</a> (600s)</b>
|
||||
@ -838,13 +849,13 @@ SMTP(8) SMTP(8)
|
||||
Available in Postfix version 2.1 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_mx_address_limit">smtp_mx_address_limit</a> (5)</b>
|
||||
The maximal number of MX (mail exchanger) IP addresses that can
|
||||
result from Postfix SMTP client mail exchanger lookups, or zero
|
||||
The maximal number of MX (mail exchanger) IP addresses that can
|
||||
result from Postfix SMTP client mail exchanger lookups, or zero
|
||||
(no limit).
|
||||
|
||||
<b><a href="postconf.5.html#smtp_mx_session_limit">smtp_mx_session_limit</a> (2)</b>
|
||||
The maximal number of SMTP sessions per delivery request before
|
||||
the Postfix SMTP client gives up or delivers to a fall-back
|
||||
The maximal number of SMTP sessions per delivery request before
|
||||
the Postfix SMTP client gives up or delivers to a fall-back
|
||||
<a href="postconf.5.html#relayhost">relay host</a>, or zero (no limit).
|
||||
|
||||
<b><a href="postconf.5.html#smtp_rset_timeout">smtp_rset_timeout</a> (20s)</b>
|
||||
@ -854,17 +865,17 @@ SMTP(8) SMTP(8)
|
||||
Available in Postfix version 2.2 and earlier:
|
||||
|
||||
<b><a href="postconf.5.html#lmtp_cache_connection">lmtp_cache_connection</a> (yes)</b>
|
||||
Keep Postfix LMTP client connections open for up to $<a href="postconf.5.html#max_idle">max_idle</a>
|
||||
Keep Postfix LMTP client connections open for up to $<a href="postconf.5.html#max_idle">max_idle</a>
|
||||
seconds.
|
||||
|
||||
Available in Postfix version 2.2 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_connection_cache_destinations">smtp_connection_cache_destinations</a> (empty)</b>
|
||||
Permanently enable SMTP connection caching for the specified
|
||||
Permanently enable SMTP connection caching for the specified
|
||||
destinations.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_connection_cache_on_demand">smtp_connection_cache_on_demand</a> (yes)</b>
|
||||
Temporarily enable SMTP connection caching while a destination
|
||||
Temporarily enable SMTP connection caching while a destination
|
||||
has a high volume of mail in the <a href="QSHAPE_README.html#active_queue">active queue</a>.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_connection_reuse_time_limit">smtp_connection_reuse_time_limit</a> (300s)</b>
|
||||
@ -878,23 +889,23 @@ SMTP(8) SMTP(8)
|
||||
Available in Postfix version 2.3 and later:
|
||||
|
||||
<b><a href="postconf.5.html#connection_cache_protocol_timeout">connection_cache_protocol_timeout</a> (5s)</b>
|
||||
Time limit for connection cache connect, send or receive opera-
|
||||
Time limit for connection cache connect, send or receive opera-
|
||||
tions.
|
||||
|
||||
Available in Postfix version 2.9 - 3.6:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_per_record_deadline">smtp_per_record_deadline</a> (no)</b>
|
||||
Change the behavior of the smtp_*_timeout time limits, from a
|
||||
time limit per read or write system call, to a time limit to
|
||||
send or receive a complete record (an SMTP command line, SMTP
|
||||
response line, SMTP message content line, or TLS protocol mes-
|
||||
Change the behavior of the smtp_*_timeout time limits, from a
|
||||
time limit per read or write system call, to a time limit to
|
||||
send or receive a complete record (an SMTP command line, SMTP
|
||||
response line, SMTP message content line, or TLS protocol mes-
|
||||
sage).
|
||||
|
||||
Available in Postfix version 2.11 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_connection_reuse_count_limit">smtp_connection_reuse_count_limit</a> (0)</b>
|
||||
When SMTP connection caching is enabled, the number of times
|
||||
that an SMTP session may be reused before it is closed, or zero
|
||||
When SMTP connection caching is enabled, the number of times
|
||||
that an SMTP session may be reused before it is closed, or zero
|
||||
(no limit).
|
||||
|
||||
Available in Postfix version 3.4 and later:
|
||||
@ -905,13 +916,13 @@ SMTP(8) SMTP(8)
|
||||
Available in Postfix version 3.7 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_per_request_deadline">smtp_per_request_deadline</a> (no)</b>
|
||||
Change the behavior of the smtp_*_timeout time limits, from a
|
||||
time limit per plaintext or TLS read or write call, to a com-
|
||||
bined time limit for sending a complete SMTP request and for
|
||||
Change the behavior of the smtp_*_timeout time limits, from a
|
||||
time limit per plaintext or TLS read or write call, to a com-
|
||||
bined time limit for sending a complete SMTP request and for
|
||||
receiving a complete SMTP response.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_min_data_rate">smtp_min_data_rate</a> (500)</b>
|
||||
The minimum plaintext data transfer rate in bytes/second for
|
||||
The minimum plaintext data transfer rate in bytes/second for
|
||||
DATA requests, when deadlines are enabled with
|
||||
<a href="postconf.5.html#smtp_per_request_deadline">smtp_per_request_deadline</a>.
|
||||
|
||||
@ -919,54 +930,54 @@ SMTP(8) SMTP(8)
|
||||
|
||||
<b><a href="postconf.5.html#transport_destination_concurrency_limit">transport_destination_concurrency_limit</a> ($<a href="postconf.5.html#default_destination_concurrency_limit">default_destination_concur</a>-</b>
|
||||
<b><a href="postconf.5.html#default_destination_concurrency_limit">rency_limit</a>)</b>
|
||||
A transport-specific override for the <a href="postconf.5.html#default_destination_concurrency_limit">default_destination_con</a>-
|
||||
A transport-specific override for the <a href="postconf.5.html#default_destination_concurrency_limit">default_destination_con</a>-
|
||||
<a href="postconf.5.html#default_destination_concurrency_limit">currency_limit</a> parameter value, where <i>transport</i> is the <a href="master.5.html">master.cf</a>
|
||||
name of the message delivery transport.
|
||||
|
||||
<b><a href="postconf.5.html#transport_destination_recipient_limit">transport_destination_recipient_limit</a> ($<a href="postconf.5.html#default_destination_recipient_limit">default_destination_recipi</a>-</b>
|
||||
<b><a href="postconf.5.html#default_destination_recipient_limit">ent_limit</a>)</b>
|
||||
A transport-specific override for the <a href="postconf.5.html#default_destination_recipient_limit">default_destination_recip</a>-
|
||||
<a href="postconf.5.html#default_destination_recipient_limit">ient_limit</a> parameter value, where <i>transport</i> is the <a href="master.5.html">master.cf</a>
|
||||
<a href="postconf.5.html#default_destination_recipient_limit">ient_limit</a> parameter value, where <i>transport</i> is the <a href="master.5.html">master.cf</a>
|
||||
name of the message delivery transport.
|
||||
|
||||
<b><a name="smtputf8_controls">SMTPUTF8 CONTROLS</a></b>
|
||||
Preliminary SMTPUTF8 support is introduced with Postfix 3.0.
|
||||
|
||||
<b><a href="postconf.5.html#smtputf8_enable">smtputf8_enable</a> (yes)</b>
|
||||
Enable preliminary SMTPUTF8 support for the protocols described
|
||||
Enable preliminary SMTPUTF8 support for the protocols described
|
||||
in <a href="https://tools.ietf.org/html/rfc6531">RFC 6531</a>, <a href="https://tools.ietf.org/html/rfc6532">RFC 6532</a>, and <a href="https://tools.ietf.org/html/rfc6533">RFC 6533</a>.
|
||||
|
||||
<b><a href="postconf.5.html#smtputf8_autodetect_classes">smtputf8_autodetect_classes</a> (sendmail, verify)</b>
|
||||
Detect that a message requires SMTPUTF8 support for the speci-
|
||||
Detect that a message requires SMTPUTF8 support for the speci-
|
||||
fied mail origin classes.
|
||||
|
||||
Available in Postfix version 3.2 and later:
|
||||
|
||||
<b><a href="postconf.5.html#enable_idna2003_compatibility">enable_idna2003_compatibility</a> (no)</b>
|
||||
Enable 'transitional' compatibility between IDNA2003 and
|
||||
IDNA2008, when converting UTF-8 domain names to/from the ASCII
|
||||
Enable 'transitional' compatibility between IDNA2003 and
|
||||
IDNA2008, when converting UTF-8 domain names to/from the ASCII
|
||||
form that is used for DNS lookups.
|
||||
|
||||
<b><a name="trouble_shooting_controls">TROUBLE SHOOTING CONTROLS</a></b>
|
||||
<b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b>
|
||||
The increment in verbose logging level when a nexthop destina-
|
||||
tion, remote client or server name or network address matches a
|
||||
The increment in verbose logging level when a nexthop destina-
|
||||
tion, remote client or server name or network address matches a
|
||||
pattern given with the <a href="postconf.5.html#debug_peer_list">debug_peer_list</a> parameter.
|
||||
|
||||
<b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a> (empty)</b>
|
||||
Optional list of nexthop destination, remote client or server
|
||||
name or network address patterns that, if matched, cause the
|
||||
verbose logging level to increase by the amount specified in
|
||||
Optional list of nexthop destination, remote client or server
|
||||
name or network address patterns that, if matched, cause the
|
||||
verbose logging level to increase by the amount specified in
|
||||
$<a href="postconf.5.html#debug_peer_level">debug_peer_level</a>.
|
||||
|
||||
<b><a href="postconf.5.html#error_notice_recipient">error_notice_recipient</a> (postmaster)</b>
|
||||
The recipient of postmaster notifications about mail delivery
|
||||
The recipient of postmaster notifications about mail delivery
|
||||
problems that are caused by policy, resource, software or proto-
|
||||
col errors.
|
||||
|
||||
<b><a href="postconf.5.html#internal_mail_filter_classes">internal_mail_filter_classes</a> (empty)</b>
|
||||
What categories of Postfix-generated mail are subject to
|
||||
before-queue content inspection by <a href="postconf.5.html#non_smtpd_milters">non_smtpd_milters</a>,
|
||||
What categories of Postfix-generated mail are subject to
|
||||
before-queue content inspection by <a href="postconf.5.html#non_smtpd_milters">non_smtpd_milters</a>,
|
||||
<a href="postconf.5.html#header_checks">header_checks</a> and <a href="postconf.5.html#body_checks">body_checks</a>.
|
||||
|
||||
<b><a href="postconf.5.html#notify_classes">notify_classes</a> (resource, software)</b>
|
||||
@ -974,46 +985,46 @@ SMTP(8) SMTP(8)
|
||||
|
||||
<b><a name="miscellaneous_controls">MISCELLANEOUS CONTROLS</a></b>
|
||||
<b><a href="postconf.5.html#best_mx_transport">best_mx_transport</a> (empty)</b>
|
||||
Where the Postfix SMTP client should deliver mail when it
|
||||
Where the Postfix SMTP client should deliver mail when it
|
||||
detects a "mail loops back to myself" error condition.
|
||||
|
||||
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
|
||||
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and <a href="master.5.html">master.cf</a> con-
|
||||
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and <a href="master.5.html">master.cf</a> con-
|
||||
figuration files.
|
||||
|
||||
<b><a href="postconf.5.html#daemon_timeout">daemon_timeout</a> (18000s)</b>
|
||||
How much time a Postfix daemon process may take to handle a
|
||||
How much time a Postfix daemon process may take to handle a
|
||||
request before it is terminated by a built-in watchdog timer.
|
||||
|
||||
<b><a href="postconf.5.html#delay_logging_resolution_limit">delay_logging_resolution_limit</a> (2)</b>
|
||||
The maximal number of digits after the decimal point when log-
|
||||
The maximal number of digits after the decimal point when log-
|
||||
ging delay values.
|
||||
|
||||
<b><a href="postconf.5.html#disable_dns_lookups">disable_dns_lookups</a> (no)</b>
|
||||
Disable DNS lookups in the Postfix SMTP and LMTP clients.
|
||||
|
||||
<b><a href="postconf.5.html#inet_interfaces">inet_interfaces</a> (all)</b>
|
||||
The local network interface addresses that this mail system
|
||||
The local network interface addresses that this mail system
|
||||
receives mail on.
|
||||
|
||||
<b><a href="postconf.5.html#inet_protocols">inet_protocols</a> (see 'postconf -d' output)</b>
|
||||
The Internet protocols Postfix will attempt to use when making
|
||||
The Internet protocols Postfix will attempt to use when making
|
||||
or accepting connections.
|
||||
|
||||
<b><a href="postconf.5.html#ipc_timeout">ipc_timeout</a> (3600s)</b>
|
||||
The time limit for sending or receiving information over an
|
||||
The time limit for sending or receiving information over an
|
||||
internal communication channel.
|
||||
|
||||
<b><a href="postconf.5.html#lmtp_assume_final">lmtp_assume_final</a> (no)</b>
|
||||
When a remote LMTP server announces no DSN support, assume that
|
||||
the server performs final delivery, and send "delivered" deliv-
|
||||
When a remote LMTP server announces no DSN support, assume that
|
||||
the server performs final delivery, and send "delivered" deliv-
|
||||
ery status notifications instead of "relayed".
|
||||
|
||||
<b><a href="postconf.5.html#lmtp_tcp_port">lmtp_tcp_port</a> (24)</b>
|
||||
The default TCP port that the Postfix LMTP client connects to.
|
||||
|
||||
<b><a href="postconf.5.html#max_idle">max_idle</a> (100s)</b>
|
||||
The maximum amount of time that an idle Postfix daemon process
|
||||
The maximum amount of time that an idle Postfix daemon process
|
||||
waits for an incoming connection before terminating voluntarily.
|
||||
|
||||
<b><a href="postconf.5.html#max_use">max_use</a> (100)</b>
|
||||
@ -1027,21 +1038,21 @@ SMTP(8) SMTP(8)
|
||||
The process name of a Postfix command or daemon process.
|
||||
|
||||
<b><a href="postconf.5.html#proxy_interfaces">proxy_interfaces</a> (empty)</b>
|
||||
The remote network interface addresses that this mail system
|
||||
receives mail on by way of a proxy or network address transla-
|
||||
The remote network interface addresses that this mail system
|
||||
receives mail on by way of a proxy or network address transla-
|
||||
tion unit.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_address_preference">smtp_address_preference</a> (any)</b>
|
||||
The address type ("ipv6", "ipv4" or "any") that the Postfix SMTP
|
||||
client will try first, when a destination has IPv6 and IPv4
|
||||
client will try first, when a destination has IPv6 and IPv4
|
||||
addresses with equal MX preference.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_bind_address">smtp_bind_address</a> (empty)</b>
|
||||
An optional numerical network address that the Postfix SMTP
|
||||
An optional numerical network address that the Postfix SMTP
|
||||
client should bind to when making an IPv4 connection.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_bind_address6">smtp_bind_address6</a> (empty)</b>
|
||||
An optional numerical network address that the Postfix SMTP
|
||||
An optional numerical network address that the Postfix SMTP
|
||||
client should bind to when making an IPv6 connection.
|
||||
|
||||
<b><a href="postconf.5.html#smtp_helo_name">smtp_helo_name</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
|
||||
@ -1061,7 +1072,7 @@ SMTP(8) SMTP(8)
|
||||
The syslog facility of Postfix logging.
|
||||
|
||||
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (see 'postconf -d' output)</b>
|
||||
A prefix that is prepended to the process name in syslog
|
||||
A prefix that is prepended to the process name in syslog
|
||||
records, so that, for example, "smtpd" becomes "prefix/smtpd".
|
||||
|
||||
Available with Postfix 2.2 and earlier:
|
||||
@ -1073,14 +1084,14 @@ SMTP(8) SMTP(8)
|
||||
Available with Postfix 2.3 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_fallback_relay">smtp_fallback_relay</a> ($<a href="postconf.5.html#fallback_relay">fallback_relay</a>)</b>
|
||||
Optional list of relay destinations that will be used when an
|
||||
SMTP destination is not found, or when delivery fails due to a
|
||||
Optional list of relay destinations that will be used when an
|
||||
SMTP destination is not found, or when delivery fails due to a
|
||||
non-permanent error.
|
||||
|
||||
Available with Postfix 3.0 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_address_verify_target">smtp_address_verify_target</a> (rcpt)</b>
|
||||
In the context of email address verification, the SMTP protocol
|
||||
In the context of email address verification, the SMTP protocol
|
||||
stage that determines whether an email address is deliverable.
|
||||
|
||||
Available with Postfix 3.1 and later:
|
||||
@ -1102,7 +1113,7 @@ SMTP(8) SMTP(8)
|
||||
Available in Postfix 3.7 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtp_bind_address_enforce">smtp_bind_address_enforce</a> (no)</b>
|
||||
Defer delivery when the Postfix SMTP client cannot apply the
|
||||
Defer delivery when the Postfix SMTP client cannot apply the
|
||||
<a href="postconf.5.html#smtp_bind_address">smtp_bind_address</a> or <a href="postconf.5.html#smtp_bind_address6">smtp_bind_address6</a> setting.
|
||||
|
||||
<b><a name="see_also">SEE ALSO</a></b>
|
||||
|
@ -62,6 +62,7 @@ SMTPD(8) SMTPD(8)
|
||||
<a href="https://tools.ietf.org/html/rfc6531">RFC 6531</a> (Internationalized SMTP)
|
||||
<a href="https://tools.ietf.org/html/rfc6533">RFC 6533</a> (Internationalized Delivery Status Notifications)
|
||||
<a href="https://tools.ietf.org/html/rfc7505">RFC 7505</a> ("Null MX" No Service Resource Record)
|
||||
<a href="https://tools.ietf.org/html/rfc8689">RFC 8689</a> (SMTP REQUIRETLS extension)
|
||||
|
||||
<b><a name="diagnostics">DIAGNOSTICS</a></b>
|
||||
Problems and transactions are logged to <b>syslogd</b>(8) or <a href="postlogd.8.html"><b>postlogd</b>(8)</a>.
|
||||
@ -430,7 +431,7 @@ SMTPD(8) SMTPD(8)
|
||||
If non-empty, a filter for the SASL mechanism names that the
|
||||
Postfix SMTP server will announce in the EHLO response.
|
||||
|
||||
<b><a name="starttls_support_controls">STARTTLS SUPPORT CONTROLS</a></b>
|
||||
<b><a name="tls_support_controls">TLS SUPPORT CONTROLS</a></b>
|
||||
Detailed information about STARTTLS configuration may be found in the
|
||||
<a href="TLS_README.html">TLS_README</a> document.
|
||||
|
||||
@ -655,109 +656,115 @@ SMTPD(8) SMTPD(8)
|
||||
instead of an X.509 certificate, when asking for or requiring
|
||||
client authentication.
|
||||
|
||||
<b><a name="obsolete_starttls_controls">OBSOLETE STARTTLS CONTROLS</a></b>
|
||||
The following configuration parameters exist for compatibility with
|
||||
Postfix versions before 2.3. Support for these will be removed in a
|
||||
Available in Postfix version 3.10 and later:
|
||||
|
||||
<b><a href="postconf.5.html#requiretls_enable">requiretls_enable</a> (yes)</b>
|
||||
Enable support for the ESMTP verb "REQUIRETLS", defined in <a href="https://tools.ietf.org/html/rfc8689">RFC</a>
|
||||
<a href="https://tools.ietf.org/html/rfc8689">8689</a>.
|
||||
|
||||
<b><a name="obsolete_tls_controls">OBSOLETE TLS CONTROLS</a></b>
|
||||
The following configuration parameters exist for compatibility with
|
||||
Postfix versions before 2.3. Support for these will be removed in a
|
||||
future release.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_use_tls">smtpd_use_tls</a> (no)</b>
|
||||
Opportunistic TLS: announce STARTTLS support to remote SMTP
|
||||
Opportunistic TLS: announce STARTTLS support to remote SMTP
|
||||
clients, but do not require that clients use TLS encryption.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_enforce_tls">smtpd_enforce_tls</a> (no)</b>
|
||||
Mandatory TLS: announce STARTTLS support to remote SMTP clients,
|
||||
and reject all plaintext commands except HELO, EHLO, XCLIENT,
|
||||
and reject all plaintext commands except HELO, EHLO, XCLIENT,
|
||||
STARTTLS, NOOP, QUIT, and (Postfix >= 3.9) HELP.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_tls_cipherlist">smtpd_tls_cipherlist</a> (empty)</b>
|
||||
Obsolete Postfix < 2.3 control for the Postfix SMTP server TLS
|
||||
Obsolete Postfix < 2.3 control for the Postfix SMTP server TLS
|
||||
cipher list.
|
||||
|
||||
<b><a name="smtputf8_controls">SMTPUTF8 CONTROLS</a></b>
|
||||
Preliminary SMTPUTF8 support is introduced with Postfix 3.0.
|
||||
|
||||
<b><a href="postconf.5.html#smtputf8_enable">smtputf8_enable</a> (yes)</b>
|
||||
Enable preliminary SMTPUTF8 support for the protocols described
|
||||
Enable preliminary SMTPUTF8 support for the protocols described
|
||||
in <a href="https://tools.ietf.org/html/rfc6531">RFC 6531</a>, <a href="https://tools.ietf.org/html/rfc6532">RFC 6532</a>, and <a href="https://tools.ietf.org/html/rfc6533">RFC 6533</a>.
|
||||
|
||||
<b><a href="postconf.5.html#strict_smtputf8">strict_smtputf8</a> (no)</b>
|
||||
Enable stricter enforcement of the SMTPUTF8 protocol.
|
||||
|
||||
<b><a href="postconf.5.html#smtputf8_autodetect_classes">smtputf8_autodetect_classes</a> (sendmail, verify)</b>
|
||||
Detect that a message requires SMTPUTF8 support for the speci-
|
||||
Detect that a message requires SMTPUTF8 support for the speci-
|
||||
fied mail origin classes.
|
||||
|
||||
Available in Postfix version 3.2 and later:
|
||||
|
||||
<b><a href="postconf.5.html#enable_idna2003_compatibility">enable_idna2003_compatibility</a> (no)</b>
|
||||
Enable 'transitional' compatibility between IDNA2003 and
|
||||
IDNA2008, when converting UTF-8 domain names to/from the ASCII
|
||||
Enable 'transitional' compatibility between IDNA2003 and
|
||||
IDNA2008, when converting UTF-8 domain names to/from the ASCII
|
||||
form that is used for DNS lookups.
|
||||
|
||||
<b><a name="verp_support_controls">VERP SUPPORT CONTROLS</a></b>
|
||||
With VERP style delivery, each recipient of a message receives a cus-
|
||||
tomized copy of the message with his/her own recipient address encoded
|
||||
With VERP style delivery, each recipient of a message receives a cus-
|
||||
tomized copy of the message with his/her own recipient address encoded
|
||||
in the envelope sender address. The <a href="VERP_README.html">VERP_README</a> file describes config-
|
||||
uration and operation details of Postfix support for variable envelope
|
||||
return path addresses. VERP style delivery is requested with the SMTP
|
||||
XVERP command or with the "sendmail -V" command-line option and is
|
||||
uration and operation details of Postfix support for variable envelope
|
||||
return path addresses. VERP style delivery is requested with the SMTP
|
||||
XVERP command or with the "sendmail -V" command-line option and is
|
||||
available in Postfix version 1.1 and later.
|
||||
|
||||
<b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a> (+=)</b>
|
||||
The two default VERP delimiter characters.
|
||||
|
||||
<b><a href="postconf.5.html#verp_delimiter_filter">verp_delimiter_filter</a> (-=+)</b>
|
||||
The characters Postfix accepts as VERP delimiter characters on
|
||||
The characters Postfix accepts as VERP delimiter characters on
|
||||
the Postfix <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command line and in SMTP commands.
|
||||
|
||||
Available in Postfix version 1.1 and 2.0:
|
||||
|
||||
<b><a href="postconf.5.html#authorized_verp_clients">authorized_verp_clients</a> ($<a href="postconf.5.html#mynetworks">mynetworks</a>)</b>
|
||||
What remote SMTP clients are allowed to specify the XVERP com-
|
||||
What remote SMTP clients are allowed to specify the XVERP com-
|
||||
mand.
|
||||
|
||||
Available in Postfix version 2.1 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_authorized_verp_clients">smtpd_authorized_verp_clients</a> ($<a href="postconf.5.html#authorized_verp_clients">authorized_verp_clients</a>)</b>
|
||||
What remote SMTP clients are allowed to specify the XVERP com-
|
||||
What remote SMTP clients are allowed to specify the XVERP com-
|
||||
mand.
|
||||
|
||||
<b><a name="trouble_shooting_controls">TROUBLE SHOOTING CONTROLS</a></b>
|
||||
The <a href="DEBUG_README.html">DEBUG_README</a> document describes how to debug parts of the Postfix
|
||||
mail system. The methods vary from making the software log a lot of
|
||||
The <a href="DEBUG_README.html">DEBUG_README</a> document describes how to debug parts of the Postfix
|
||||
mail system. The methods vary from making the software log a lot of
|
||||
detail, to running some daemon processes under control of a call tracer
|
||||
or debugger.
|
||||
|
||||
<b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b>
|
||||
The increment in verbose logging level when a nexthop destina-
|
||||
tion, remote client or server name or network address matches a
|
||||
The increment in verbose logging level when a nexthop destina-
|
||||
tion, remote client or server name or network address matches a
|
||||
pattern given with the <a href="postconf.5.html#debug_peer_list">debug_peer_list</a> parameter.
|
||||
|
||||
<b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a> (empty)</b>
|
||||
Optional list of nexthop destination, remote client or server
|
||||
name or network address patterns that, if matched, cause the
|
||||
verbose logging level to increase by the amount specified in
|
||||
Optional list of nexthop destination, remote client or server
|
||||
name or network address patterns that, if matched, cause the
|
||||
verbose logging level to increase by the amount specified in
|
||||
$<a href="postconf.5.html#debug_peer_level">debug_peer_level</a>.
|
||||
|
||||
<b><a href="postconf.5.html#error_notice_recipient">error_notice_recipient</a> (postmaster)</b>
|
||||
The recipient of postmaster notifications about mail delivery
|
||||
The recipient of postmaster notifications about mail delivery
|
||||
problems that are caused by policy, resource, software or proto-
|
||||
col errors.
|
||||
|
||||
<b><a href="postconf.5.html#internal_mail_filter_classes">internal_mail_filter_classes</a> (empty)</b>
|
||||
What categories of Postfix-generated mail are subject to
|
||||
before-queue content inspection by <a href="postconf.5.html#non_smtpd_milters">non_smtpd_milters</a>,
|
||||
What categories of Postfix-generated mail are subject to
|
||||
before-queue content inspection by <a href="postconf.5.html#non_smtpd_milters">non_smtpd_milters</a>,
|
||||
<a href="postconf.5.html#header_checks">header_checks</a> and <a href="postconf.5.html#body_checks">body_checks</a>.
|
||||
|
||||
<b><a href="postconf.5.html#notify_classes">notify_classes</a> (resource, software)</b>
|
||||
The list of error classes that are reported to the postmaster.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_reject_footer">smtpd_reject_footer</a> (empty)</b>
|
||||
Optional information that is appended after each Postfix SMTP
|
||||
Optional information that is appended after each Postfix SMTP
|
||||
server 4XX or 5XX response.
|
||||
|
||||
<b><a href="postconf.5.html#soft_bounce">soft_bounce</a> (no)</b>
|
||||
Safety net to keep mail queued that would otherwise be returned
|
||||
Safety net to keep mail queued that would otherwise be returned
|
||||
to the sender.
|
||||
|
||||
Available in Postfix version 2.1 and later:
|
||||
@ -768,49 +775,49 @@ SMTPD(8) SMTPD(8)
|
||||
Available in Postfix version 2.10 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_log_access_permit_actions">smtpd_log_access_permit_actions</a> (empty)</b>
|
||||
Enable logging of the named "permit" actions in SMTP server
|
||||
access lists (by default, the SMTP server logs "reject" actions
|
||||
Enable logging of the named "permit" actions in SMTP server
|
||||
access lists (by default, the SMTP server logs "reject" actions
|
||||
but not "permit" actions).
|
||||
|
||||
<b><a name="known_versus_unknown_recipient_controls">KNOWN VERSUS UNKNOWN RECIPIENT CONTROLS</a></b>
|
||||
As of Postfix version 2.0, the SMTP server rejects mail for unknown
|
||||
As of Postfix version 2.0, the SMTP server rejects mail for unknown
|
||||
recipients. This prevents the mail queue from clogging up with undeliv-
|
||||
erable MAILER-DAEMON messages. Additional information on this topic is
|
||||
erable MAILER-DAEMON messages. Additional information on this topic is
|
||||
in the <a href="LOCAL_RECIPIENT_README.html">LOCAL_RECIPIENT_README</a> and <a href="ADDRESS_CLASS_README.html">ADDRESS_CLASS_README</a> documents.
|
||||
|
||||
<b><a href="postconf.5.html#show_user_unknown_table_name">show_user_unknown_table_name</a> (yes)</b>
|
||||
Display the name of the recipient table in the "User unknown"
|
||||
Display the name of the recipient table in the "User unknown"
|
||||
responses.
|
||||
|
||||
<b><a href="postconf.5.html#canonical_maps">canonical_maps</a> (empty)</b>
|
||||
Optional address mapping lookup tables for message headers and
|
||||
Optional address mapping lookup tables for message headers and
|
||||
envelopes.
|
||||
|
||||
<b><a href="postconf.5.html#recipient_canonical_maps">recipient_canonical_maps</a> (empty)</b>
|
||||
Optional address mapping lookup tables for envelope and header
|
||||
Optional address mapping lookup tables for envelope and header
|
||||
recipient addresses.
|
||||
|
||||
<b><a href="postconf.5.html#sender_canonical_maps">sender_canonical_maps</a> (empty)</b>
|
||||
Optional address mapping lookup tables for envelope and header
|
||||
Optional address mapping lookup tables for envelope and header
|
||||
sender addresses.
|
||||
|
||||
Parameters concerning known/unknown local recipients:
|
||||
|
||||
<b><a href="postconf.5.html#mydestination">mydestination</a> ($<a href="postconf.5.html#myhostname">myhostname</a>, localhost.$<a href="postconf.5.html#mydomain">mydomain</a>, localhost)</b>
|
||||
The list of domains that are delivered via the $<a href="postconf.5.html#local_transport">local_transport</a>
|
||||
The list of domains that are delivered via the $<a href="postconf.5.html#local_transport">local_transport</a>
|
||||
mail delivery transport.
|
||||
|
||||
<b><a href="postconf.5.html#inet_interfaces">inet_interfaces</a> (all)</b>
|
||||
The local network interface addresses that this mail system
|
||||
The local network interface addresses that this mail system
|
||||
receives mail on.
|
||||
|
||||
<b><a href="postconf.5.html#proxy_interfaces">proxy_interfaces</a> (empty)</b>
|
||||
The remote network interface addresses that this mail system
|
||||
receives mail on by way of a proxy or network address transla-
|
||||
The remote network interface addresses that this mail system
|
||||
receives mail on by way of a proxy or network address transla-
|
||||
tion unit.
|
||||
|
||||
<b><a href="postconf.5.html#inet_protocols">inet_protocols</a> (see 'postconf -d' output)</b>
|
||||
The Internet protocols Postfix will attempt to use when making
|
||||
The Internet protocols Postfix will attempt to use when making
|
||||
or accepting connections.
|
||||
|
||||
<b><a href="postconf.5.html#local_recipient_maps">local_recipient_maps</a> (<a href="proxymap.8.html">proxy</a>:unix:passwd.byname $<a href="postconf.5.html#alias_maps">alias_maps</a>)</b>
|
||||
@ -819,61 +826,61 @@ SMTPD(8) SMTPD(8)
|
||||
|
||||
<b><a href="postconf.5.html#unknown_local_recipient_reject_code">unknown_local_recipient_reject_code</a> (550)</b>
|
||||
The numerical Postfix SMTP server response code when a recipient
|
||||
address is local, and $<a href="postconf.5.html#local_recipient_maps">local_recipient_maps</a> specifies a list of
|
||||
address is local, and $<a href="postconf.5.html#local_recipient_maps">local_recipient_maps</a> specifies a list of
|
||||
lookup tables that does not match the recipient.
|
||||
|
||||
Parameters concerning known/unknown recipients of relay destinations:
|
||||
|
||||
<b><a href="postconf.5.html#relay_domains">relay_domains</a> (Postfix</b> ><b>= 3.0: empty, Postfix</b> < <b>3.0: $<a href="postconf.5.html#mydestination">mydestination</a>)</b>
|
||||
What destination domains (and subdomains thereof) this system
|
||||
What destination domains (and subdomains thereof) this system
|
||||
will relay mail to.
|
||||
|
||||
<b><a href="postconf.5.html#relay_recipient_maps">relay_recipient_maps</a> (empty)</b>
|
||||
Optional lookup tables with all valid addresses in the domains
|
||||
Optional lookup tables with all valid addresses in the domains
|
||||
that match $<a href="postconf.5.html#relay_domains">relay_domains</a>.
|
||||
|
||||
<b><a href="postconf.5.html#unknown_relay_recipient_reject_code">unknown_relay_recipient_reject_code</a> (550)</b>
|
||||
The numerical Postfix SMTP server reply code when a recipient
|
||||
address matches $<a href="postconf.5.html#relay_domains">relay_domains</a>, and <a href="postconf.5.html#relay_recipient_maps">relay_recipient_maps</a> speci-
|
||||
fies a list of lookup tables that does not match the recipient
|
||||
The numerical Postfix SMTP server reply code when a recipient
|
||||
address matches $<a href="postconf.5.html#relay_domains">relay_domains</a>, and <a href="postconf.5.html#relay_recipient_maps">relay_recipient_maps</a> speci-
|
||||
fies a list of lookup tables that does not match the recipient
|
||||
address.
|
||||
|
||||
Parameters concerning known/unknown recipients in virtual alias
|
||||
Parameters concerning known/unknown recipients in virtual alias
|
||||
domains:
|
||||
|
||||
<b><a href="postconf.5.html#virtual_alias_domains">virtual_alias_domains</a> ($<a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a>)</b>
|
||||
Postfix is the final destination for the specified list of vir-
|
||||
Postfix is the final destination for the specified list of vir-
|
||||
tual alias domains, that is, domains for which all addresses are
|
||||
aliased to addresses in other local or remote domains.
|
||||
|
||||
<b><a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a> ($<a href="postconf.5.html#virtual_maps">virtual_maps</a>)</b>
|
||||
Optional lookup tables that are often searched with a full email
|
||||
address (including domain) and that apply to all recipients:
|
||||
<a href="local.8.html"><b>local</b>(8)</a>, virtual, and remote; this is unlike <a href="postconf.5.html#alias_maps">alias_maps</a> that
|
||||
are only searched with an email address localpart (no domain)
|
||||
address (including domain) and that apply to all recipients:
|
||||
<a href="local.8.html"><b>local</b>(8)</a>, virtual, and remote; this is unlike <a href="postconf.5.html#alias_maps">alias_maps</a> that
|
||||
are only searched with an email address localpart (no domain)
|
||||
and that apply only to <a href="local.8.html"><b>local</b>(8)</a> recipients.
|
||||
|
||||
<b><a href="postconf.5.html#unknown_virtual_alias_reject_code">unknown_virtual_alias_reject_code</a> (550)</b>
|
||||
The Postfix SMTP server reply code when a recipient address
|
||||
matches $<a href="postconf.5.html#virtual_alias_domains">virtual_alias_domains</a>, and $<a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a> speci-
|
||||
fies a list of lookup tables that does not match the recipient
|
||||
The Postfix SMTP server reply code when a recipient address
|
||||
matches $<a href="postconf.5.html#virtual_alias_domains">virtual_alias_domains</a>, and $<a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a> speci-
|
||||
fies a list of lookup tables that does not match the recipient
|
||||
address.
|
||||
|
||||
Parameters concerning known/unknown recipients in virtual mailbox
|
||||
domains:
|
||||
|
||||
<b><a href="postconf.5.html#virtual_mailbox_domains">virtual_mailbox_domains</a> ($<a href="postconf.5.html#virtual_mailbox_maps">virtual_mailbox_maps</a>)</b>
|
||||
Postfix is the final destination for the specified list of
|
||||
domains; mail is delivered via the $<a href="postconf.5.html#virtual_transport">virtual_transport</a> mail
|
||||
Postfix is the final destination for the specified list of
|
||||
domains; mail is delivered via the $<a href="postconf.5.html#virtual_transport">virtual_transport</a> mail
|
||||
delivery transport.
|
||||
|
||||
<b><a href="postconf.5.html#virtual_mailbox_maps">virtual_mailbox_maps</a> (empty)</b>
|
||||
Optional lookup tables with all valid addresses in the domains
|
||||
Optional lookup tables with all valid addresses in the domains
|
||||
that match $<a href="postconf.5.html#virtual_mailbox_domains">virtual_mailbox_domains</a>.
|
||||
|
||||
<b><a href="postconf.5.html#unknown_virtual_mailbox_reject_code">unknown_virtual_mailbox_reject_code</a> (550)</b>
|
||||
The Postfix SMTP server reply code when a recipient address
|
||||
matches $<a href="postconf.5.html#virtual_mailbox_domains">virtual_mailbox_domains</a>, and $<a href="postconf.5.html#virtual_mailbox_maps">virtual_mailbox_maps</a>
|
||||
The Postfix SMTP server reply code when a recipient address
|
||||
matches $<a href="postconf.5.html#virtual_mailbox_domains">virtual_mailbox_domains</a>, and $<a href="postconf.5.html#virtual_mailbox_maps">virtual_mailbox_maps</a>
|
||||
specifies a list of lookup tables that does not match the recip-
|
||||
ient address.
|
||||
|
||||
@ -882,7 +889,7 @@ SMTPD(8) SMTPD(8)
|
||||
control client request rates.
|
||||
|
||||
<b><a href="postconf.5.html#line_length_limit">line_length_limit</a> (2048)</b>
|
||||
Upon input, long lines are chopped up into pieces of at most
|
||||
Upon input, long lines are chopped up into pieces of at most
|
||||
this length; upon delivery, long lines are reconstructed.
|
||||
|
||||
<b><a href="postconf.5.html#queue_minfree">queue_minfree</a> (0)</b>
|
||||
@ -890,62 +897,62 @@ SMTPD(8) SMTPD(8)
|
||||
tem that is needed to receive mail.
|
||||
|
||||
<b><a href="postconf.5.html#message_size_limit">message_size_limit</a> (10240000)</b>
|
||||
The maximal size in bytes of a message, including envelope
|
||||
The maximal size in bytes of a message, including envelope
|
||||
information.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_recipient_limit">smtpd_recipient_limit</a> (1000)</b>
|
||||
The maximal number of recipients that the Postfix SMTP server
|
||||
The maximal number of recipients that the Postfix SMTP server
|
||||
accepts per message delivery request.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> (normal: 300s, <a href="STRESS_README.html">overload</a>: 10s)</b>
|
||||
When the Postfix SMTP server wants to send an SMTP server
|
||||
response, how long the Postfix SMTP server will wait for an
|
||||
underlying network write operation to complete; and when the
|
||||
Postfix SMTP server Postfix wants to receive an SMTP client
|
||||
request, how long the Postfix SMTP server will wait for an
|
||||
When the Postfix SMTP server wants to send an SMTP server
|
||||
response, how long the Postfix SMTP server will wait for an
|
||||
underlying network write operation to complete; and when the
|
||||
Postfix SMTP server Postfix wants to receive an SMTP client
|
||||
request, how long the Postfix SMTP server will wait for an
|
||||
underlying network read operation to complete.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_history_flush_threshold">smtpd_history_flush_threshold</a> (100)</b>
|
||||
The maximal number of lines in the Postfix SMTP server command
|
||||
history before it is flushed upon receipt of EHLO, RSET, or end
|
||||
The maximal number of lines in the Postfix SMTP server command
|
||||
history before it is flushed upon receipt of EHLO, RSET, or end
|
||||
of DATA.
|
||||
|
||||
Available in Postfix version 2.3 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_peername_lookup">smtpd_peername_lookup</a> (yes)</b>
|
||||
Attempt to look up the remote SMTP client hostname, and verify
|
||||
Attempt to look up the remote SMTP client hostname, and verify
|
||||
that the name matches the client IP address.
|
||||
|
||||
The per SMTP client connection count and request rate limits are imple-
|
||||
mented in co-operation with the <a href="anvil.8.html"><b>anvil</b>(8)</a> service, and are available in
|
||||
mented in co-operation with the <a href="anvil.8.html"><b>anvil</b>(8)</a> service, and are available in
|
||||
Postfix version 2.2 and later.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_client_connection_count_limit">smtpd_client_connection_count_limit</a> (50)</b>
|
||||
How many simultaneous connections any client is allowed to make
|
||||
How many simultaneous connections any client is allowed to make
|
||||
to this service.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_client_connection_rate_limit">smtpd_client_connection_rate_limit</a> (0)</b>
|
||||
The maximal number of connection attempts any client is allowed
|
||||
The maximal number of connection attempts any client is allowed
|
||||
to make to this service per time unit.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_client_message_rate_limit">smtpd_client_message_rate_limit</a> (0)</b>
|
||||
The maximal number of message delivery requests that any client
|
||||
is allowed to make to this service per time unit, regardless of
|
||||
The maximal number of message delivery requests that any client
|
||||
is allowed to make to this service per time unit, regardless of
|
||||
whether or not Postfix actually accepts those messages.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_client_recipient_rate_limit">smtpd_client_recipient_rate_limit</a> (0)</b>
|
||||
The maximal number of recipient addresses that any client is
|
||||
allowed to send to this service per time unit, regardless of
|
||||
The maximal number of recipient addresses that any client is
|
||||
allowed to send to this service per time unit, regardless of
|
||||
whether or not Postfix actually accepts those recipients.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_client_event_limit_exceptions">smtpd_client_event_limit_exceptions</a> ($<a href="postconf.5.html#mynetworks">mynetworks</a>)</b>
|
||||
Clients that are excluded from smtpd_client_*_count/rate_limit
|
||||
Clients that are excluded from smtpd_client_*_count/rate_limit
|
||||
restrictions.
|
||||
|
||||
Available in Postfix version 2.3 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_client_new_tls_session_rate_limit">smtpd_client_new_tls_session_rate_limit</a> (0)</b>
|
||||
The maximal number of new (i.e., uncached) TLS sessions that a
|
||||
The maximal number of new (i.e., uncached) TLS sessions that a
|
||||
remote SMTP client is allowed to negotiate with this service per
|
||||
time unit.
|
||||
|
||||
@ -953,29 +960,29 @@ SMTPD(8) SMTPD(8)
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_per_record_deadline">smtpd_per_record_deadline</a> (normal: no, <a href="STRESS_README.html">overload</a>: yes)</b>
|
||||
Change the behavior of the <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> and <a href="postconf.5.html#smtpd_starttls_timeout">smtpd_start</a>-
|
||||
<a href="postconf.5.html#smtpd_starttls_timeout">tls_timeout</a> time limits, from a time limit per read or write
|
||||
system call, to a time limit to send or receive a complete
|
||||
record (an SMTP command line, SMTP response line, SMTP message
|
||||
<a href="postconf.5.html#smtpd_starttls_timeout">tls_timeout</a> time limits, from a time limit per read or write
|
||||
system call, to a time limit to send or receive a complete
|
||||
record (an SMTP command line, SMTP response line, SMTP message
|
||||
content line, or TLS protocol message).
|
||||
|
||||
Available in Postfix version 3.1 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_client_auth_rate_limit">smtpd_client_auth_rate_limit</a> (0)</b>
|
||||
The maximal number of AUTH commands that any client is allowed
|
||||
to send to this service per time unit, regardless of whether or
|
||||
The maximal number of AUTH commands that any client is allowed
|
||||
to send to this service per time unit, regardless of whether or
|
||||
not Postfix actually accepts those commands.
|
||||
|
||||
Available in Postfix version 3.7 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_per_request_deadline">smtpd_per_request_deadline</a> (normal: no, <a href="STRESS_README.html">overload</a>: yes)</b>
|
||||
Change the behavior of the <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> and <a href="postconf.5.html#smtpd_starttls_timeout">smtpd_start</a>-
|
||||
<a href="postconf.5.html#smtpd_starttls_timeout">tls_timeout</a> time limits, from a time limit per plaintext or TLS
|
||||
read or write call, to a combined time limit for receiving a
|
||||
complete SMTP request and for sending a complete SMTP response.
|
||||
<a href="postconf.5.html#smtpd_starttls_timeout">tls_timeout</a> time limits, from a time limit per plaintext or TLS
|
||||
read or write call, to a combined time limit for receiving a
|
||||
complete SMTP request and for sending a complete SMTP response.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_min_data_rate">smtpd_min_data_rate</a> (500)</b>
|
||||
The minimum plaintext data transfer rate in bytes/second for
|
||||
DATA and BDAT requests, when deadlines are enabled with
|
||||
The minimum plaintext data transfer rate in bytes/second for
|
||||
DATA and BDAT requests, when deadlines are enabled with
|
||||
<a href="postconf.5.html#smtpd_per_request_deadline">smtpd_per_request_deadline</a>.
|
||||
|
||||
<b><a href="postconf.5.html#header_from_format">header_from_format</a> (standard)</b>
|
||||
@ -984,27 +991,27 @@ SMTPD(8) SMTPD(8)
|
||||
Available in Postfix version 3.8 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_client_ipv4_prefix_length">smtpd_client_ipv4_prefix_length</a> (32)</b>
|
||||
Aggregate smtpd_client_*_count and smtpd_client_*_rate statis-
|
||||
Aggregate smtpd_client_*_count and smtpd_client_*_rate statis-
|
||||
tics by IPv4 network blocks with the specified network prefix.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_client_ipv6_prefix_length">smtpd_client_ipv6_prefix_length</a> (84)</b>
|
||||
Aggregate smtpd_client_*_count and smtpd_client_*_rate statis-
|
||||
Aggregate smtpd_client_*_count and smtpd_client_*_rate statis-
|
||||
tics by IPv6 network blocks with the specified network prefix.
|
||||
|
||||
Available in Postfix 3.9, 3.8.1, 3.7.6, 3.6.10, 3.5.20 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_forbid_unauth_pipelining">smtpd_forbid_unauth_pipelining</a> (Postfix</b> ><b>= 3.9: yes)</b>
|
||||
Disconnect remote SMTP clients that violate <a href="https://tools.ietf.org/html/rfc2920">RFC 2920</a> (or 5321)
|
||||
Disconnect remote SMTP clients that violate <a href="https://tools.ietf.org/html/rfc2920">RFC 2920</a> (or 5321)
|
||||
command pipelining constraints.
|
||||
|
||||
Available in Postfix 3.9, 3.8.4, 3.7.9, 3.6.13, 3.5.23 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_forbid_bare_newline">smtpd_forbid_bare_newline</a> (Postfix</b> ><b>= 3.9: normalize)</b>
|
||||
Reject or restrict input lines from an SMTP client that end in
|
||||
Reject or restrict input lines from an SMTP client that end in
|
||||
<LF> instead of the standard <CR><LF>.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_forbid_bare_newline_exclusions">smtpd_forbid_bare_newline_exclusions</a> ($<a href="postconf.5.html#mynetworks">mynetworks</a>)</b>
|
||||
Exclude the specified clients from <a href="postconf.5.html#smtpd_forbid_bare_newline">smtpd_forbid_bare_newline</a>
|
||||
Exclude the specified clients from <a href="postconf.5.html#smtpd_forbid_bare_newline">smtpd_forbid_bare_newline</a>
|
||||
enforcement.
|
||||
|
||||
Available in Postfix 3.9, 3.8.5, 3.7.10, 3.6.14, 3.5.24 and later:
|
||||
@ -1014,55 +1021,55 @@ SMTPD(8) SMTPD(8)
|
||||
request with "<a href="postconf.5.html#smtpd_forbid_bare_newline">smtpd_forbid_bare_newline</a> = reject".
|
||||
|
||||
<b><a name="tarpit_controls">TARPIT CONTROLS</a></b>
|
||||
When a remote SMTP client makes errors, the Postfix SMTP server can
|
||||
insert delays before responding. This can help to slow down run-away
|
||||
software. The behavior is controlled by an error counter that counts
|
||||
When a remote SMTP client makes errors, the Postfix SMTP server can
|
||||
insert delays before responding. This can help to slow down run-away
|
||||
software. The behavior is controlled by an error counter that counts
|
||||
the number of errors within an SMTP session that a client makes without
|
||||
delivering mail.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_error_sleep_time">smtpd_error_sleep_time</a> (1s)</b>
|
||||
With Postfix version 2.1 and later: the SMTP server response
|
||||
delay after a client has made more than $<a href="postconf.5.html#smtpd_soft_error_limit">smtpd_soft_error_limit</a>
|
||||
errors, and fewer than $<a href="postconf.5.html#smtpd_hard_error_limit">smtpd_hard_error_limit</a> errors, without
|
||||
With Postfix version 2.1 and later: the SMTP server response
|
||||
delay after a client has made more than $<a href="postconf.5.html#smtpd_soft_error_limit">smtpd_soft_error_limit</a>
|
||||
errors, and fewer than $<a href="postconf.5.html#smtpd_hard_error_limit">smtpd_hard_error_limit</a> errors, without
|
||||
delivering mail.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_soft_error_limit">smtpd_soft_error_limit</a> (10)</b>
|
||||
The number of errors a remote SMTP client is allowed to make
|
||||
without delivering mail before the Postfix SMTP server slows
|
||||
The number of errors a remote SMTP client is allowed to make
|
||||
without delivering mail before the Postfix SMTP server slows
|
||||
down all its responses.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_hard_error_limit">smtpd_hard_error_limit</a> (normal: 20, <a href="STRESS_README.html">overload</a>: 1)</b>
|
||||
The maximal number of errors a remote SMTP client is allowed to
|
||||
The maximal number of errors a remote SMTP client is allowed to
|
||||
make without delivering mail.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_junk_command_limit">smtpd_junk_command_limit</a> (normal: 100, <a href="STRESS_README.html">overload</a>: 1)</b>
|
||||
The number of junk commands (NOOP, VRFY, ETRN or RSET) that a
|
||||
remote SMTP client can send before the Postfix SMTP server
|
||||
The number of junk commands (NOOP, VRFY, ETRN or RSET) that a
|
||||
remote SMTP client can send before the Postfix SMTP server
|
||||
starts to increment the error counter with each junk command.
|
||||
|
||||
Available in Postfix version 2.1 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_recipient_overshoot_limit">smtpd_recipient_overshoot_limit</a> (1000)</b>
|
||||
The number of recipients that a remote SMTP client can send in
|
||||
The number of recipients that a remote SMTP client can send in
|
||||
excess of the limit specified with $<a href="postconf.5.html#smtpd_recipient_limit">smtpd_recipient_limit</a>,
|
||||
before the Postfix SMTP server increments the per-session error
|
||||
before the Postfix SMTP server increments the per-session error
|
||||
count for each excess recipient.
|
||||
|
||||
<b><a name="access_policy_delegation_controls">ACCESS POLICY DELEGATION CONTROLS</a></b>
|
||||
As of version 2.1, Postfix can be configured to delegate access policy
|
||||
decisions to an external server that runs outside Postfix. See the
|
||||
As of version 2.1, Postfix can be configured to delegate access policy
|
||||
decisions to an external server that runs outside Postfix. See the
|
||||
file <a href="SMTPD_POLICY_README.html">SMTPD_POLICY_README</a> for more information.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_policy_service_max_idle">smtpd_policy_service_max_idle</a> (300s)</b>
|
||||
The time after which an idle SMTPD policy service connection is
|
||||
The time after which an idle SMTPD policy service connection is
|
||||
closed.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_policy_service_max_ttl">smtpd_policy_service_max_ttl</a> (1000s)</b>
|
||||
The time after which an active SMTPD policy service connection
|
||||
The time after which an active SMTPD policy service connection
|
||||
is closed.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_policy_service_timeout">smtpd_policy_service_timeout</a> (100s)</b>
|
||||
The time limit for connecting to, writing to, or receiving from
|
||||
The time limit for connecting to, writing to, or receiving from
|
||||
a delegated SMTPD policy server.
|
||||
|
||||
Available in Postfix version 3.0 and later:
|
||||
@ -1072,81 +1079,81 @@ SMTPD(8) SMTPD(8)
|
||||
The default action when an SMTPD policy service request fails.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_policy_service_request_limit">smtpd_policy_service_request_limit</a> (0)</b>
|
||||
The maximal number of requests per SMTPD policy service connec-
|
||||
The maximal number of requests per SMTPD policy service connec-
|
||||
tion, or zero (no limit).
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_policy_service_try_limit">smtpd_policy_service_try_limit</a> (2)</b>
|
||||
The maximal number of attempts to send an SMTPD policy service
|
||||
The maximal number of attempts to send an SMTPD policy service
|
||||
request before giving up.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_policy_service_retry_delay">smtpd_policy_service_retry_delay</a> (1s)</b>
|
||||
The delay between attempts to resend a failed SMTPD policy ser-
|
||||
The delay between attempts to resend a failed SMTPD policy ser-
|
||||
vice request.
|
||||
|
||||
Available in Postfix version 3.1 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_policy_service_policy_context">smtpd_policy_service_policy_context</a> (empty)</b>
|
||||
Optional information that the Postfix SMTP server specifies in
|
||||
the "policy_context" attribute of a policy service request
|
||||
(originally, to share the same service endpoint among multiple
|
||||
Optional information that the Postfix SMTP server specifies in
|
||||
the "policy_context" attribute of a policy service request
|
||||
(originally, to share the same service endpoint among multiple
|
||||
<a href="postconf.5.html#check_policy_service">check_policy_service</a> clients).
|
||||
|
||||
<b><a name="access_controls">ACCESS CONTROLS</a></b>
|
||||
The <a href="SMTPD_ACCESS_README.html">SMTPD_ACCESS_README</a> document gives an introduction to all the SMTP
|
||||
The <a href="SMTPD_ACCESS_README.html">SMTPD_ACCESS_README</a> document gives an introduction to all the SMTP
|
||||
server access control features.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_delay_reject">smtpd_delay_reject</a> (yes)</b>
|
||||
Wait until the RCPT TO command before evaluating
|
||||
Wait until the RCPT TO command before evaluating
|
||||
$<a href="postconf.5.html#smtpd_client_restrictions">smtpd_client_restrictions</a>, $<a href="postconf.5.html#smtpd_helo_restrictions">smtpd_helo_restrictions</a> and
|
||||
$<a href="postconf.5.html#smtpd_sender_restrictions">smtpd_sender_restrictions</a>, or wait until the ETRN command
|
||||
before evaluating $<a href="postconf.5.html#smtpd_client_restrictions">smtpd_client_restrictions</a> and
|
||||
before evaluating $<a href="postconf.5.html#smtpd_client_restrictions">smtpd_client_restrictions</a> and
|
||||
$<a href="postconf.5.html#smtpd_helo_restrictions">smtpd_helo_restrictions</a>.
|
||||
|
||||
<b><a href="postconf.5.html#parent_domain_matches_subdomains">parent_domain_matches_subdomains</a> (see 'postconf -d' output)</b>
|
||||
A list of Postfix features where the pattern "example.com" also
|
||||
matches subdomains of example.com, instead of requiring an
|
||||
A list of Postfix features where the pattern "example.com" also
|
||||
matches subdomains of example.com, instead of requiring an
|
||||
explicit ".example.com" pattern.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_client_restrictions">smtpd_client_restrictions</a> (empty)</b>
|
||||
Optional restrictions that the Postfix SMTP server applies in
|
||||
Optional restrictions that the Postfix SMTP server applies in
|
||||
the context of a client connection request.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_helo_required">smtpd_helo_required</a> (no)</b>
|
||||
Require that a remote SMTP client introduces itself with the
|
||||
HELO or EHLO command before sending the MAIL command or other
|
||||
Require that a remote SMTP client introduces itself with the
|
||||
HELO or EHLO command before sending the MAIL command or other
|
||||
commands that require EHLO negotiation.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_helo_restrictions">smtpd_helo_restrictions</a> (empty)</b>
|
||||
Optional restrictions that the Postfix SMTP server applies in
|
||||
Optional restrictions that the Postfix SMTP server applies in
|
||||
the context of a client HELO command.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_sender_restrictions">smtpd_sender_restrictions</a> (empty)</b>
|
||||
Optional restrictions that the Postfix SMTP server applies in
|
||||
Optional restrictions that the Postfix SMTP server applies in
|
||||
the context of a client MAIL FROM command.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_recipient_restrictions">smtpd_recipient_restrictions</a> (see 'postconf -d' output)</b>
|
||||
Optional restrictions that the Postfix SMTP server applies in
|
||||
the context of a client RCPT TO command, after
|
||||
Optional restrictions that the Postfix SMTP server applies in
|
||||
the context of a client RCPT TO command, after
|
||||
<a href="postconf.5.html#smtpd_relay_restrictions">smtpd_relay_restrictions</a>.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_etrn_restrictions">smtpd_etrn_restrictions</a> (empty)</b>
|
||||
Optional restrictions that the Postfix SMTP server applies in
|
||||
Optional restrictions that the Postfix SMTP server applies in
|
||||
the context of a client ETRN command.
|
||||
|
||||
<b><a href="postconf.5.html#allow_untrusted_routing">allow_untrusted_routing</a> (no)</b>
|
||||
Forward mail with sender-specified routing
|
||||
(user[@%!]remote[@%!]site) from untrusted clients to destina-
|
||||
Forward mail with sender-specified routing
|
||||
(user[@%!]remote[@%!]site) from untrusted clients to destina-
|
||||
tions matching $<a href="postconf.5.html#relay_domains">relay_domains</a>.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_restriction_classes">smtpd_restriction_classes</a> (empty)</b>
|
||||
User-defined aliases for groups of access restrictions.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_null_access_lookup_key">smtpd_null_access_lookup_key</a> (</b><><b>)</b>
|
||||
The lookup key to be used in SMTP <a href="access.5.html"><b>access</b>(5)</a> tables instead of
|
||||
The lookup key to be used in SMTP <a href="access.5.html"><b>access</b>(5)</a> tables instead of
|
||||
the null sender address.
|
||||
|
||||
<b><a href="postconf.5.html#permit_mx_backup_networks">permit_mx_backup_networks</a> (empty)</b>
|
||||
Restrict the use of the <a href="postconf.5.html#permit_mx_backup">permit_mx_backup</a> SMTP access feature to
|
||||
Restrict the use of the <a href="postconf.5.html#permit_mx_backup">permit_mx_backup</a> SMTP access feature to
|
||||
only domains whose primary MX hosts match the listed networks.
|
||||
|
||||
Available in Postfix version 2.0 and later:
|
||||
@ -1156,19 +1163,19 @@ SMTPD(8) SMTPD(8)
|
||||
applies in the context of the SMTP DATA command.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_expansion_filter">smtpd_expansion_filter</a> (see 'postconf -d' output)</b>
|
||||
What characters are allowed in $name expansions of RBL reply
|
||||
What characters are allowed in $name expansions of RBL reply
|
||||
templates.
|
||||
|
||||
Available in Postfix version 2.1 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_reject_unlisted_sender">smtpd_reject_unlisted_sender</a> (no)</b>
|
||||
Request that the Postfix SMTP server rejects mail from unknown
|
||||
sender addresses, even when no explicit <a href="postconf.5.html#reject_unlisted_sender">reject_unlisted_sender</a>
|
||||
Request that the Postfix SMTP server rejects mail from unknown
|
||||
sender addresses, even when no explicit <a href="postconf.5.html#reject_unlisted_sender">reject_unlisted_sender</a>
|
||||
access restriction is specified.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_reject_unlisted_recipient">smtpd_reject_unlisted_recipient</a> (yes)</b>
|
||||
Request that the Postfix SMTP server rejects mail for unknown
|
||||
recipient addresses, even when no explicit
|
||||
Request that the Postfix SMTP server rejects mail for unknown
|
||||
recipient addresses, even when no explicit
|
||||
<a href="postconf.5.html#reject_unlisted_recipient">reject_unlisted_recipient</a> access restriction is specified.
|
||||
|
||||
Available in Postfix version 2.2 and later:
|
||||
@ -1182,17 +1189,17 @@ SMTPD(8) SMTPD(8)
|
||||
<b><a href="postconf.5.html#smtpd_relay_restrictions">smtpd_relay_restrictions</a> (<a href="postconf.5.html#permit_mynetworks">permit_mynetworks</a>, <a href="postconf.5.html#permit_sasl_authenticated">permit_sasl_authenticated</a>,</b>
|
||||
<b><a href="postconf.5.html#defer_unauth_destination">defer_unauth_destination</a>)</b>
|
||||
Access restrictions for mail relay control that the Postfix SMTP
|
||||
server applies in the context of the RCPT TO command, before
|
||||
server applies in the context of the RCPT TO command, before
|
||||
<a href="postconf.5.html#smtpd_recipient_restrictions">smtpd_recipient_restrictions</a>.
|
||||
|
||||
<b><a name="sender_and_recipient_address_verification_controls">SENDER AND RECIPIENT ADDRESS VERIFICATION CONTROLS</a></b>
|
||||
Postfix version 2.1 introduces sender and recipient address verifica-
|
||||
Postfix version 2.1 introduces sender and recipient address verifica-
|
||||
tion. This feature is implemented by sending probe email messages that
|
||||
are not actually delivered. This feature is requested via the
|
||||
<a href="postconf.5.html#reject_unverified_sender">reject_unverified_sender</a> and <a href="postconf.5.html#reject_unverified_recipient">reject_unverified_recipient</a> access
|
||||
restrictions. The status of verification probes is maintained by the
|
||||
<a href="verify.8.html"><b>verify</b>(8)</a> server. See the file <a href="ADDRESS_VERIFICATION_README.html">ADDRESS_VERIFICATION_README</a> for infor-
|
||||
mation about how to configure and operate the Postfix sender/recipient
|
||||
<a href="postconf.5.html#reject_unverified_sender">reject_unverified_sender</a> and <a href="postconf.5.html#reject_unverified_recipient">reject_unverified_recipient</a> access
|
||||
restrictions. The status of verification probes is maintained by the
|
||||
<a href="verify.8.html"><b>verify</b>(8)</a> server. See the file <a href="ADDRESS_VERIFICATION_README.html">ADDRESS_VERIFICATION_README</a> for infor-
|
||||
mation about how to configure and operate the Postfix sender/recipient
|
||||
address verification service.
|
||||
|
||||
<b><a href="postconf.5.html#address_verify_poll_count">address_verify_poll_count</a> (normal: 3, <a href="STRESS_README.html">overload</a>: 1)</b>
|
||||
@ -1204,7 +1211,7 @@ SMTPD(8) SMTPD(8)
|
||||
fication request in progress.
|
||||
|
||||
<b><a href="postconf.5.html#address_verify_sender">address_verify_sender</a> ($<a href="postconf.5.html#double_bounce_sender">double_bounce_sender</a>)</b>
|
||||
The sender address to use in address verification probes; prior
|
||||
The sender address to use in address verification probes; prior
|
||||
to Postfix 2.5 the default was "postmaster".
|
||||
|
||||
<b><a href="postconf.5.html#unverified_sender_reject_code">unverified_sender_reject_code</a> (450)</b>
|
||||
@ -1212,18 +1219,18 @@ SMTPD(8) SMTPD(8)
|
||||
address is rejected by the <a href="postconf.5.html#reject_unverified_sender">reject_unverified_sender</a> restriction.
|
||||
|
||||
<b><a href="postconf.5.html#unverified_recipient_reject_code">unverified_recipient_reject_code</a> (450)</b>
|
||||
The numerical Postfix SMTP server response when a recipient
|
||||
address is rejected by the <a href="postconf.5.html#reject_unverified_recipient">reject_unverified_recipient</a> restric-
|
||||
The numerical Postfix SMTP server response when a recipient
|
||||
address is rejected by the <a href="postconf.5.html#reject_unverified_recipient">reject_unverified_recipient</a> restric-
|
||||
tion.
|
||||
|
||||
Available in Postfix version 2.6 and later:
|
||||
|
||||
<b><a href="postconf.5.html#unverified_sender_defer_code">unverified_sender_defer_code</a> (450)</b>
|
||||
The numerical Postfix SMTP server response code when a sender
|
||||
The numerical Postfix SMTP server response code when a sender
|
||||
address probe fails due to a temporary error condition.
|
||||
|
||||
<b><a href="postconf.5.html#unverified_recipient_defer_code">unverified_recipient_defer_code</a> (450)</b>
|
||||
The numerical Postfix SMTP server response when a recipient
|
||||
The numerical Postfix SMTP server response when a recipient
|
||||
address probe fails due to a temporary error condition.
|
||||
|
||||
<b><a href="postconf.5.html#unverified_sender_reject_reason">unverified_sender_reject_reason</a> (empty)</b>
|
||||
@ -1235,17 +1242,17 @@ SMTPD(8) SMTPD(8)
|
||||
<a href="postconf.5.html#reject_unverified_recipient">reject_unverified_recipient</a>.
|
||||
|
||||
<b><a href="postconf.5.html#unverified_sender_tempfail_action">unverified_sender_tempfail_action</a> ($<a href="postconf.5.html#reject_tempfail_action">reject_tempfail_action</a>)</b>
|
||||
The Postfix SMTP server's action when <a href="postconf.5.html#reject_unverified_sender">reject_unverified_sender</a>
|
||||
The Postfix SMTP server's action when <a href="postconf.5.html#reject_unverified_sender">reject_unverified_sender</a>
|
||||
fails due to a temporary error condition.
|
||||
|
||||
<b><a href="postconf.5.html#unverified_recipient_tempfail_action">unverified_recipient_tempfail_action</a> ($<a href="postconf.5.html#reject_tempfail_action">reject_tempfail_action</a>)</b>
|
||||
The Postfix SMTP server's action when <a href="postconf.5.html#reject_unverified_recipient">reject_unverified_recipi</a>-
|
||||
The Postfix SMTP server's action when <a href="postconf.5.html#reject_unverified_recipient">reject_unverified_recipi</a>-
|
||||
<a href="postconf.5.html#reject_unverified_recipient">ent</a> fails due to a temporary error condition.
|
||||
|
||||
Available with Postfix 2.9 and later:
|
||||
|
||||
<b><a href="postconf.5.html#address_verify_sender_ttl">address_verify_sender_ttl</a> (0s)</b>
|
||||
The time between changes in the time-dependent portion of
|
||||
The time between changes in the time-dependent portion of
|
||||
address verification probe sender addresses.
|
||||
|
||||
<b><a name="access_control_responses">ACCESS CONTROL RESPONSES</a></b>
|
||||
@ -1257,36 +1264,36 @@ SMTPD(8) SMTPD(8)
|
||||
map "reject" action.
|
||||
|
||||
<b><a href="postconf.5.html#defer_code">defer_code</a> (450)</b>
|
||||
The numerical Postfix SMTP server response code when a remote
|
||||
The numerical Postfix SMTP server response code when a remote
|
||||
SMTP client request is rejected by the "defer" restriction.
|
||||
|
||||
<b><a href="postconf.5.html#invalid_hostname_reject_code">invalid_hostname_reject_code</a> (501)</b>
|
||||
The numerical Postfix SMTP server response code when the client
|
||||
HELO or EHLO command parameter is rejected by the
|
||||
The numerical Postfix SMTP server response code when the client
|
||||
HELO or EHLO command parameter is rejected by the
|
||||
<a href="postconf.5.html#reject_invalid_helo_hostname">reject_invalid_helo_hostname</a> restriction.
|
||||
|
||||
<b><a href="postconf.5.html#maps_rbl_reject_code">maps_rbl_reject_code</a> (554)</b>
|
||||
The numerical Postfix SMTP server response code when a remote
|
||||
SMTP client request is blocked by the <a href="postconf.5.html#reject_rbl_client">reject_rbl_client</a>,
|
||||
The numerical Postfix SMTP server response code when a remote
|
||||
SMTP client request is blocked by the <a href="postconf.5.html#reject_rbl_client">reject_rbl_client</a>,
|
||||
<a href="postconf.5.html#reject_rhsbl_client">reject_rhsbl_client</a>, <a href="postconf.5.html#reject_rhsbl_reverse_client">reject_rhsbl_reverse_client</a>,
|
||||
<a href="postconf.5.html#reject_rhsbl_sender">reject_rhsbl_sender</a> or <a href="postconf.5.html#reject_rhsbl_recipient">reject_rhsbl_recipient</a> restriction.
|
||||
|
||||
<b><a href="postconf.5.html#non_fqdn_reject_code">non_fqdn_reject_code</a> (504)</b>
|
||||
The numerical Postfix SMTP server reply code when a client
|
||||
request is rejected by the <a href="postconf.5.html#reject_non_fqdn_helo_hostname">reject_non_fqdn_helo_hostname</a>,
|
||||
The numerical Postfix SMTP server reply code when a client
|
||||
request is rejected by the <a href="postconf.5.html#reject_non_fqdn_helo_hostname">reject_non_fqdn_helo_hostname</a>,
|
||||
<a href="postconf.5.html#reject_non_fqdn_sender">reject_non_fqdn_sender</a> or <a href="postconf.5.html#reject_non_fqdn_recipient">reject_non_fqdn_recipient</a> restriction.
|
||||
|
||||
<b><a href="postconf.5.html#plaintext_reject_code">plaintext_reject_code</a> (450)</b>
|
||||
The numerical Postfix SMTP server response code when a request
|
||||
The numerical Postfix SMTP server response code when a request
|
||||
is rejected by the <b><a href="postconf.5.html#reject_plaintext_session">reject_plaintext_session</a></b> restriction.
|
||||
|
||||
<b><a href="postconf.5.html#reject_code">reject_code</a> (554)</b>
|
||||
The numerical Postfix SMTP server response code when a remote
|
||||
The numerical Postfix SMTP server response code when a remote
|
||||
SMTP client request is rejected by the "reject" restriction.
|
||||
|
||||
<b><a href="postconf.5.html#relay_domains_reject_code">relay_domains_reject_code</a> (554)</b>
|
||||
The numerical Postfix SMTP server response code when a client
|
||||
request is rejected by the <a href="postconf.5.html#reject_unauth_destination">reject_unauth_destination</a> recipient
|
||||
The numerical Postfix SMTP server response code when a client
|
||||
request is rejected by the <a href="postconf.5.html#reject_unauth_destination">reject_unauth_destination</a> recipient
|
||||
restriction.
|
||||
|
||||
<b><a href="postconf.5.html#unknown_address_reject_code">unknown_address_reject_code</a> (450)</b>
|
||||
@ -1294,24 +1301,24 @@ SMTPD(8) SMTPD(8)
|
||||
a sender or recipient address because its domain is unknown.
|
||||
|
||||
<b><a href="postconf.5.html#unknown_client_reject_code">unknown_client_reject_code</a> (450)</b>
|
||||
The numerical Postfix SMTP server response code when a client
|
||||
without valid address <=> name mapping is rejected by the
|
||||
The numerical Postfix SMTP server response code when a client
|
||||
without valid address <=> name mapping is rejected by the
|
||||
<a href="postconf.5.html#reject_unknown_client_hostname">reject_unknown_client_hostname</a> restriction.
|
||||
|
||||
<b><a href="postconf.5.html#unknown_hostname_reject_code">unknown_hostname_reject_code</a> (450)</b>
|
||||
The numerical Postfix SMTP server response code when the host-
|
||||
name specified with the HELO or EHLO command is rejected by the
|
||||
The numerical Postfix SMTP server response code when the host-
|
||||
name specified with the HELO or EHLO command is rejected by the
|
||||
<a href="postconf.5.html#reject_unknown_helo_hostname">reject_unknown_helo_hostname</a> restriction.
|
||||
|
||||
Available in Postfix version 2.0 and later:
|
||||
|
||||
<b><a href="postconf.5.html#default_rbl_reply">default_rbl_reply</a> (see 'postconf -d' output)</b>
|
||||
The default Postfix SMTP server response template for a request
|
||||
The default Postfix SMTP server response template for a request
|
||||
that is rejected by an RBL-based restriction.
|
||||
|
||||
<b><a href="postconf.5.html#multi_recipient_bounce_reject_code">multi_recipient_bounce_reject_code</a> (550)</b>
|
||||
The numerical Postfix SMTP server response code when a remote
|
||||
SMTP client request is blocked by the <a href="postconf.5.html#reject_multi_recipient_bounce">reject_multi_recipi</a>-
|
||||
The numerical Postfix SMTP server response code when a remote
|
||||
SMTP client request is blocked by the <a href="postconf.5.html#reject_multi_recipient_bounce">reject_multi_recipi</a>-
|
||||
<a href="postconf.5.html#reject_multi_recipient_bounce">ent_bounce</a> restriction.
|
||||
|
||||
<b><a href="postconf.5.html#rbl_reply_maps">rbl_reply_maps</a> (empty)</b>
|
||||
@ -1321,52 +1328,52 @@ SMTPD(8) SMTPD(8)
|
||||
|
||||
<b><a href="postconf.5.html#access_map_defer_code">access_map_defer_code</a> (450)</b>
|
||||
The numerical Postfix SMTP server response code for an <a href="access.5.html"><b>access</b>(5)</a>
|
||||
map "defer" action, including "<a href="postconf.5.html#defer_if_permit">defer_if_permit</a>" or
|
||||
map "defer" action, including "<a href="postconf.5.html#defer_if_permit">defer_if_permit</a>" or
|
||||
"<a href="postconf.5.html#defer_if_reject">defer_if_reject</a>".
|
||||
|
||||
<b><a href="postconf.5.html#reject_tempfail_action">reject_tempfail_action</a> (<a href="postconf.5.html#defer_if_permit">defer_if_permit</a>)</b>
|
||||
The Postfix SMTP server's action when a reject-type restriction
|
||||
The Postfix SMTP server's action when a reject-type restriction
|
||||
fails due to a temporary error condition.
|
||||
|
||||
<b><a href="postconf.5.html#unknown_helo_hostname_tempfail_action">unknown_helo_hostname_tempfail_action</a> ($<a href="postconf.5.html#reject_tempfail_action">reject_tempfail_action</a>)</b>
|
||||
The Postfix SMTP server's action when <a href="postconf.5.html#reject_unknown_helo_hostname">reject_unknown_helo_host</a>-
|
||||
The Postfix SMTP server's action when <a href="postconf.5.html#reject_unknown_helo_hostname">reject_unknown_helo_host</a>-
|
||||
<a href="postconf.5.html#reject_unknown_helo_hostname">name</a> fails due to a temporary error condition.
|
||||
|
||||
<b><a href="postconf.5.html#unknown_address_tempfail_action">unknown_address_tempfail_action</a> ($<a href="postconf.5.html#reject_tempfail_action">reject_tempfail_action</a>)</b>
|
||||
The Postfix SMTP server's action when
|
||||
<a href="postconf.5.html#reject_unknown_sender_domain">reject_unknown_sender_domain</a> or <a href="postconf.5.html#reject_unknown_recipient_domain">reject_unknown_recipient_domain</a>
|
||||
The Postfix SMTP server's action when
|
||||
<a href="postconf.5.html#reject_unknown_sender_domain">reject_unknown_sender_domain</a> or <a href="postconf.5.html#reject_unknown_recipient_domain">reject_unknown_recipient_domain</a>
|
||||
fail due to a temporary error condition.
|
||||
|
||||
<b><a name="miscellaneous_controls">MISCELLANEOUS CONTROLS</a></b>
|
||||
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
|
||||
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and <a href="master.5.html">master.cf</a> con-
|
||||
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and <a href="master.5.html">master.cf</a> con-
|
||||
figuration files.
|
||||
|
||||
<b><a href="postconf.5.html#daemon_timeout">daemon_timeout</a> (18000s)</b>
|
||||
How much time a Postfix daemon process may take to handle a
|
||||
How much time a Postfix daemon process may take to handle a
|
||||
request before it is terminated by a built-in watchdog timer.
|
||||
|
||||
<b><a href="postconf.5.html#command_directory">command_directory</a> (see 'postconf -d' output)</b>
|
||||
The location of all postfix administrative commands.
|
||||
|
||||
<b><a href="postconf.5.html#double_bounce_sender">double_bounce_sender</a> (double-bounce)</b>
|
||||
The sender address of postmaster notifications that are gener-
|
||||
The sender address of postmaster notifications that are gener-
|
||||
ated by the mail system.
|
||||
|
||||
<b><a href="postconf.5.html#ipc_timeout">ipc_timeout</a> (3600s)</b>
|
||||
The time limit for sending or receiving information over an
|
||||
The time limit for sending or receiving information over an
|
||||
internal communication channel.
|
||||
|
||||
<b><a href="postconf.5.html#mail_name">mail_name</a> (Postfix)</b>
|
||||
The mail system name that is displayed in Received: headers, in
|
||||
The mail system name that is displayed in Received: headers, in
|
||||
the SMTP greeting banner, and in bounced mail.
|
||||
|
||||
<b><a href="postconf.5.html#mail_owner">mail_owner</a> (postfix)</b>
|
||||
The UNIX system account that owns the Postfix queue and most
|
||||
The UNIX system account that owns the Postfix queue and most
|
||||
Postfix daemon processes.
|
||||
|
||||
<b><a href="postconf.5.html#max_idle">max_idle</a> (100s)</b>
|
||||
The maximum amount of time that an idle Postfix daemon process
|
||||
The maximum amount of time that an idle Postfix daemon process
|
||||
waits for an incoming connection before terminating voluntarily.
|
||||
|
||||
<b><a href="postconf.5.html#max_use">max_use</a> (100)</b>
|
||||
@ -1377,11 +1384,11 @@ SMTPD(8) SMTPD(8)
|
||||
The internet hostname of this mail system.
|
||||
|
||||
<b><a href="postconf.5.html#mynetworks">mynetworks</a> (see 'postconf -d' output)</b>
|
||||
The list of "trusted" remote SMTP clients that have more privi-
|
||||
The list of "trusted" remote SMTP clients that have more privi-
|
||||
leges than "strangers".
|
||||
|
||||
<b><a href="postconf.5.html#myorigin">myorigin</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
|
||||
The domain name that locally-posted mail appears to come from,
|
||||
The domain name that locally-posted mail appears to come from,
|
||||
and that locally posted mail is delivered to.
|
||||
|
||||
<b><a href="postconf.5.html#process_id">process_id</a> (read-only)</b>
|
||||
@ -1394,24 +1401,24 @@ SMTPD(8) SMTPD(8)
|
||||
The location of the Postfix top-level queue directory.
|
||||
|
||||
<b><a href="postconf.5.html#recipient_delimiter">recipient_delimiter</a> (empty)</b>
|
||||
The set of characters that can separate an email address local-
|
||||
The set of characters that can separate an email address local-
|
||||
part, user name, or a .forward file name from its extension.
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_banner">smtpd_banner</a> ($<a href="postconf.5.html#myhostname">myhostname</a> ESMTP $<a href="postconf.5.html#mail_name">mail_name</a>)</b>
|
||||
The text that follows the 220 status code in the SMTP greeting
|
||||
The text that follows the 220 status code in the SMTP greeting
|
||||
banner.
|
||||
|
||||
<b><a href="postconf.5.html#syslog_facility">syslog_facility</a> (mail)</b>
|
||||
The syslog facility of Postfix logging.
|
||||
|
||||
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (see 'postconf -d' output)</b>
|
||||
A prefix that is prepended to the process name in syslog
|
||||
A prefix that is prepended to the process name in syslog
|
||||
records, so that, for example, "smtpd" becomes "prefix/smtpd".
|
||||
|
||||
Available in Postfix version 2.2 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_forbidden_commands">smtpd_forbidden_commands</a> (CONNECT GET POST <a href="regexp_table.5.html">regexp</a>:{{/^[^A-Z]/ Bogus}})</b>
|
||||
List of commands that cause the Postfix SMTP server to immedi-
|
||||
List of commands that cause the Postfix SMTP server to immedi-
|
||||
ately terminate the session with a 221 code.
|
||||
|
||||
Available in Postfix version 2.5 and later:
|
||||
@ -1428,13 +1435,13 @@ SMTPD(8) SMTPD(8)
|
||||
Available in Postfix 3.4 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_reject_footer_maps">smtpd_reject_footer_maps</a> (empty)</b>
|
||||
Lookup tables, indexed by the complete Postfix SMTP server 4xx
|
||||
Lookup tables, indexed by the complete Postfix SMTP server 4xx
|
||||
or 5xx response, with reject footer templates.
|
||||
|
||||
Available in Postfix 3.10 and later:
|
||||
|
||||
<b><a href="postconf.5.html#smtpd_hide_client_session">smtpd_hide_client_session</a> (no)</b>
|
||||
Do not include SMTP client session information in the Postfix
|
||||
Do not include SMTP client session information in the Postfix
|
||||
SMTP server's Received: message header.
|
||||
|
||||
<b><a name="see_also">SEE ALSO</a></b>
|
||||
|
@ -979,7 +979,7 @@ CCARGS="$CCARGS -DSNAPSHOT"
|
||||
|
||||
# Non-production: needs thorough testing, or major changes are still
|
||||
# needed before the code stabilizes.
|
||||
#CCARGS="$CCARGS -DNONPROD"
|
||||
CCARGS="$CCARGS -DNONPROD"
|
||||
|
||||
# Workaround: prepend Postfix include files before other include files.
|
||||
CCARGS="-I. -I../../include $CCARGS"
|
||||
|
@ -158,10 +158,28 @@ Delivery status notification control. Specify either a
|
||||
comma\-separated list with one or more of \fBfailure\fR (send
|
||||
notification when delivery fails), \fBdelay\fR (send
|
||||
notification when delivery is delayed), or \fBsuccess\fR
|
||||
(send notification when the message is delivered); or specify
|
||||
(send notification after the message is delivered); or specify
|
||||
\fBnever\fR (don't send any notifications at all).
|
||||
|
||||
This feature is available in Postfix 2.3 and later.
|
||||
.IP "\fB\-O requiretls"
|
||||
When delivering a message to an SMTP or LMTP server, the
|
||||
connection must use TLS with a verified server certificate,
|
||||
and the server must support REQUIRETLS. Try multiple servers if
|
||||
possible, and return the message as undeliverable when these
|
||||
requirements were not satisfied with any of the servers that
|
||||
were tried. The "requiretls" option value is case\-insensitive.
|
||||
|
||||
This feature is available in Postfix 3.10 and later.
|
||||
.IP "\fB\-O smtputf8"
|
||||
When delivering a message to an SMTP or LMTP server, the server
|
||||
must support SMTPUTF8. Try multiple servers if possible, and
|
||||
return the message as undeliverable when a message contains an
|
||||
UTF8 envelope address or message header, but SMTPUTF8 was not
|
||||
supported by any of the servers that were tried. The "smtputf8"
|
||||
option value is case\-insensitive.
|
||||
|
||||
This feature is available in Postfix 3.10 and later.
|
||||
.IP "\fB\-n\fR (ignored)"
|
||||
Backwards compatibility.
|
||||
.IP "\fB\-oA\fIalias_database\fR"
|
||||
@ -462,6 +480,11 @@ these directories belong to additional Postfix instances that share
|
||||
the Postfix executable files and documentation with the default
|
||||
Postfix instance, and that are started, stopped, etc., together
|
||||
with the default Postfix instance.
|
||||
.PP
|
||||
Postfix 3.10 and later:
|
||||
.IP "\fBrequiretls_enable (yes)\fR"
|
||||
Enable support for the ESMTP verb "REQUIRETLS", defined in RFC
|
||||
8689.
|
||||
.SH "FILES"
|
||||
.na
|
||||
.nf
|
||||
|
@ -3136,6 +3136,11 @@ The LMTP\-specific version of the smtp_dns_support_level
|
||||
configuration parameter. See there for details.
|
||||
.PP
|
||||
This feature is available in Postfix 2.11 and later.
|
||||
.SH lmtp_enforce_requiretls (default: empty)
|
||||
The LMTP\-specific version of the smtp_enforce_requiretls
|
||||
configuration parameter. See there for details.
|
||||
.PP
|
||||
This feature is available in Postfix >= 3.10.
|
||||
.SH lmtp_enforce_tls (default: no)
|
||||
The LMTP\-specific version of the smtp_enforce_tls configuration
|
||||
parameter. See there for details.
|
||||
@ -5046,6 +5051,10 @@ postscreen_access_list
|
||||
.IP "Postfix version 3.0 and later"
|
||||
smtpd_client_event_limit_exceptions
|
||||
.br
|
||||
.IP "Postfix version 3.10 and later"
|
||||
smtp_enforce_requiretls,
|
||||
lmtp_enforce_requiretls
|
||||
.br
|
||||
.br
|
||||
.SH permit_mx_backup_networks (default: empty)
|
||||
Restrict the use of the permit_mx_backup SMTP access feature to
|
||||
@ -6578,6 +6587,28 @@ Require that a \fBlocal\fR(8) recipient's home directory exists
|
||||
before mail delivery is attempted. By default this test is disabled.
|
||||
It can be useful for environments that import home directories to
|
||||
the mail server (IMPORTING HOME DIRECTORIES IS NOT RECOMMENDED).
|
||||
.SH requiretls_enable (default: yes)
|
||||
Enable support for the ESMTP verb "REQUIRETLS", defined in RFC
|
||||
8689. By issuing this verb in the "MAIL FROM" command, a sender
|
||||
specifies that a message must be delivered over TLS connections
|
||||
with a verified server certificate, to a server that announces
|
||||
"REQUIRETLS" support. This corresponds to the Postfix SMTP client
|
||||
TLS security levels "secure", "verify", "fingerprint", dane\-only,
|
||||
or opportunistic "dane", with a successful certificate match. The
|
||||
Postfix SMTP client will try one or more servers, controlled with
|
||||
the smtp_mx_address_limit parameter, until it finds a server that
|
||||
satisfies requirements. Otherwise, Postfix returns the message as
|
||||
undeliverable.
|
||||
.PP
|
||||
Notes:
|
||||
.IP \(bu
|
||||
REQUIRETLS enforcement is controlled with smtp_enforce_requiretls
|
||||
or lmtp_enforce_requiretls.
|
||||
.IP \(bu
|
||||
REQUIRETLS overrides "TLS\-Required: no".
|
||||
.br
|
||||
.PP
|
||||
This feature is available in Postfix >= 3.10.
|
||||
.SH reset_owner_alias (default: no)
|
||||
Reset the \fBlocal\fR(8) delivery agent's idea of the owner\-alias
|
||||
attribute, when delivering mail to a child alias that does not have
|
||||
@ -7512,6 +7543,77 @@ reasonably\-modern DNS \fBresolver\fR(3) library that implements the
|
||||
RES_USE_DNSSEC and RES_USE_EDNS0 resolver options.
|
||||
.PP
|
||||
This feature is available in Postfix 2.11 and later.
|
||||
.SH smtp_enforce_requiretls (default: empty)
|
||||
An optional list of next\-hop destinations that the Postfix
|
||||
SMTP/LMTP client will enforce REQUIRETLS for, when a message was
|
||||
received with the REQUIRETLS option: the next\-hop server must offer
|
||||
a matching TLS server certificate, and the server must announce
|
||||
REQUIRETLS support). Such a message will be returned to the sender
|
||||
if some REQUIRETLS requirement cannot be satisfied. These "hard"
|
||||
REQUIRETLS failures are logged as "REQUIRETLS failure".
|
||||
.PP
|
||||
Other messages that were received with the REQUIRETLS option
|
||||
will be delivered with REQUIRETLS if possible. If not, a message
|
||||
will be delivered as if it was received without the REQUIRETLS
|
||||
option. This allows a mail sending site to discover when REQUIRETLS
|
||||
can be enforced, without disrupting email deliveries. These "soft"
|
||||
REQUIRETLS failures are logged with "REQUIRETLS Debug".
|
||||
.PP
|
||||
On a perimeter MTA, it can make sense to turn off REQUIRETLS
|
||||
enforcement, or even to turn off REQUIRETLS support, when delivering
|
||||
a message to an internal destination. The internal servers may not
|
||||
support REQUIRETLS, and their connections may be secured with means
|
||||
other than DANE, STS, and the like.
|
||||
.PP
|
||||
The supported syntax differs with SMTP and LMTP:
|
||||
.IP \(bu
|
||||
With SMTP, specify a list of next\-hop domain names (without
|
||||
the ":port" or ":service" suffix), "/file/name" patterns or
|
||||
"type:table" lookup tables, separated by commas and/or whitespace.
|
||||
Continue long lines by starting the next line with whitespace. A
|
||||
"/file/name" pattern is replaced by its contents. A "type:table"
|
||||
lookup table is matched when a domain appears as lookup key. Specify
|
||||
"!pattern" to exclude a domain.
|
||||
.IP \(bu
|
||||
With LMTP, specify list of domain names (without the "inet":
|
||||
prefix, or ":port" or ":service" suffix), or UNIX\-domain socket
|
||||
"/path/name" (without the "unix:" prefix), or "type:table" lookup
|
||||
tables, separated by commas and/or whitespace. Continue long lines
|
||||
by starting the next line with whitespace. A "type:table" lookup
|
||||
table is matched when a domain appears as lookup key. Specify
|
||||
"!pattern" to exclude a domain or socket path.
|
||||
.br
|
||||
.PP
|
||||
Specify the form ".domain" to match any name ending in ".domain".
|
||||
To change this behavior, list "smtp_enforce_requiretls" or
|
||||
"lmtp_enforce_requiretls" in the parent_domain_matches_subdomains
|
||||
parameter value.
|
||||
.PP
|
||||
SMTP Examples:
|
||||
.PP
|
||||
.nf
|
||||
.na
|
||||
# Enforce REQUIRETLS for SMTP with selected next\-hop domains.
|
||||
smtp_enforce_requiretls = example.com, foo.example
|
||||
.br
|
||||
# Enforce REQUIRETLS for SMTP with all but a few next\-hop domains.
|
||||
smtp_enforce_requiretls = !foo.example, static:all
|
||||
.fi
|
||||
.ad
|
||||
.PP
|
||||
LMTP examples:
|
||||
.PP
|
||||
.nf
|
||||
.na
|
||||
# Don't enforce REQUIRETLS
|
||||
lmtp_enforce_requiretls =
|
||||
.br
|
||||
# Enforce REQUIRETLS for specific destinations.
|
||||
lmtp_enforce_requiretls = /path/to/socket, message\-store.example
|
||||
.fi
|
||||
.ad
|
||||
.PP
|
||||
This feature is available in Postfix >= 3.10.
|
||||
.SH smtp_enforce_tls (default: no)
|
||||
Enforcement mode: require that remote SMTP servers use TLS
|
||||
encryption, and never send mail in the clear. This also requires
|
||||
@ -14455,6 +14557,8 @@ If a message contains a "TLS\-Required: no" header, then Postfix
|
||||
will add that header to a delivery status notification for that
|
||||
message.
|
||||
.PP
|
||||
Note: REQUIRETLS overrides "TLS\-Required: no".
|
||||
.PP
|
||||
This feature is available in Postfix >= 3.10.
|
||||
.SH tls_server_sni_maps (default: empty)
|
||||
Optional lookup tables that map names received from remote SMTP
|
||||
|
@ -294,6 +294,14 @@ expands to as many command\-line arguments as there are recipients.
|
||||
.sp
|
||||
This information is modified by the \fBhqu\fR flags for quoting
|
||||
and case folding.
|
||||
.IP \fB${requiretls}\fR
|
||||
This feature should be used with content filters that pass
|
||||
filtered mail to the Postfix sendmail(1) command. The macro
|
||||
expands to the sendmail(1) command\-line option \fB\-Orequiretls\fR
|
||||
if the sender requested REQUIRETLS, otherwise it expands to
|
||||
\fB\-Onoop\fR.
|
||||
.sp
|
||||
This feature is available as of Postfix 3.10.
|
||||
.IP \fB${sasl_method}\fR
|
||||
This macro expands to the name of the SASL authentication
|
||||
mechanism in the AUTH command when the Postfix SMTP server
|
||||
|
@ -190,7 +190,7 @@ RFC 5321 (SMTP protocol)
|
||||
RFC 6531 (Internationalized SMTP)
|
||||
RFC 6533 (Internationalized Delivery Status Notifications)
|
||||
RFC 7672 (SMTP security via opportunistic DANE TLS)
|
||||
RFC 8689 (TLS\-Required message header)
|
||||
RFC 8689 (SMTP REQUIRETLS extension)
|
||||
.SH DIAGNOSTICS
|
||||
.ad
|
||||
.fi
|
||||
@ -485,7 +485,7 @@ Available in Postfix version 3.9 and later:
|
||||
.IP "\fBsmtp_sasl_password_result_delimiter (:)\fR"
|
||||
The delimiter between username and password in sasl_passwd_maps lookup
|
||||
results.
|
||||
.SH "STARTTLS SUPPORT CONTROLS"
|
||||
.SH "TLS SUPPORT CONTROLS"
|
||||
.na
|
||||
.nf
|
||||
.ad
|
||||
@ -688,7 +688,16 @@ information to report).
|
||||
.IP "\fBtls_required_enable (yes)\fR"
|
||||
Enable support for the "TLS\-Required: no" message header, defined
|
||||
in RFC 8689.
|
||||
.SH "OBSOLETE STARTTLS CONTROLS"
|
||||
.IP "\fBrequiretls_enable (yes)\fR"
|
||||
Enable support for the ESMTP verb "REQUIRETLS", defined in RFC
|
||||
8689.
|
||||
.IP "\fBsmtp_enforce_requiretls (empty)\fR"
|
||||
An optional list of next\-hop destinations that the Postfix
|
||||
SMTP/LMTP client will enforce REQUIRETLS for, when a message was
|
||||
received with the REQUIRETLS option: the next\-hop server must offer
|
||||
a matching TLS server certificate, and the server must announce
|
||||
REQUIRETLS support).
|
||||
.SH "OBSOLETE TLS CONTROLS"
|
||||
.na
|
||||
.nf
|
||||
.ad
|
||||
|
@ -67,6 +67,7 @@ RFC 5321 (SMTP protocol)
|
||||
RFC 6531 (Internationalized SMTP)
|
||||
RFC 6533 (Internationalized Delivery Status Notifications)
|
||||
RFC 7505 ("Null MX" No Service Resource Record)
|
||||
RFC 8689 (SMTP REQUIRETLS extension)
|
||||
.SH DIAGNOSTICS
|
||||
.ad
|
||||
.fi
|
||||
@ -402,7 +403,7 @@ Available in Postfix 3.6 and later:
|
||||
.IP "\fBsmtpd_sasl_mechanism_filter (!external, static:rest)\fR"
|
||||
If non\-empty, a filter for the SASL mechanism names that the
|
||||
Postfix SMTP server will announce in the EHLO response.
|
||||
.SH "STARTTLS SUPPORT CONTROLS"
|
||||
.SH "TLS SUPPORT CONTROLS"
|
||||
.na
|
||||
.nf
|
||||
.ad
|
||||
@ -578,7 +579,12 @@ Available in Postfix version 3.9 and later:
|
||||
Request that remote SMTP clients send an RFC7250 raw public key
|
||||
instead of an X.509 certificate, when asking for or requiring client
|
||||
authentication.
|
||||
.SH "OBSOLETE STARTTLS CONTROLS"
|
||||
.PP
|
||||
Available in Postfix version 3.10 and later:
|
||||
.IP "\fBrequiretls_enable (yes)\fR"
|
||||
Enable support for the ESMTP verb "REQUIRETLS", defined in RFC
|
||||
8689.
|
||||
.SH "OBSOLETE TLS CONTROLS"
|
||||
.na
|
||||
.nf
|
||||
.ad
|
||||
|
@ -1187,6 +1187,10 @@ while (<>) {
|
||||
s;\bignore_srv_lookup_error\b;<a href="postconf.5.html#ignore_srv_lookup_error">$&</a>;g;
|
||||
|
||||
s;\btls_required_enable\b;<a href="postconf.5.html#tls_required_enable">$&</a>;g;
|
||||
s;\brequiretls_enable\b;<a href="postconf.5.html#requiretls_enable">$&</a>;g;
|
||||
s;\bsmtp_enforce_requiretls\b;<a href="postconf.5.html#smtp_enforce_requiretls">$&</a>;g;
|
||||
s;\blmtp_enforce_requiretls\b;<a href="postconf.5.html#lmtp_enforce_requiretls">$&</a>;g;
|
||||
|
||||
s;\bfull_name_encoding_charset\b;<a href="postconf.5.html#full_name_encoding_charset">$&</a>;g;
|
||||
s;\bsmtpd_hide_client_session\b;<a href="postconf.5.html#smtpd_hide_client_session">$&</a>;g;
|
||||
|
||||
|
@ -3374,6 +3374,13 @@ postscreen_access_list
|
||||
smtpd_client_event_limit_exceptions
|
||||
</dd>
|
||||
|
||||
<dt> Postfix version 3.10 and later </dt>
|
||||
|
||||
<dd>
|
||||
smtp_enforce_requiretls,
|
||||
lmtp_enforce_requiretls
|
||||
</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
%PARAM propagate_unmatched_extensions canonical, virtual
|
||||
@ -19555,6 +19562,118 @@ If a message contains a "TLS-Required: no" header, then Postfix
|
||||
will add that header to a delivery status notification for that
|
||||
message. </p>
|
||||
|
||||
<p> Note: REQUIRETLS overrides "TLS-Required: no". </p>
|
||||
|
||||
<p> This feature is available in Postfix ≥ 3.10. </p>
|
||||
|
||||
%PARAM requiretls_enable yes
|
||||
|
||||
<p> Enable support for the ESMTP verb "REQUIRETLS", defined in RFC
|
||||
8689. By issuing this verb in the "MAIL FROM" command, a sender
|
||||
specifies that a message must be delivered over TLS connections
|
||||
with a verified server certificate, to a server that announces
|
||||
"REQUIRETLS" support. This corresponds to the Postfix SMTP client
|
||||
TLS security levels "secure", "verify", "fingerprint", dane-only,
|
||||
or opportunistic "dane", with a successful certificate match. The
|
||||
Postfix SMTP client will try one or more servers, controlled with
|
||||
the smtp_mx_address_limit parameter, until it finds a server that
|
||||
satisfies requirements. Otherwise, Postfix returns the message as
|
||||
undeliverable. </p>
|
||||
|
||||
<p> Notes: </p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li> <p> REQUIRETLS enforcement is controlled with smtp_enforce_requiretls
|
||||
or lmtp_enforce_requiretls. </p>
|
||||
|
||||
<li> <p> REQUIRETLS overrides "TLS-Required: no". </p>
|
||||
|
||||
</ul>
|
||||
|
||||
<p> This feature is available in Postfix ≥ 3.10. </p>
|
||||
|
||||
%PARAM smtp_enforce_requiretls empty
|
||||
|
||||
<p> An optional list of next-hop destinations that the Postfix
|
||||
SMTP/LMTP client will enforce REQUIRETLS for, when a message was
|
||||
received with the REQUIRETLS option: the next-hop server must offer
|
||||
a matching TLS server certificate, and the server must announce
|
||||
REQUIRETLS support). Such a message will be returned to the sender
|
||||
if some REQUIRETLS requirement cannot be satisfied. These "hard"
|
||||
REQUIRETLS failures are logged as "REQUIRETLS failure". </p>
|
||||
|
||||
<p> Other messages that were received with the REQUIRETLS option
|
||||
will be delivered with REQUIRETLS if possible. If not, a message
|
||||
will be delivered as if it was received without the REQUIRETLS
|
||||
option. This allows a mail sending site to discover when REQUIRETLS
|
||||
can be enforced, without disrupting email deliveries. These "soft"
|
||||
REQUIRETLS failures are logged with "REQUIRETLS Debug". </p>
|
||||
|
||||
<p> On a perimeter MTA, it can make sense to turn off REQUIRETLS
|
||||
enforcement, or even to turn off REQUIRETLS support, when delivering
|
||||
a message to an internal destination. The internal servers may not
|
||||
support REQUIRETLS, and their connections may be secured with means
|
||||
other than DANE, STS, and the like. </p>
|
||||
|
||||
<p> The supported syntax differs with SMTP and LMTP: </p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li> <p> With SMTP, specify a list of next-hop domain names (without
|
||||
the ":port" or ":service" suffix), "/file/name" patterns or
|
||||
"type:table" lookup tables, separated by commas and/or whitespace.
|
||||
Continue long lines by starting the next line with whitespace. A
|
||||
"/file/name" pattern is replaced by its contents. A "type:table"
|
||||
lookup table is matched when a domain appears as lookup key. Specify
|
||||
"!pattern" to exclude a domain. </p>
|
||||
|
||||
<li> <p> With LMTP, specify list of domain names (without the "inet":
|
||||
prefix, or ":port" or ":service" suffix), or UNIX-domain socket
|
||||
"/path/name" (without the "unix:" prefix), or "type:table" lookup
|
||||
tables, separated by commas and/or whitespace. Continue long lines
|
||||
by starting the next line with whitespace. A "type:table" lookup
|
||||
table is matched when a domain appears as lookup key. Specify
|
||||
"!pattern" to exclude a domain or socket path. </p>
|
||||
|
||||
</ul>
|
||||
|
||||
<p> Specify the form ".domain" to match any name ending in ".domain".
|
||||
To change this behavior, list "smtp_enforce_requiretls" or
|
||||
"lmtp_enforce_requiretls" in the parent_domain_matches_subdomains
|
||||
parameter value. </p>
|
||||
|
||||
<p>
|
||||
SMTP Examples:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
# Enforce REQUIRETLS for SMTP with selected next-hop domains.
|
||||
smtp_enforce_requiretls = example.com, foo.example
|
||||
<br>
|
||||
# Enforce REQUIRETLS for SMTP with all but a few next-hop domains.
|
||||
smtp_enforce_requiretls = !foo.example, static:all
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
LMTP examples:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
# Don't enforce REQUIRETLS
|
||||
lmtp_enforce_requiretls =
|
||||
<br>
|
||||
# Enforce REQUIRETLS for specific destinations.
|
||||
lmtp_enforce_requiretls = /path/to/socket, message-store.example
|
||||
</pre>
|
||||
|
||||
<p> This feature is available in Postfix ≥ 3.10. </p>
|
||||
|
||||
%PARAM lmtp_enforce_requiretls empty
|
||||
|
||||
<p> The LMTP-specific version of the smtp_enforce_requiretls
|
||||
configuration parameter. See there for details. </p>
|
||||
|
||||
<p> This feature is available in Postfix ≥ 3.10. </p>
|
||||
|
||||
%PARAM smtpd_hide_client_session no
|
||||
|
@ -1664,6 +1664,9 @@ REQUIRETLS
|
||||
RequireTLS
|
||||
requiretls
|
||||
sendopts
|
||||
TODO
|
||||
Onoop
|
||||
Orequiretls
|
||||
tz
|
||||
GID
|
||||
SIGKILL
|
||||
|
@ -159,10 +159,17 @@ proto proto socketmap_table
|
||||
qmgr qmgr_deliver c qmgr qmgr_message c qmqpd qmqpd c
|
||||
smtp smtp_proto c smtpd smtpd c verify verify c
|
||||
operations Files cleanup cleanup h cleanup cleanup_message c
|
||||
proto postconf proto pipe pipe c
|
||||
global ehlo_mask_test c local forward c smtpd smtpd c
|
||||
more alternate MX servers to try Files smtp smtp h
|
||||
Files sendmail sendmail c global rec_types h
|
||||
Files sendmail sendmail c
|
||||
Files sendmail sendmail c global rec_types h pickup pickup c
|
||||
pipe pipe c sendmail sendmail c
|
||||
smtp smtp c smtp smtp_proto c
|
||||
bounce bounce c bounce bounce_notify_util c cleanup cleanup c
|
||||
cleanup cleanup_message c smtp smtp c smtp smtp_connect c
|
||||
Documentation edited for clarity Files pipe pipe c
|
||||
servers to try Files smtp smtp h smtp smtp_proto c
|
||||
global mail_params h smtpd smtpd c
|
||||
global mail_params h proto postconf proto smtp smtp c
|
||||
proto postconf proto proto TLS_README html
|
||||
|
@ -1858,3 +1858,4 @@ TINYCDB
|
||||
getdata
|
||||
XXXSENDOPTS
|
||||
xtra
|
||||
NODICT
|
||||
|
@ -100,3 +100,4 @@ Roessner
|
||||
bitflags
|
||||
Schulze
|
||||
tlspol
|
||||
TlsRequired
|
||||
|
@ -98,6 +98,15 @@ int bounce_notify_service(int flags, char *service, char *queue_name,
|
||||
char *postmaster;
|
||||
int count;
|
||||
|
||||
/*
|
||||
* If the original sender requested REQUIRETLS, return headers only, and
|
||||
* do not enforce REQUIRETLS for the delivery status notification.
|
||||
*/
|
||||
if ((sendopts & SOPT_REQUIRETLS_ESMTP) != 0) {
|
||||
dsn_ret = DSN_RET_HDRS;
|
||||
sendopts &= ~SOPT_REQUIRETLS_ESMTP;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize. Open queue file, bounce log, etc.
|
||||
*
|
||||
@ -196,7 +205,8 @@ int bounce_notify_service(int flags, char *service, char *queue_name,
|
||||
&& bounce_header_dsn(bounce, bounce_info) == 0
|
||||
&& bounce_diagnostic_dsn(bounce, bounce_info,
|
||||
DSN_NOTIFY_OVERRIDE) > 0) {
|
||||
bounce_original(bounce, bounce_info, DSN_RET_FULL);
|
||||
bounce_original(bounce, bounce_info, dsn_ret ?
|
||||
dsn_ret : DSN_RET_FULL);
|
||||
bounce_status = post_mail_fclose(bounce);
|
||||
if (bounce_status == 0)
|
||||
msg_info("%s: postmaster non-delivery notification: %s",
|
||||
|
@ -537,6 +537,7 @@ int bounce_header(VSTREAM *bounce, BOUNCE_INFO *bounce_info,
|
||||
* Trade confidentiality against availability.
|
||||
*/
|
||||
if (var_tls_required_enable
|
||||
&& (bounce_info->sendopts & SOPT_REQUIRETLS_ESMTP) == 0
|
||||
&& (bounce_info->sendopts & SOPT_REQUIRETLS_HEADER) != 0)
|
||||
post_mail_fprintf(bounce, "TLS-Required: no");
|
||||
|
||||
|
@ -111,6 +111,15 @@ int bounce_notify_verp(int flags, char *service, char *queue_name,
|
||||
if (strcasecmp_utf8(recipient, mail_addr_double_bounce()) == 0)
|
||||
msg_panic("%s: attempt to bounce a double bounce", myname);
|
||||
|
||||
/*
|
||||
* If the original sender requested REQUIRETLS, return headers only, and
|
||||
* do not enforce REQUIRETLS for the delivery status notification.
|
||||
*/
|
||||
if ((sendopts & SOPT_REQUIRETLS_ESMTP) != 0) {
|
||||
dsn_ret = DSN_RET_HDRS;
|
||||
sendopts &= ~SOPT_REQUIRETLS_ESMTP;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize. Open queue file, bounce log, etc.
|
||||
*/
|
||||
|
@ -96,6 +96,15 @@ int bounce_one_service(int flags, char *queue_name, char *queue_id,
|
||||
var_notify_classes);
|
||||
VSTRING *new_id = vstring_alloc(10);
|
||||
|
||||
/*
|
||||
* If the original sender requested REQUIRETLS, return headers only, and
|
||||
* do not enforce REQUIRETLS for the delivery status notification.
|
||||
*/
|
||||
if ((sendopts & SOPT_REQUIRETLS_ESMTP) != 0) {
|
||||
dsn_ret = DSN_RET_HDRS;
|
||||
sendopts &= ~SOPT_REQUIRETLS_ESMTP;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize. Open queue file, bounce log, etc.
|
||||
*/
|
||||
@ -162,7 +171,8 @@ int bounce_one_service(int flags, char *queue_name, char *queue_id,
|
||||
&& bounce_recipient_log(bounce, bounce_info) == 0
|
||||
&& bounce_header_dsn(bounce, bounce_info) == 0
|
||||
&& bounce_recipient_dsn(bounce, bounce_info) == 0)
|
||||
bounce_original(bounce, bounce_info, DSN_RET_FULL);
|
||||
bounce_original(bounce, bounce_info, dsn_ret ?
|
||||
dsn_ret : DSN_RET_FULL);
|
||||
bounce_status = post_mail_fclose(bounce);
|
||||
if (bounce_status == 0)
|
||||
msg_info("%s: postmaster non-delivery notification: %s",
|
||||
|
@ -95,6 +95,15 @@ int bounce_trace_service(int flags, char *service, char *queue_name,
|
||||
int count;
|
||||
const char *sender;
|
||||
|
||||
/*
|
||||
* If the original sender requested REQUIRETLS, do not enforce REQUIRETLS
|
||||
* for the delivery status notification. The trace service always returns
|
||||
* headers only.
|
||||
*/
|
||||
if ((sendopts & SOPT_REQUIRETLS_ESMTP) != 0) {
|
||||
sendopts &= ~SOPT_REQUIRETLS_ESMTP;
|
||||
}
|
||||
|
||||
/*
|
||||
* For consistency with fail/delay notifications, send notification for a
|
||||
* non-bounce message as a single-bounce message, send notification for a
|
||||
|
@ -98,6 +98,15 @@ int bounce_warn_service(int unused_flags, char *service, char *queue_name,
|
||||
char *postmaster;
|
||||
int count;
|
||||
|
||||
/*
|
||||
* If the original sender requested REQUIRETLS, return headers only, and
|
||||
* do not enforce REQUIRETLS for the delivery status notification.
|
||||
*/
|
||||
if ((sendopts & SOPT_REQUIRETLS_ESMTP) != 0) {
|
||||
dsn_ret = DSN_RET_HDRS;
|
||||
sendopts &= ~SOPT_REQUIRETLS_ESMTP;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize. Open queue file, bounce log, etc.
|
||||
*
|
||||
@ -185,7 +194,8 @@ int bounce_warn_service(int unused_flags, char *service, char *queue_name,
|
||||
&& bounce_header_dsn(bounce, bounce_info) == 0
|
||||
&& bounce_diagnostic_dsn(bounce, bounce_info,
|
||||
DSN_NOTIFY_OVERRIDE) > 0) {
|
||||
bounce_original(bounce, bounce_info, DSN_RET_FULL);
|
||||
bounce_original(bounce, bounce_info, dsn_ret ?
|
||||
dsn_ret : DSN_RET_FULL);
|
||||
bounce_status = post_mail_fclose(bounce);
|
||||
if (bounce_status == 0)
|
||||
msg_info("%s: postmaster delay notification: %s",
|
||||
|
@ -80,6 +80,8 @@
|
||||
/* .IP CLEANUP_FLAG_AUTOUTF8
|
||||
/* Autodetection: request SMTPUTF8 support if the message
|
||||
/* contains an UTF8 message header, sender, or recipient.
|
||||
/* .IP CLEANUP_FLAG_REQUIRETLS
|
||||
/* The sender requested REQUIRETLS (RFC 8689) enforcement.
|
||||
/* DIAGNOSTICS
|
||||
/* Problems and transactions are logged to \fBsyslogd\fR(8)
|
||||
/* or \fBpostlogd\fR(8).
|
||||
@ -208,9 +210,15 @@ void cleanup_control(CLEANUP_STATE *state, int flags)
|
||||
} else {
|
||||
state->err_mask = ~0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Propagate requests that are specified at the envelope level. This may
|
||||
* be augmented later with information derived from message content.
|
||||
*/
|
||||
if (state->flags & CLEANUP_FLAG_SMTPUTF8)
|
||||
state->sendopts |= SMTPUTF8_FLAG_REQUESTED;
|
||||
/* TODO(wietse) REQUIRETLS. */
|
||||
if (state->flags & CLEANUP_FLAG_REQUIRETLS)
|
||||
state->sendopts |= SOPT_REQUIRETLS_ESMTP;
|
||||
if (msg_verbose)
|
||||
msg_info("server flags = %s", cleanup_strflags(state->flags));
|
||||
}
|
||||
|
@ -124,7 +124,7 @@ TESTPROG= domain_list dot_lockfile mail_addr_crunch mail_addr_find \
|
||||
off_cvt quote_822_local rec2stream recdump resolve_clnt \
|
||||
resolve_local rewrite_clnt stream2rec string_list tok822_parse \
|
||||
quote_821_local mail_conf_time mime_state strip_addr \
|
||||
verify_clnt xtext anvil_clnt scache ehlo_mask \
|
||||
verify_clnt xtext anvil_clnt scache ehlo_mask_test \
|
||||
valid_mailhost_addr own_inet_addr header_body_checks \
|
||||
data_redirect addr_match_list safe_ultostr verify_sender_addr \
|
||||
mail_version mail_dict server_acl uxtext mail_parm_split \
|
||||
@ -336,7 +336,7 @@ anvil_clnt: $(LIB) $(LIBS)
|
||||
scache: scache.c $(LIB) $(LIBS)
|
||||
$(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
|
||||
|
||||
ehlo_mask: ehlo_mask.c $(LIB) $(LIBS)
|
||||
ehlo_mask_test: ehlo_mask_test.c $(LIB) $(LIBS)
|
||||
$(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
|
||||
|
||||
valid_mailhost_addr: valid_mailhost_addr.c $(LIB) $(LIBS)
|
||||
@ -412,7 +412,7 @@ config_known_tcp_ports: config_known_tcp_ports.c $(LIB) $(LIBS)
|
||||
$(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
|
||||
|
||||
tests: tok822_test mime_tests strip_addr_test tok822_limit_test \
|
||||
xtext_test scache_multi_test ehlo_mask_test \
|
||||
xtext_test scache_multi_test test_ehlo_mask \
|
||||
namadr_list_test mail_conf_time_test header_body_checks_tests \
|
||||
mail_version_test server_acl_test resolve_local_test maps_test \
|
||||
safe_ultostr_test mail_parm_split_test fold_addr_test \
|
||||
@ -612,10 +612,8 @@ scache_multi_test: scache scache_multi.in scache_multi.ref
|
||||
diff scache_multi.ref scache_multi.tmp
|
||||
rm -f scache_multi.tmp
|
||||
|
||||
ehlo_mask_test: ehlo_mask ehlo_mask.in ehlo_mask.ref
|
||||
$(SHLIB_ENV) $(VALGRIND) ./ehlo_mask <ehlo_mask.in >ehlo_mask.tmp
|
||||
diff ehlo_mask.ref ehlo_mask.tmp
|
||||
rm -f ehlo_mask.tmp
|
||||
test_ehlo_mask: ehlo_mask_test
|
||||
$(SHLIB_ENV) $(VALGRIND) ./ehlo_mask_test
|
||||
|
||||
namadr_list_test: namadr_list namadr_list.in namadr_list.ref
|
||||
-$(SHLIB_ENV) sh namadr_list.in >namadr_list.tmp 2>&1
|
||||
@ -1461,6 +1459,16 @@ ehlo_mask.o: ../../include/vbuf.h
|
||||
ehlo_mask.o: ../../include/vstring.h
|
||||
ehlo_mask.o: ehlo_mask.c
|
||||
ehlo_mask.o: ehlo_mask.h
|
||||
ehlo_mask_test.o: ../../include/check_arg.h
|
||||
ehlo_mask_test.o: ../../include/msg.h
|
||||
ehlo_mask_test.o: ../../include/msg_vstream.h
|
||||
ehlo_mask_test.o: ../../include/stringops.h
|
||||
ehlo_mask_test.o: ../../include/sys_defs.h
|
||||
ehlo_mask_test.o: ../../include/vbuf.h
|
||||
ehlo_mask_test.o: ../../include/vstream.h
|
||||
ehlo_mask_test.o: ../../include/vstring.h
|
||||
ehlo_mask_test.o: ehlo_mask.h
|
||||
ehlo_mask_test.o: ehlo_mask_test.c
|
||||
ext_prop.o: ../../include/check_arg.h
|
||||
ext_prop.o: ../../include/name_mask.h
|
||||
ext_prop.o: ../../include/sys_defs.h
|
||||
|
@ -42,6 +42,10 @@
|
||||
/* Request that addr_match_list_match() logs a warning and
|
||||
/* returns zero with list->error set to a non-zero dictionary
|
||||
/* error code, instead of raising a fatal error.
|
||||
/* .IP MATCH_FLAG_NOFILE
|
||||
/* Disable special handling for /file/name.
|
||||
/* .IP MATCH_FLAG_NODICT
|
||||
/* Disable special handling for type:name.
|
||||
/* .PP
|
||||
/* Specify MATCH_FLAG_NONE to request none of the above.
|
||||
/* The last argument is a list of patterns, or the absolute
|
||||
@ -67,6 +71,9 @@
|
||||
/* IBM T.J. Watson Research
|
||||
/* P.O. Box 704
|
||||
/* Yorktown Heights, NY 10598, USA
|
||||
/*
|
||||
/* Wietse Venema
|
||||
/* porcupine.org
|
||||
/*--*/
|
||||
|
||||
/* System library. */
|
||||
|
@ -55,6 +55,7 @@ static struct cleanup_flag_map cleanup_flag_map[] = {
|
||||
CLEANUP_FLAG_SMTP_REPLY, "enable_smtp_reply",
|
||||
CLEANUP_FLAG_SMTPUTF8, "smtputf8_requested",
|
||||
CLEANUP_FLAG_AUTOUTF8, "smtputf8_autodetect",
|
||||
CLEANUP_FLAG_REQUIRETLS, "requiretls_requested",
|
||||
};
|
||||
|
||||
/* cleanup_strflags - map flags code to printable string */
|
||||
|
@ -25,6 +25,7 @@
|
||||
#define CLEANUP_FLAG_SMTP_REPLY (1<<7) /* Enable SMTP reply */
|
||||
#define CLEANUP_FLAG_SMTPUTF8 (1<<8) /* SMTPUTF8 requested */
|
||||
#define CLEANUP_FLAG_AUTOUTF8 (1<<9) /* Autodetect SMTPUTF8 */
|
||||
#define CLEANUP_FLAG_REQUIRETLS (1<<10) /* REQUIRETLS requested */
|
||||
|
||||
#define CLEANUP_FLAG_FILTER_ALL (CLEANUP_FLAG_FILTER | CLEANUP_FLAG_MILTER)
|
||||
|
||||
|
@ -45,6 +45,10 @@
|
||||
/* Request that domain_list_match() logs a warning and returns
|
||||
/* zero, with list->error set to a non-zero dictionary error
|
||||
/* code, instead of raising a fatal error.
|
||||
/* .IP MATCH_FLAG_NOFILE
|
||||
/* Disable special handling for /file/name.
|
||||
/* .IP MATCH_FLAG_NODICT
|
||||
/* Disable special handling for type:name.
|
||||
/* .PP
|
||||
/* Specify MATCH_FLAG_NONE to request none of the above.
|
||||
/* The last argument is a list of domain patterns, or the name of
|
||||
@ -69,6 +73,9 @@
|
||||
/* IBM T.J. Watson Research
|
||||
/* P.O. Box 704
|
||||
/* Yorktown Heights, NY 10598, USA
|
||||
/*
|
||||
/* Wietse Venema
|
||||
/* porcupine.org
|
||||
/*--*/
|
||||
|
||||
/* System library. */
|
||||
|
@ -20,6 +20,7 @@
|
||||
/* #define EHLO_MASK_DSN (1<<11)
|
||||
/* #define EHLO_MASK_SMTPUTF8 (1<<12)
|
||||
/* #define EHLO_MASK_CHUNKING (1<<13)
|
||||
/* #define EHLO_MASK_REQUIRETLS (1<<14)
|
||||
/* #define EHLO_MASK_SILENT (1<<15)
|
||||
/*
|
||||
/* int ehlo_mask(keyword_list)
|
||||
@ -70,22 +71,22 @@
|
||||
* The lookup table.
|
||||
*/
|
||||
static const NAME_MASK ehlo_mask_table[] = {
|
||||
"8BITMIME", EHLO_MASK_8BITMIME,
|
||||
"AUTH", EHLO_MASK_AUTH,
|
||||
"ETRN", EHLO_MASK_ETRN,
|
||||
"PIPELINING", EHLO_MASK_PIPELINING,
|
||||
"SIZE", EHLO_MASK_SIZE,
|
||||
"VERP", EHLO_MASK_VERP,
|
||||
"VRFY", EHLO_MASK_VRFY,
|
||||
"XCLIENT", EHLO_MASK_XCLIENT,
|
||||
"XFORWARD", EHLO_MASK_XFORWARD,
|
||||
"STARTTLS", EHLO_MASK_STARTTLS,
|
||||
"ENHANCEDSTATUSCODES", EHLO_MASK_ENHANCEDSTATUSCODES,
|
||||
"DSN", EHLO_MASK_DSN,
|
||||
"EHLO_MASK_SMTPUTF8", EHLO_MASK_SMTPUTF8,
|
||||
"SMTPUTF8", EHLO_MASK_SMTPUTF8,
|
||||
"CHUNKING", EHLO_MASK_CHUNKING,
|
||||
"SILENT-DISCARD", EHLO_MASK_SILENT, /* XXX In-band signaling */
|
||||
EHLO_VERB_8BITMIME, EHLO_MASK_8BITMIME,
|
||||
EHLO_VERB_AUTH, EHLO_MASK_AUTH,
|
||||
EHLO_VERB_ETRN, EHLO_MASK_ETRN,
|
||||
EHLO_VERB_PIPELINING, EHLO_MASK_PIPELINING,
|
||||
EHLO_VERB_SIZE, EHLO_MASK_SIZE,
|
||||
EHLO_VERB_VERP, EHLO_MASK_VERP,
|
||||
EHLO_VERB_VRFY, EHLO_MASK_VRFY,
|
||||
EHLO_VERB_XCLIENT, EHLO_MASK_XCLIENT,
|
||||
EHLO_VERB_XFORWARD, EHLO_MASK_XFORWARD,
|
||||
EHLO_VERB_STARTTLS, EHLO_MASK_STARTTLS,
|
||||
EHLO_VERB_ENHANCEDSTATUSCODES, EHLO_MASK_ENHANCEDSTATUSCODES,
|
||||
EHLO_VERB_DSN, EHLO_MASK_DSN,
|
||||
EHLO_VERB_SMTPUTF8, EHLO_MASK_SMTPUTF8,
|
||||
EHLO_VERB_CHUNKING, EHLO_MASK_CHUNKING,
|
||||
EHLO_VERB_REQUIRETLS, EHLO_MASK_REQUIRETLS,
|
||||
EHLO_VERB_SILENT, EHLO_MASK_SILENT,
|
||||
0,
|
||||
};
|
||||
|
||||
@ -114,32 +115,3 @@ const char *str_ehlo_mask(int mask_bits)
|
||||
*/
|
||||
return (str_name_mask("ehlo bitmask", ehlo_mask_table, mask_bits));
|
||||
}
|
||||
|
||||
#ifdef TEST
|
||||
|
||||
/*
|
||||
* Stand-alone test program.
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <vstream.h>
|
||||
#include <vstring.h>
|
||||
#include <vstring_vstream.h>
|
||||
|
||||
int main(int unused_argc, char **unused_argv)
|
||||
{
|
||||
int mask_bits;
|
||||
VSTRING *buf = vstring_alloc(1);
|
||||
const char *mask_string;
|
||||
|
||||
while (vstring_get_nonl(buf, VSTREAM_IN) != VSTREAM_EOF) {
|
||||
mask_bits = ehlo_mask(vstring_str(buf));
|
||||
mask_string = str_ehlo_mask(mask_bits);
|
||||
vstream_printf("%s -> 0x%x -> %s\n", vstring_str(buf), mask_bits,
|
||||
mask_string);
|
||||
vstream_fflush(VSTREAM_OUT);
|
||||
}
|
||||
vstring_free(buf);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -12,7 +12,7 @@
|
||||
/* .nf
|
||||
|
||||
/*
|
||||
* External interface.
|
||||
* Bit flags.
|
||||
*/
|
||||
#define EHLO_MASK_8BITMIME (1<<0) /* start of first byte */
|
||||
#define EHLO_MASK_PIPELINING (1<<1)
|
||||
@ -29,8 +29,32 @@
|
||||
#define EHLO_MASK_DSN (1<<11)
|
||||
#define EHLO_MASK_SMTPUTF8 (1<<12)
|
||||
#define EHLO_MASK_CHUNKING (1<<13)
|
||||
#define EHLO_MASK_SILENT (1<<15)
|
||||
#define EHLO_MASK_REQUIRETLS (1<<14)
|
||||
#define EHLO_MASK_SILENT (1<<15) /* in-band signaling */
|
||||
|
||||
/*
|
||||
* ESMTP verbs.
|
||||
*/
|
||||
#define EHLO_VERB_8BITMIME "8BITMIME"
|
||||
#define EHLO_VERB_PIPELINING "PIPELINING"
|
||||
#define EHLO_VERB_SIZE "SIZE"
|
||||
#define EHLO_VERB_VRFY "VRFY"
|
||||
#define EHLO_VERB_ETRN "ETRN"
|
||||
#define EHLO_VERB_AUTH "AUTH"
|
||||
#define EHLO_VERB_VERP "VERP"
|
||||
#define EHLO_VERB_STARTTLS "STARTTLS"
|
||||
#define EHLO_VERB_XCLIENT "XCLIENT"
|
||||
#define EHLO_VERB_XFORWARD "XFORWARD"
|
||||
#define EHLO_VERB_ENHANCEDSTATUSCODES "ENHANCEDSTATUSCODES"
|
||||
#define EHLO_VERB_DSN "DSN"
|
||||
#define EHLO_VERB_SMTPUTF8 "SMTPUTF8"
|
||||
#define EHLO_VERB_CHUNKING "CHUNKING"
|
||||
#define EHLO_VERB_REQUIRETLS "REQUIRETLS"
|
||||
#define EHLO_VERB_SILENT "SILENT-DISCARD" /* in-band signaling */
|
||||
|
||||
/*
|
||||
* Functions.
|
||||
*/
|
||||
extern int ehlo_mask(const char *);
|
||||
extern const char *str_ehlo_mask(int);
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
starttls, 8bitmime, verp, etrn, etrn
|
||||
foobar, auth, pipelining, size, vrfy
|
||||
xclient, xforward
|
@ -1,3 +0,0 @@
|
||||
starttls, 8bitmime, verp, etrn, etrn -> 0xd1 -> 8BITMIME ETRN VERP STARTTLS
|
||||
foobar, auth, pipelining, size, vrfy -> 0x2e -> AUTH PIPELINING SIZE VRFY
|
||||
xclient, xforward -> 0x300 -> XCLIENT XFORWARD
|
121
postfix/src/global/ehlo_mask_test.c
Normal file
121
postfix/src/global/ehlo_mask_test.c
Normal file
@ -0,0 +1,121 @@
|
||||
/*
|
||||
* System library.
|
||||
*/
|
||||
#include <sys_defs.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stringops.h>
|
||||
|
||||
/*
|
||||
* Utility library.
|
||||
*/
|
||||
#include <msg.h>
|
||||
#include <msg_vstream.h>
|
||||
#include <vstream.h>
|
||||
#include <vstring.h>
|
||||
|
||||
/*
|
||||
* Global library.
|
||||
*/
|
||||
#include <ehlo_mask.h>
|
||||
|
||||
/*
|
||||
* Tests and test cases.
|
||||
*/
|
||||
typedef struct TEST_CASE {
|
||||
const char *label; /* identifies test case */
|
||||
int mask;
|
||||
const char *want;
|
||||
} TEST_CASE;
|
||||
|
||||
/*
|
||||
* Verify that each verb has its unique bit mask.
|
||||
*/
|
||||
static const TEST_CASE test_cases[] = {
|
||||
{"EHLO_MASK_8BITMIME",
|
||||
EHLO_MASK_8BITMIME,
|
||||
"8BITMIME"
|
||||
},
|
||||
{"EHLO_MASK_PIPELINING",
|
||||
EHLO_MASK_PIPELINING,
|
||||
"PIPELINING"
|
||||
},
|
||||
{"EHLO_MASK_SIZE",
|
||||
EHLO_MASK_SIZE,
|
||||
"SIZE"
|
||||
},
|
||||
{"EHLO_MASK_VRFY",
|
||||
EHLO_MASK_VRFY,
|
||||
"VRFY"
|
||||
},
|
||||
{"EHLO_MASK_ETRN",
|
||||
EHLO_MASK_ETRN,
|
||||
"ETRN"
|
||||
},
|
||||
{"EHLO_MASK_AUTH",
|
||||
EHLO_MASK_AUTH,
|
||||
"AUTH"
|
||||
},
|
||||
{"EHLO_MASK_VERP",
|
||||
EHLO_MASK_VERP,
|
||||
"VERP"
|
||||
},
|
||||
{"EHLO_MASK_STARTTLS",
|
||||
EHLO_MASK_STARTTLS,
|
||||
"STARTTLS"
|
||||
},
|
||||
{"EHLO_MASK_XCLIENT",
|
||||
EHLO_MASK_XCLIENT,
|
||||
"XCLIENT"
|
||||
},
|
||||
{"EHLO_MASK_ENHANCEDSTATUSCODES",
|
||||
EHLO_MASK_ENHANCEDSTATUSCODES,
|
||||
"ENHANCEDSTATUSCODES"
|
||||
},
|
||||
{"EHLO_MASK_DSN",
|
||||
EHLO_MASK_DSN,
|
||||
"DSN"
|
||||
},
|
||||
{"EHLO_MASK_SMTPUTF8",
|
||||
EHLO_MASK_SMTPUTF8,
|
||||
"SMTPUTF8"
|
||||
},
|
||||
{"EHLO_MASK_CHUNKING",
|
||||
EHLO_MASK_CHUNKING,
|
||||
"CHUNKING"
|
||||
},
|
||||
{"EHLO_MASK_REQUIRETLS",
|
||||
EHLO_MASK_REQUIRETLS,
|
||||
"REQUIRETLS"
|
||||
},
|
||||
{"EHLO_MASK_SILENT",
|
||||
EHLO_MASK_SILENT,
|
||||
"SILENT-DISCARD"
|
||||
},
|
||||
{0},
|
||||
};
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const TEST_CASE *tp;
|
||||
int pass = 0;
|
||||
int fail = 0;
|
||||
const char *got;
|
||||
|
||||
msg_vstream_init(sane_basename((VSTRING *) 0, argv[0]), VSTREAM_ERR);
|
||||
|
||||
for (tp = test_cases; tp->label != 0; tp++) {
|
||||
msg_info("RUN %s", tp->label);
|
||||
got = str_ehlo_mask(tp->mask);
|
||||
if (strcmp(got, tp->want) != 0) {
|
||||
msg_warn("got result '%s', want: '%s'", got, tp->want);
|
||||
fail++;
|
||||
msg_info("FAIL %s", tp->label);
|
||||
} else {
|
||||
msg_info("PASS %s", tp->label);
|
||||
pass++;
|
||||
}
|
||||
}
|
||||
msg_info("PASS=%d FAIL=%d", pass, fail);
|
||||
exit(fail != 0);
|
||||
}
|
@ -128,6 +128,7 @@
|
||||
/* int var_smtputf8_enable;
|
||||
/* int var_strict_smtputf8;
|
||||
/* char *var_smtputf8_autoclass;
|
||||
/* int var_requiretls_enable;
|
||||
/* int var_tls_required_enable;
|
||||
/* int var_idna2003_compat;
|
||||
/* char *var_compatibility_level;
|
||||
@ -370,6 +371,7 @@ char *var_dsn_filter;
|
||||
int var_smtputf8_enable;
|
||||
int var_strict_smtputf8;
|
||||
char *var_smtputf8_autoclass;
|
||||
int var_requiretls_enable;
|
||||
int var_tls_required_enable;
|
||||
int var_idna2003_compat;
|
||||
char *var_compatibility_level;
|
||||
@ -757,6 +759,7 @@ void mail_params_init()
|
||||
VAR_SMTPUTF8_ENABLE, DEF_SMTPUTF8_ENABLE, &var_smtputf8_enable,
|
||||
VAR_IDNA2003_COMPAT, DEF_IDNA2003_COMPAT, &var_idna2003_compat,
|
||||
VAR_RESPECTFUL_LOGGING, DEF_RESPECTFUL_LOGGING, &var_respectful_logging,
|
||||
VAR_REQUIRETLS_ENABLE, DEF_REQUIRETLS_ENABLE, &var_requiretls_enable,
|
||||
VAR_TLSREQUIRED_ENABLE, DEF_TLSREQUIRED_ENABLE, &var_tls_required_enable,
|
||||
0,
|
||||
};
|
||||
|
@ -4383,6 +4383,17 @@ extern int var_idna2003_compat;
|
||||
#define DEF_TLSREQUIRED_ENABLE "yes"
|
||||
extern int var_tls_required_enable;
|
||||
|
||||
#define VAR_REQUIRETLS_ENABLE "requiretls_enable"
|
||||
#define DEF_REQUIRETLS_ENABLE "yes"
|
||||
extern int var_requiretls_enable;
|
||||
|
||||
#define VAR_SMTP_ENFORCE_REQUIRETLS "smtp_enforce_requiretls"
|
||||
#define DEF_SMTP_ENFORCE_REQUIRETLS ""
|
||||
extern char *var_smtp_enforce_requiretls;
|
||||
|
||||
#define VAR_LMTP_ENFORCE_REQUIRETLS "lmtp_enforce_requiretls"
|
||||
#define DEF_LMTP_ENFORCE_REQUIRETLS ""
|
||||
|
||||
/*
|
||||
* Workaround for future incompatibility. Our implementation of RFC 2308
|
||||
* negative reply caching relies on the promise that res_query() and
|
||||
|
@ -51,6 +51,10 @@
|
||||
/* Request that namadr_list_match() logs a warning and returns
|
||||
/* zero with list->error set to a non-zero dictionary error
|
||||
/* code, instead of raising a fatal error.
|
||||
/* .IP MATCH_FLAG_NOFILE
|
||||
/* Disable special handling for /file/name.
|
||||
/* .IP MATCH_FLAG_NODICT
|
||||
/* Disable special handling for type:name.
|
||||
/* .PP
|
||||
/* Specify MATCH_FLAG_NONE to request none of the above.
|
||||
/* The last argument is a list of patterns, or the absolute
|
||||
@ -75,6 +79,9 @@
|
||||
/* IBM T.J. Watson Research
|
||||
/* P.O. Box 704
|
||||
/* Yorktown Heights, NY 10598, USA
|
||||
/*
|
||||
/* Wietse Venema
|
||||
/* porcupine.org
|
||||
/*--*/
|
||||
|
||||
/* System library. */
|
||||
|
@ -225,8 +225,8 @@ static void post_mail_init(VSTREAM *stream, const char *sender,
|
||||
int cleanup_flags =
|
||||
int_filt_flags(source_class) | CLEANUP_FLAG_MASK_INTERNAL
|
||||
| smtputf8_autodetect(source_class)
|
||||
| ((sendopts & SOPT_REQUIRETLS_ESMTP) ? CLEANUP_FLAG_REQUIRETLS : 0)
|
||||
| ((sendopts & SMTPUTF8_FLAG_REQUESTED) ? CLEANUP_FLAG_SMTPUTF8 : 0);
|
||||
/* TODO(wietse) REQUIRETLS. */
|
||||
|
||||
GETTIMEOFDAY(&now);
|
||||
date = mail_date(now.tv_sec);
|
||||
|
@ -110,7 +110,7 @@
|
||||
/*
|
||||
* The subset of inputs that the postdrop command allows.
|
||||
*/
|
||||
#define REC_TYPE_POST_ENVELOPE "MFSRVAin"
|
||||
#define REC_TYPE_POST_ENVELOPE "MCFSRVAin"
|
||||
#define REC_TYPE_POST_CONTENT "XLN"
|
||||
#define REC_TYPE_POST_EXTRACT "EAR"
|
||||
|
||||
|
@ -39,6 +39,10 @@
|
||||
/* Request that string_list_match() logs a warning and returns
|
||||
/* zero with list->error set to a non-zero dictionary error
|
||||
/* code, instead of raising a fatal error.
|
||||
/* .IP MATCH_FLAG_NOFILE
|
||||
/* Disable special handling for /file/name.
|
||||
/* .IP MATCH_FLAG_NODICT
|
||||
/* Disable special handling for type:name.
|
||||
/* .PP
|
||||
/* Specify MATCH_FLAG_NONE to request none of the above.
|
||||
/* The last argument specifies a list of string patterns.
|
||||
@ -61,6 +65,9 @@
|
||||
/* IBM T.J. Watson Research
|
||||
/* P.O. Box 704
|
||||
/* Yorktown Heights, NY 10598, USA
|
||||
/*
|
||||
/* Wietse Venema
|
||||
/* porcupine.org
|
||||
/*--*/
|
||||
|
||||
/* System library. */
|
||||
|
@ -163,9 +163,10 @@ static FORWARD_INFO *forward_open(DELIVER_REQUEST *request, const char *sender)
|
||||
#define FORWARD_CLEANUP_FLAGS \
|
||||
(CLEANUP_FLAG_BOUNCE | CLEANUP_FLAG_MASK_INTERNAL \
|
||||
| smtputf8_autodetect(MAIL_SRC_MASK_FORWARD) \
|
||||
| ((request->sendopts & SOPT_REQUIRETLS_ESMTP) ? \
|
||||
CLEANUP_FLAG_REQUIRETLS : 0) \
|
||||
| ((request->sendopts & SMTPUTF8_FLAG_REQUESTED) ? \
|
||||
CLEANUP_FLAG_SMTPUTF8 : 0))
|
||||
/* TODO(wietse) REQUIRETLS. */
|
||||
|
||||
attr_print(cleanup, ATTR_FLAG_NONE,
|
||||
SEND_ATTR_INT(MAIL_ATTR_FLAGS, FORWARD_CLEANUP_FLAGS),
|
||||
|
@ -236,6 +236,7 @@ static int copy_segment(VSTREAM *qfile, VSTREAM *cleanup, PICKUP_INFO *info,
|
||||
char *attr_value;
|
||||
char *saved_attr;
|
||||
int skip_attr;
|
||||
ssize_t count;
|
||||
|
||||
/*
|
||||
* Limit the input record size. All front-end programs should protect the
|
||||
@ -246,7 +247,7 @@ static int copy_segment(VSTREAM *qfile, VSTREAM *cleanup, PICKUP_INFO *info,
|
||||
*
|
||||
* We must allow PTR records here because of "postsuper -r".
|
||||
*/
|
||||
for (;;) {
|
||||
for (count = 0; /* void */; count++) {
|
||||
if ((type = rec_get(qfile, buf, var_line_limit)) < 0
|
||||
|| strchr(expected, type) == 0)
|
||||
return (file_read_error(info, type));
|
||||
@ -264,6 +265,9 @@ static int copy_segment(VSTREAM *qfile, VSTREAM *cleanup, PICKUP_INFO *info,
|
||||
}
|
||||
if (type == REC_TYPE_TIME)
|
||||
time_seen = 1;
|
||||
if (type == REC_TYPE_SIZE && count > 5)
|
||||
/* Discard SIZE record not at beginning of segment. */
|
||||
continue;
|
||||
|
||||
/*
|
||||
* XXX Workaround: REC_TYPE_FILT (used in envelopes) == REC_TYPE_CONT
|
||||
|
@ -83,6 +83,7 @@ pipe.o: ../../include/pipe_command.h
|
||||
pipe.o: ../../include/quote_822_local.h
|
||||
pipe.o: ../../include/quote_flags.h
|
||||
pipe.o: ../../include/recipient_list.h
|
||||
pipe.o: ../../include/sendopts.h
|
||||
pipe.o: ../../include/sent.h
|
||||
pipe.o: ../../include/set_eugid.h
|
||||
pipe.o: ../../include/split_addr.h
|
||||
|
@ -284,6 +284,14 @@
|
||||
/* .sp
|
||||
/* This information is modified by the \fBhqu\fR flags for quoting
|
||||
/* and case folding.
|
||||
/* .IP \fB${requiretls}\fR
|
||||
/* This feature should be used with content filters that pass
|
||||
/* filtered mail to the Postfix sendmail(1) command. The macro
|
||||
/* expands to the sendmail(1) command-line option \fB-Orequiretls\fR
|
||||
/* if the sender requested REQUIRETLS, otherwise it expands to
|
||||
/* \fB-Onoop\fR.
|
||||
/* .sp
|
||||
/* This feature is available as of Postfix 3.10.
|
||||
/* .IP \fB${sasl_method}\fR
|
||||
/* This macro expands to the name of the SASL authentication
|
||||
/* mechanism in the AUTH command when the Postfix SMTP server
|
||||
@ -519,6 +527,7 @@
|
||||
#include <delivered_hdr.h>
|
||||
#include <fold_addr.h>
|
||||
#include <mail_parm_split.h>
|
||||
#include <sendopts.h>
|
||||
|
||||
/* Single server skeleton. */
|
||||
|
||||
@ -553,6 +562,7 @@
|
||||
#define PIPE_DICT_SASL_SENDER "sasl_sender" /* key */
|
||||
#define PIPE_DICT_QUEUE_ID "queue_id" /* key */
|
||||
#define PIPE_DICT_ENVID "envid" /* key */
|
||||
#define PIPE_DICT_REQUIRETLS "requiretls" /* key */
|
||||
|
||||
/*
|
||||
* Flags used to pass back the type of special parameter found by
|
||||
@ -659,6 +669,7 @@ static int parse_callback(int type, VSTRING *buf, void *context)
|
||||
PIPE_DICT_SASL_SENDER, 0,
|
||||
PIPE_DICT_QUEUE_ID, 0,
|
||||
PIPE_DICT_ENVID, 0,
|
||||
PIPE_DICT_REQUIRETLS, 0,
|
||||
0, 0,
|
||||
};
|
||||
struct cmd_flags *p;
|
||||
@ -1290,6 +1301,9 @@ static int deliver_message(DELIVER_REQUEST *request, char *service, char **argv)
|
||||
request->queue_id);
|
||||
dict_update(PIPE_DICT_TABLE, PIPE_DICT_ENVID,
|
||||
request->dsn_envid);
|
||||
dict_update(PIPE_DICT_TABLE, PIPE_DICT_REQUIRETLS,
|
||||
(request->sendopts & SOPT_REQUIRETLS_ESMTP)
|
||||
&& var_requiretls_enable ? "-Orequiretls" : "-Onoop");
|
||||
vstring_free(buf);
|
||||
|
||||
if ((expanded_argv = expand_argv(service, attr.command,
|
||||
|
@ -86,6 +86,7 @@ sendmail.o: ../../include/recipient_list.h
|
||||
sendmail.o: ../../include/record.h
|
||||
sendmail.o: ../../include/resolve_clnt.h
|
||||
sendmail.o: ../../include/safe.h
|
||||
sendmail.o: ../../include/sendopts.h
|
||||
sendmail.o: ../../include/set_ugid.h
|
||||
sendmail.o: ../../include/split_at.h
|
||||
sendmail.o: ../../include/stringops.h
|
||||
|
@ -152,10 +152,28 @@
|
||||
/* comma-separated list with one or more of \fBfailure\fR (send
|
||||
/* notification when delivery fails), \fBdelay\fR (send
|
||||
/* notification when delivery is delayed), or \fBsuccess\fR
|
||||
/* (send notification when the message is delivered); or specify
|
||||
/* (send notification after the message is delivered); or specify
|
||||
/* \fBnever\fR (don't send any notifications at all).
|
||||
/*
|
||||
/* This feature is available in Postfix 2.3 and later.
|
||||
/* .IP "\fB-O requiretls"
|
||||
/* When delivering a message to an SMTP or LMTP server, the
|
||||
/* connection must use TLS with a verified server certificate,
|
||||
/* and the server must support REQUIRETLS. Try multiple servers if
|
||||
/* possible, and return the message as undeliverable when these
|
||||
/* requirements were not satisfied with any of the servers that
|
||||
/* were tried. The "requiretls" option value is case-insensitive.
|
||||
/*
|
||||
/* This feature is available in Postfix 3.10 and later.
|
||||
/* .IP "\fB-O smtputf8"
|
||||
/* When delivering a message to an SMTP or LMTP server, the server
|
||||
/* must support SMTPUTF8. Try multiple servers if possible, and
|
||||
/* return the message as undeliverable when a message contains an
|
||||
/* UTF8 envelope address or message header, but SMTPUTF8 was not
|
||||
/* supported by any of the servers that were tried. The "smtputf8"
|
||||
/* option value is case-insensitive.
|
||||
/*
|
||||
/* This feature is available in Postfix 3.10 and later.
|
||||
/* .IP "\fB-n\fR (ignored)"
|
||||
/* Backwards compatibility.
|
||||
/* .IP "\fB-oA\fIalias_database\fR"
|
||||
@ -434,6 +452,11 @@
|
||||
/* the Postfix executable files and documentation with the default
|
||||
/* Postfix instance, and that are started, stopped, etc., together
|
||||
/* with the default Postfix instance.
|
||||
/* .PP
|
||||
/* Postfix 3.10 and later:
|
||||
/* .IP "\fBrequiretls_enable (yes)\fR"
|
||||
/* Enable support for the ESMTP verb "REQUIRETLS", defined in RFC
|
||||
/* 8689.
|
||||
/* FILES
|
||||
/* /var/spool/postfix, mail queue
|
||||
/* /etc/postfix, configuration files
|
||||
@ -537,6 +560,7 @@
|
||||
#include <user_acl.h>
|
||||
#include <dsn_mask.h>
|
||||
#include <mail_parm_split.h>
|
||||
#include <sendopts.h>
|
||||
|
||||
/* Application-specific. */
|
||||
|
||||
@ -589,6 +613,11 @@ static const CONFIG_STR_TABLE str_table[] = {
|
||||
0,
|
||||
};
|
||||
|
||||
/*
|
||||
* Sender options.
|
||||
*/
|
||||
static int sm_sendopts;
|
||||
|
||||
/*
|
||||
* Silly little macros (SLMs).
|
||||
*/
|
||||
@ -788,6 +817,14 @@ static void enqueue(const int flags, const char *encoding,
|
||||
* With "sendmail -N", instead of a per-message NOTIFY record we store one
|
||||
* per recipient so that we can simplify the implementation somewhat.
|
||||
*/
|
||||
if (sm_sendopts)
|
||||
rec_fprintf(dst, REC_TYPE_SIZE, REC_TYPE_SIZE_FORMAT,
|
||||
(REC_TYPE_SIZE_CAST1) ~ 0, /* message segment size */
|
||||
(REC_TYPE_SIZE_CAST2) ~ 0, /* content offset */
|
||||
(REC_TYPE_SIZE_CAST3) ~ 0, /* recipient count */
|
||||
(REC_TYPE_SIZE_CAST4) ~ 0, /* qmgr options */
|
||||
(REC_TYPE_SIZE_CAST5) ~ 0, /* content length */
|
||||
(REC_TYPE_SIZE_CAST6) sm_sendopts);
|
||||
if (dsn_envid)
|
||||
rec_fprintf(dst, REC_TYPE_ATTR, "%s=%s",
|
||||
MAIL_ATTR_DSN_ENVID, dsn_envid);
|
||||
@ -1251,7 +1288,20 @@ int main(int argc, char **argv)
|
||||
break;
|
||||
case 'N':
|
||||
if ((dsn_notify = dsn_notify_mask(optarg)) == 0)
|
||||
msg_warn("bad -N option value -- ignored");
|
||||
msg_warn("bad -N option value: '%s' -- ignored", optarg);
|
||||
break;
|
||||
case 'O':
|
||||
/* NOOP is used to implement ${requiretls} in pipe(8). */
|
||||
if (strcasecmp(optarg, "REQUIRETLS") == 0) {
|
||||
sm_sendopts |= SOPT_REQUIRETLS_ESMTP;
|
||||
if (var_requiretls_enable == 0)
|
||||
msg_warn("'-O requiretls' was requested, but the "
|
||||
"configuration is 'requiretls_enable = no'");
|
||||
} else if (strcasecmp(optarg, "SMTPUTF8") == 0) {
|
||||
sm_sendopts |= SOPT_SMTPUTF8_REQUESTED;
|
||||
} else if (strcasecmp(optarg, "NOOP") != 0) {
|
||||
msg_warn("bad -O option value: '%s' -- ignored", optarg);
|
||||
}
|
||||
break;
|
||||
case 'R':
|
||||
if ((dsn_ret = dsn_ret_code(optarg)) == 0)
|
||||
|
@ -84,6 +84,7 @@ smtp.o: ../../include/deliver_request.h
|
||||
smtp.o: ../../include/delivered_hdr.h
|
||||
smtp.o: ../../include/dict.h
|
||||
smtp.o: ../../include/dns.h
|
||||
smtp.o: ../../include/domain_list.h
|
||||
smtp.o: ../../include/dsn.h
|
||||
smtp.o: ../../include/dsn_buf.h
|
||||
smtp.o: ../../include/ext_prop.h
|
||||
@ -134,6 +135,7 @@ smtp_addr.o: ../../include/check_arg.h
|
||||
smtp_addr.o: ../../include/deliver_request.h
|
||||
smtp_addr.o: ../../include/dict.h
|
||||
smtp_addr.o: ../../include/dns.h
|
||||
smtp_addr.o: ../../include/domain_list.h
|
||||
smtp_addr.o: ../../include/dsn.h
|
||||
smtp_addr.o: ../../include/dsn_buf.h
|
||||
smtp_addr.o: ../../include/header_body_checks.h
|
||||
@ -178,6 +180,7 @@ smtp_chat.o: ../../include/cleanup_user.h
|
||||
smtp_chat.o: ../../include/deliver_request.h
|
||||
smtp_chat.o: ../../include/dict.h
|
||||
smtp_chat.o: ../../include/dns.h
|
||||
smtp_chat.o: ../../include/domain_list.h
|
||||
smtp_chat.o: ../../include/dsn.h
|
||||
smtp_chat.o: ../../include/dsn_buf.h
|
||||
smtp_chat.o: ../../include/dsn_util.h
|
||||
@ -229,6 +232,7 @@ smtp_connect.o: ../../include/deliver_pass.h
|
||||
smtp_connect.o: ../../include/deliver_request.h
|
||||
smtp_connect.o: ../../include/dict.h
|
||||
smtp_connect.o: ../../include/dns.h
|
||||
smtp_connect.o: ../../include/domain_list.h
|
||||
smtp_connect.o: ../../include/dsn.h
|
||||
smtp_connect.o: ../../include/dsn_buf.h
|
||||
smtp_connect.o: ../../include/header_body_checks.h
|
||||
@ -284,6 +288,7 @@ smtp_key.o: ../../include/check_arg.h
|
||||
smtp_key.o: ../../include/deliver_request.h
|
||||
smtp_key.o: ../../include/dict.h
|
||||
smtp_key.o: ../../include/dns.h
|
||||
smtp_key.o: ../../include/domain_list.h
|
||||
smtp_key.o: ../../include/dsn.h
|
||||
smtp_key.o: ../../include/dsn_buf.h
|
||||
smtp_key.o: ../../include/header_body_checks.h
|
||||
@ -321,6 +326,7 @@ smtp_map11.o: ../../include/check_arg.h
|
||||
smtp_map11.o: ../../include/deliver_request.h
|
||||
smtp_map11.o: ../../include/dict.h
|
||||
smtp_map11.o: ../../include/dns.h
|
||||
smtp_map11.o: ../../include/domain_list.h
|
||||
smtp_map11.o: ../../include/dsn.h
|
||||
smtp_map11.o: ../../include/dsn_buf.h
|
||||
smtp_map11.o: ../../include/header_body_checks.h
|
||||
@ -361,6 +367,7 @@ smtp_misc.o: ../../include/check_arg.h
|
||||
smtp_misc.o: ../../include/deliver_request.h
|
||||
smtp_misc.o: ../../include/dict.h
|
||||
smtp_misc.o: ../../include/dns.h
|
||||
smtp_misc.o: ../../include/domain_list.h
|
||||
smtp_misc.o: ../../include/dsn.h
|
||||
smtp_misc.o: ../../include/dsn_buf.h
|
||||
smtp_misc.o: ../../include/ext_prop.h
|
||||
@ -404,6 +411,7 @@ smtp_proto.o: ../../include/defer.h
|
||||
smtp_proto.o: ../../include/deliver_request.h
|
||||
smtp_proto.o: ../../include/dict.h
|
||||
smtp_proto.o: ../../include/dns.h
|
||||
smtp_proto.o: ../../include/domain_list.h
|
||||
smtp_proto.o: ../../include/dsn.h
|
||||
smtp_proto.o: ../../include/dsn_buf.h
|
||||
smtp_proto.o: ../../include/dsn_mask.h
|
||||
@ -470,6 +478,7 @@ smtp_rcpt.o: ../../include/deliver_completed.h
|
||||
smtp_rcpt.o: ../../include/deliver_request.h
|
||||
smtp_rcpt.o: ../../include/dict.h
|
||||
smtp_rcpt.o: ../../include/dns.h
|
||||
smtp_rcpt.o: ../../include/domain_list.h
|
||||
smtp_rcpt.o: ../../include/dsn.h
|
||||
smtp_rcpt.o: ../../include/dsn_buf.h
|
||||
smtp_rcpt.o: ../../include/dsn_mask.h
|
||||
@ -510,6 +519,7 @@ smtp_reuse.o: ../../include/check_arg.h
|
||||
smtp_reuse.o: ../../include/deliver_request.h
|
||||
smtp_reuse.o: ../../include/dict.h
|
||||
smtp_reuse.o: ../../include/dns.h
|
||||
smtp_reuse.o: ../../include/domain_list.h
|
||||
smtp_reuse.o: ../../include/dsn.h
|
||||
smtp_reuse.o: ../../include/dsn_buf.h
|
||||
smtp_reuse.o: ../../include/header_body_checks.h
|
||||
@ -551,6 +561,7 @@ smtp_sasl_auth_cache.o: ../../include/deliver_request.h
|
||||
smtp_sasl_auth_cache.o: ../../include/dict.h
|
||||
smtp_sasl_auth_cache.o: ../../include/dict_proxy.h
|
||||
smtp_sasl_auth_cache.o: ../../include/dns.h
|
||||
smtp_sasl_auth_cache.o: ../../include/domain_list.h
|
||||
smtp_sasl_auth_cache.o: ../../include/dsn.h
|
||||
smtp_sasl_auth_cache.o: ../../include/dsn_buf.h
|
||||
smtp_sasl_auth_cache.o: ../../include/dsn_util.h
|
||||
@ -591,6 +602,7 @@ smtp_sasl_glue.o: ../../include/check_arg.h
|
||||
smtp_sasl_glue.o: ../../include/deliver_request.h
|
||||
smtp_sasl_glue.o: ../../include/dict.h
|
||||
smtp_sasl_glue.o: ../../include/dns.h
|
||||
smtp_sasl_glue.o: ../../include/domain_list.h
|
||||
smtp_sasl_glue.o: ../../include/dsn.h
|
||||
smtp_sasl_glue.o: ../../include/dsn_buf.h
|
||||
smtp_sasl_glue.o: ../../include/header_body_checks.h
|
||||
@ -636,6 +648,7 @@ smtp_sasl_proto.o: ../../include/check_arg.h
|
||||
smtp_sasl_proto.o: ../../include/deliver_request.h
|
||||
smtp_sasl_proto.o: ../../include/dict.h
|
||||
smtp_sasl_proto.o: ../../include/dns.h
|
||||
smtp_sasl_proto.o: ../../include/domain_list.h
|
||||
smtp_sasl_proto.o: ../../include/dsn.h
|
||||
smtp_sasl_proto.o: ../../include/dsn_buf.h
|
||||
smtp_sasl_proto.o: ../../include/header_body_checks.h
|
||||
@ -677,6 +690,7 @@ smtp_session.o: ../../include/debug_peer.h
|
||||
smtp_session.o: ../../include/deliver_request.h
|
||||
smtp_session.o: ../../include/dict.h
|
||||
smtp_session.o: ../../include/dns.h
|
||||
smtp_session.o: ../../include/domain_list.h
|
||||
smtp_session.o: ../../include/dsn.h
|
||||
smtp_session.o: ../../include/dsn_buf.h
|
||||
smtp_session.o: ../../include/header_body_checks.h
|
||||
@ -717,6 +731,7 @@ smtp_state.o: ../../include/debug_peer.h
|
||||
smtp_state.o: ../../include/deliver_request.h
|
||||
smtp_state.o: ../../include/dict.h
|
||||
smtp_state.o: ../../include/dns.h
|
||||
smtp_state.o: ../../include/domain_list.h
|
||||
smtp_state.o: ../../include/dsn.h
|
||||
smtp_state.o: ../../include/dsn_buf.h
|
||||
smtp_state.o: ../../include/header_body_checks.h
|
||||
@ -757,6 +772,7 @@ smtp_tls_policy.o: ../../include/ctable.h
|
||||
smtp_tls_policy.o: ../../include/deliver_request.h
|
||||
smtp_tls_policy.o: ../../include/dict.h
|
||||
smtp_tls_policy.o: ../../include/dns.h
|
||||
smtp_tls_policy.o: ../../include/domain_list.h
|
||||
smtp_tls_policy.o: ../../include/dsn.h
|
||||
smtp_tls_policy.o: ../../include/dsn_buf.h
|
||||
smtp_tls_policy.o: ../../include/header_body_checks.h
|
||||
@ -799,6 +815,7 @@ smtp_tlsrpt.o: ../../include/check_arg.h
|
||||
smtp_tlsrpt.o: ../../include/deliver_request.h
|
||||
smtp_tlsrpt.o: ../../include/dict.h
|
||||
smtp_tlsrpt.o: ../../include/dns.h
|
||||
smtp_tlsrpt.o: ../../include/domain_list.h
|
||||
smtp_tlsrpt.o: ../../include/dsn.h
|
||||
smtp_tlsrpt.o: ../../include/dsn_buf.h
|
||||
smtp_tlsrpt.o: ../../include/header_body_checks.h
|
||||
@ -843,6 +860,7 @@ smtp_trouble.o: ../../include/deliver_completed.h
|
||||
smtp_trouble.o: ../../include/deliver_request.h
|
||||
smtp_trouble.o: ../../include/dict.h
|
||||
smtp_trouble.o: ../../include/dns.h
|
||||
smtp_trouble.o: ../../include/domain_list.h
|
||||
smtp_trouble.o: ../../include/dsn.h
|
||||
smtp_trouble.o: ../../include/dsn_buf.h
|
||||
smtp_trouble.o: ../../include/header_body_checks.h
|
||||
@ -884,6 +902,7 @@ smtp_unalias.o: ../../include/check_arg.h
|
||||
smtp_unalias.o: ../../include/deliver_request.h
|
||||
smtp_unalias.o: ../../include/dict.h
|
||||
smtp_unalias.o: ../../include/dns.h
|
||||
smtp_unalias.o: ../../include/domain_list.h
|
||||
smtp_unalias.o: ../../include/dsn.h
|
||||
smtp_unalias.o: ../../include/dsn_buf.h
|
||||
smtp_unalias.o: ../../include/header_body_checks.h
|
||||
|
@ -68,6 +68,7 @@
|
||||
VAR_HFROM_FORMAT, DEF_HFROM_FORMAT, &var_hfrom_format, 1, 0,
|
||||
VAR_USE_SRV_LOOKUP, DEF_USE_SRV_LOOKUP, &var_use_srv_lookup, 0, 0,
|
||||
VAR_LMTP_TLSRPT_SOCKNAME, DEF_LMTP_TLSRPT_SOCKNAME, &var_smtp_tlsrpt_sockname, 0, 0,
|
||||
VAR_LMTP_ENFORCE_REQUIRETLS, DEF_LMTP_ENFORCE_REQUIRETLS, &var_smtp_enforce_requiretls, 0, 0,
|
||||
0,
|
||||
};
|
||||
static const CONFIG_TIME_TABLE lmtp_time_table[] = {
|
||||
|
@ -172,7 +172,7 @@
|
||||
/* RFC 6531 (Internationalized SMTP)
|
||||
/* RFC 6533 (Internationalized Delivery Status Notifications)
|
||||
/* RFC 7672 (SMTP security via opportunistic DANE TLS)
|
||||
/* RFC 8689 (TLS-Required message header)
|
||||
/* RFC 8689 (SMTP REQUIRETLS extension)
|
||||
/* DIAGNOSTICS
|
||||
/* Problems and transactions are logged to \fBsyslogd\fR(8)
|
||||
/* or \fBpostlogd\fR(8).
|
||||
@ -453,7 +453,7 @@
|
||||
/* .IP "\fBsmtp_sasl_password_result_delimiter (:)\fR"
|
||||
/* The delimiter between username and password in sasl_passwd_maps lookup
|
||||
/* results.
|
||||
/* STARTTLS SUPPORT CONTROLS
|
||||
/* TLS SUPPORT CONTROLS
|
||||
/* .ad
|
||||
/* .fi
|
||||
/* Detailed information about STARTTLS configuration may be found
|
||||
@ -654,7 +654,16 @@
|
||||
/* .IP "\fBtls_required_enable (yes)\fR"
|
||||
/* Enable support for the "TLS-Required: no" message header, defined
|
||||
/* in RFC 8689.
|
||||
/* OBSOLETE STARTTLS CONTROLS
|
||||
/* .IP "\fBrequiretls_enable (yes)\fR"
|
||||
/* Enable support for the ESMTP verb "REQUIRETLS", defined in RFC
|
||||
/* 8689.
|
||||
/* .IP "\fBsmtp_enforce_requiretls (empty)\fR"
|
||||
/* An optional list of next-hop destinations that the Postfix
|
||||
/* SMTP/LMTP client will enforce REQUIRETLS for, when a message was
|
||||
/* received with the REQUIRETLS option: the next-hop server must offer
|
||||
/* a matching TLS server certificate, and the server must announce
|
||||
/* REQUIRETLS support).
|
||||
/* OBSOLETE TLS CONTROLS
|
||||
/* .ad
|
||||
/* .fi
|
||||
/* The following configuration parameters exist for compatibility
|
||||
@ -1021,6 +1030,8 @@
|
||||
#include <maps.h>
|
||||
#include <ext_prop.h>
|
||||
#include <hfrom_format.h>
|
||||
#include <domain_list.h>
|
||||
#include <match_parent_style.h>
|
||||
|
||||
/* DNS library. */
|
||||
|
||||
@ -1165,6 +1176,7 @@ bool var_allow_srv_fallback;
|
||||
bool var_smtp_tlsrpt_enable;
|
||||
char *var_smtp_tlsrpt_sockname;
|
||||
bool var_smtp_tlsrpt_skip_reused_hs;
|
||||
char *var_smtp_enforce_requiretls;
|
||||
|
||||
/* Special handling of 535 AUTH errors. */
|
||||
char *var_smtp_sasl_auth_cache_name;
|
||||
@ -1192,6 +1204,7 @@ HBC_CHECKS *smtp_body_checks; /* limited body checks */
|
||||
SMTP_CLI_ATTR smtp_cli_attr; /* parsed command-line */
|
||||
int smtp_hfrom_format; /* postmaster notifications */
|
||||
STRING_LIST *smtp_use_srv_lookup;
|
||||
DOMAIN_LIST *smtp_enforce_requiretls;
|
||||
|
||||
#ifdef USE_TLS
|
||||
|
||||
@ -1693,6 +1706,23 @@ static void pre_init(char *unused_name, char **unused_argv)
|
||||
if (*var_smtp_dns_re_filter)
|
||||
dns_rr_filter_compile(VAR_LMTP_SMTP(DNS_RE_FILTER),
|
||||
var_smtp_dns_re_filter);
|
||||
|
||||
/*
|
||||
* REQUIRETLS enforcement uses a match list. No MATCH_FLAG_RETURN after
|
||||
* table lookup error, because fail-open is not a good option. We would
|
||||
* have to defer all delivery requests anyway. Disable /file/name magic
|
||||
* for LMTP, because that would break the handling of UNIX-domain socket
|
||||
* pathnames.
|
||||
*/
|
||||
if (var_requiretls_enable && *var_smtp_enforce_requiretls) {
|
||||
int flags = smtp_mode ? 0 : MATCH_FLAG_NOFILE;
|
||||
const char *param_name = VAR_LMTP_SMTP(ENFORCE_REQUIRETLS);
|
||||
|
||||
smtp_enforce_requiretls =
|
||||
domain_list_init(param_name,
|
||||
match_parent_style(param_name) | flags,
|
||||
var_smtp_enforce_requiretls);
|
||||
}
|
||||
}
|
||||
|
||||
/* pre_accept - see if tables have changed */
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include <tok822.h>
|
||||
#include <dsn_buf.h>
|
||||
#include <header_body_checks.h>
|
||||
#include <domain_list.h>
|
||||
|
||||
/*
|
||||
* Postfix TLS library.
|
||||
@ -200,6 +201,7 @@ typedef struct SMTP_STATE {
|
||||
#ifdef USE_TLSRPT
|
||||
struct TLSRPT_WRAPPER *tlsrpt;
|
||||
#endif
|
||||
int enforce_requiretls; /* from smtp_enforce_requiretls */
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -286,6 +288,7 @@ typedef struct SMTP_STATE {
|
||||
#define SMTP_FEATURE_XFORWARD_IDENT (1<<20)
|
||||
#define SMTP_FEATURE_SMTPUTF8 (1<<21) /* RFC 6531 */
|
||||
#define SMTP_FEATURE_FROM_PROXY (1<<22) /* proxied connection */
|
||||
#define SMTP_FEATURE_REQUIRETLS (1<<23) /* RFC 8689 */
|
||||
|
||||
/*
|
||||
* Features that passivate under the endpoint.
|
||||
@ -358,6 +361,7 @@ extern STRING_LIST *smtp_use_srv_lookup;/* services with SRV record lookup */
|
||||
|
||||
extern TLS_APPL_STATE *smtp_tls_ctx; /* client-side TLS engine */
|
||||
extern int smtp_tls_insecure_mx_policy; /* DANE post insecure MX? */
|
||||
extern DOMAIN_LIST *smtp_enforce_requiretls; /* parsed list */
|
||||
|
||||
#endif
|
||||
|
||||
@ -637,8 +641,9 @@ extern void smtp_rcpt_done(SMTP_STATE *, SMTP_RESP *, RECIPIENT *);
|
||||
/*
|
||||
* smtp_trouble.c
|
||||
*/
|
||||
#define SMTP_THROTTLE 1
|
||||
#define SMTP_NOTHROTTLE 0
|
||||
#define SMTP_MISC_FAIL_NONE 0
|
||||
#define SMTP_MISC_FAIL_THROTTLE (1<<0)
|
||||
#define SMTP_MISC_FAIL_SOFT_NON_FINAL (1<<1)
|
||||
extern int smtp_sess_fail(SMTP_STATE *);
|
||||
extern int PRINTFLIKE(5, 6) smtp_misc_fail(SMTP_STATE *, int, const char *,
|
||||
SMTP_RESP *, const char *,...);
|
||||
@ -648,9 +653,9 @@ extern void PRINTFLIKE(5, 6) smtp_rcpt_fail(SMTP_STATE *, RECIPIENT *,
|
||||
extern int smtp_stream_except(SMTP_STATE *, int, const char *);
|
||||
|
||||
#define smtp_site_fail(state, mta, resp, ...) \
|
||||
smtp_misc_fail((state), SMTP_THROTTLE, (mta), (resp), __VA_ARGS__)
|
||||
smtp_misc_fail((state), SMTP_MISC_FAIL_THROTTLE, (mta), (resp), __VA_ARGS__)
|
||||
#define smtp_mesg_fail(state, mta, resp, ...) \
|
||||
smtp_misc_fail((state), SMTP_NOTHROTTLE, (mta), (resp), __VA_ARGS__)
|
||||
smtp_misc_fail((state), SMTP_MISC_FAIL_NONE, (mta), (resp), __VA_ARGS__)
|
||||
|
||||
/*
|
||||
* smtp_unalias.c
|
||||
|
@ -106,6 +106,7 @@
|
||||
#include <mail_addr.h>
|
||||
#include <valid_hostname.h>
|
||||
#include <sendopts.h>
|
||||
#include <domain_list.h>
|
||||
|
||||
/* DNS library. */
|
||||
|
||||
@ -515,19 +516,32 @@ static int smtp_get_effective_tls_level(DSN_BUF *why, SMTP_STATE *state)
|
||||
}
|
||||
|
||||
/*
|
||||
* If the sender requires verified TLS, the TLS level must enforce a
|
||||
* server certificate match.
|
||||
* If the sender requires TLS with server certificate verification, the
|
||||
* TLS level must enforce a server certificate match.
|
||||
*/
|
||||
#if 0
|
||||
else if ((state->request->sendopts & SOPT_REQUIRETLS_ESMTP)) {
|
||||
else if (var_requiretls_enable
|
||||
&& (state->request->sendopts & SOPT_REQUIRETLS_ESMTP)) {
|
||||
if (TLS_MUST_MATCH(tls->level) == 0) {
|
||||
dsb_simple(why, "5.7.10", "Sender requires verified TLS, "
|
||||
" but my configured TLS security level is '%s %s'",
|
||||
var_mail_name, str_tls_level(tls->level));
|
||||
return (0);
|
||||
if (state->enforce_requiretls) {
|
||||
dsb_simple(why, "5.7.10", "REQUIRETLS Failure: Sender "
|
||||
"requires a TLS server certificate match, "
|
||||
"but the configured %s TLS security level '%s' "
|
||||
"does not support that. The last attempted "
|
||||
"server was %s",
|
||||
var_mail_name, str_tls_level(tls->level),
|
||||
STR(iter->host));
|
||||
return (0);
|
||||
} else {
|
||||
msg_info("REQUIRETLS Debug: Sender requires a TLS server "
|
||||
"certificate match, but the configured %s TLS "
|
||||
"security level '%s' does not support that. "
|
||||
"The last attempted server was %s",
|
||||
var_mail_name, str_tls_level(tls->level),
|
||||
STR(iter->host));
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Otherwise, if the TLS level is not TLS_LEV_NONE or some non-level, and
|
||||
@ -574,6 +588,18 @@ static void smtp_connect_local(SMTP_STATE *state, const char *path)
|
||||
if (state->misc_flags & SMTP_MISC_FLAG_CONN_CACHE_MASK)
|
||||
SET_SCACHE_REQUEST_NEXTHOP(state, path);
|
||||
|
||||
/*
|
||||
* REQUIRETLS enforcement is based on the UNIX-domain pathname, without
|
||||
* the "unix:" prefix.
|
||||
*/
|
||||
#ifdef USE_TLS
|
||||
state->enforce_requiretls =
|
||||
(var_requiretls_enable
|
||||
&& smtp_enforce_requiretls
|
||||
&& (state->request->sendopts & SOPT_REQUIRETLS_ESMTP) != 0
|
||||
&& domain_list_match(smtp_enforce_requiretls, path));
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Here we ensure that the iter->addr member refers to a copy of the
|
||||
* UNIX-domain pathname, so that smtp_save_session() will cache the
|
||||
@ -978,6 +1004,18 @@ static void smtp_connect_inet(SMTP_STATE *state, const char *nexthop,
|
||||
state->tlsrpt = 0;
|
||||
#endif /* USE_TLSRPT */
|
||||
|
||||
/*
|
||||
* REQUIRETLS enforcement is based on the next-hop domain name
|
||||
* without the service or port.
|
||||
*/
|
||||
#ifdef USE_TLS
|
||||
state->enforce_requiretls =
|
||||
(var_requiretls_enable
|
||||
&& smtp_enforce_requiretls
|
||||
&& (state->request->sendopts & SOPT_REQUIRETLS_ESMTP) != 0
|
||||
&& domain_list_match(smtp_enforce_requiretls, domain));
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Resolve an SMTP or LMTP server. Skip MX or SRV lookups when a
|
||||
* quoted domain is specified or when DNS lookups are disabled.
|
||||
|
@ -69,6 +69,7 @@
|
||||
VAR_HFROM_FORMAT, DEF_HFROM_FORMAT, &var_hfrom_format, 1, 0,
|
||||
VAR_USE_SRV_LOOKUP, DEF_USE_SRV_LOOKUP, &var_use_srv_lookup, 0, 0,
|
||||
VAR_SMTP_TLSRPT_SOCKNAME, DEF_SMTP_TLSRPT_SOCKNAME, &var_smtp_tlsrpt_sockname, 0, 0,
|
||||
VAR_SMTP_ENFORCE_REQUIRETLS, DEF_SMTP_ENFORCE_REQUIRETLS, &var_smtp_enforce_requiretls, 0, 0,
|
||||
0,
|
||||
};
|
||||
static const CONFIG_TIME_TABLE smtp_time_table[] = {
|
||||
|
@ -604,6 +604,10 @@ int smtp_helo(SMTP_STATE *state)
|
||||
/* Ignored later if we already sent STARTTLS. */
|
||||
if ((discard_mask & EHLO_MASK_STARTTLS) == 0)
|
||||
session->features |= SMTP_FEATURE_STARTTLS;
|
||||
} else if (strcasecmp(word, "REQUIRETLS") == 0) {
|
||||
if ((discard_mask & EHLO_MASK_REQUIRETLS) == 0
|
||||
&& (state->misc_flags & SMTP_MISC_FLAG_IN_STARTTLS))
|
||||
session->features |= SMTP_FEATURE_REQUIRETLS;
|
||||
#endif
|
||||
#ifdef USE_SASL_AUTH
|
||||
} else if (var_smtp_sasl_enable
|
||||
@ -661,7 +665,8 @@ int smtp_helo(SMTP_STATE *state)
|
||||
*/
|
||||
if ((session->features & SMTP_FEATURE_SMTPUTF8) == 0
|
||||
&& DELIVERY_REQUIRES_SMTPUTF8)
|
||||
return (smtp_mesg_fail(state, DSN_BY_LOCAL_MTA,
|
||||
return (smtp_misc_fail(state, SMTP_MISC_FAIL_SOFT_NON_FINAL,
|
||||
DSN_BY_LOCAL_MTA,
|
||||
SMTP_RESP_FAKE(&fake, "5.6.7"),
|
||||
"SMTPUTF8 is required, "
|
||||
"but was not offered by host %s",
|
||||
@ -679,6 +684,35 @@ int smtp_helo(SMTP_STATE *state)
|
||||
session->features |= SMTP_FEATURE_8BITMIME;
|
||||
}
|
||||
|
||||
/*
|
||||
* Require that the server announces REQUIRETLS when the sender requested
|
||||
* REQUIRETLS. Return the message as undeliverable only when there are no
|
||||
* more alternative MX hosts.
|
||||
*/
|
||||
#ifdef USE_TLS
|
||||
if (var_requiretls_enable
|
||||
&& (request->sendopts & SOPT_REQUIRETLS_ESMTP) != 0
|
||||
&& (state->misc_flags & SMTP_MISC_FLAG_IN_STARTTLS) != 0
|
||||
&& (session->features & SMTP_FEATURE_REQUIRETLS) == 0) {
|
||||
if (state->enforce_requiretls) {
|
||||
return (smtp_misc_fail(state, SMTP_MISC_FAIL_SOFT_NON_FINAL,
|
||||
DSN_BY_LOCAL_MTA,
|
||||
SMTP_RESP_FAKE(&fake, "5.7.30"),
|
||||
"REQUIRETLS Failure: Sender requested "
|
||||
"delivery wth REQUIRETLS, but no mail "
|
||||
"server was found with REQUIRETLS "
|
||||
"support. The last attempted server "
|
||||
"was %s", session->namaddr));
|
||||
} else {
|
||||
msg_info("REQUIRETLS Debug: Sender requested delivery wth "
|
||||
"REQUIRETLS, but no mail server was found with "
|
||||
"REQUIRETLS support. The last attempted server was "
|
||||
"%s", session->namaddr);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We use SMTP command pipelining if the server said it supported it.
|
||||
* Since we use blocking I/O, RFC 2197 says that we should inspect the
|
||||
@ -1143,7 +1177,7 @@ static int smtp_start_tls(SMTP_STATE *state)
|
||||
if (PLAINTEXT_FALLBACK_OK_AFTER_STARTTLS_FAILURE)
|
||||
RETRY_AS_PLAINTEXT;
|
||||
return (smtp_misc_fail(state, state->tls->level == TLS_LEV_MAY ?
|
||||
SMTP_NOTHROTTLE : SMTP_THROTTLE,
|
||||
SMTP_MISC_FAIL_NONE : SMTP_MISC_FAIL_THROTTLE,
|
||||
DSN_BY_LOCAL_MTA,
|
||||
SMTP_RESP_FAKE(&fake, "4.7.5"),
|
||||
"Cannot start TLS: handshake failure"));
|
||||
@ -1188,6 +1222,31 @@ static int smtp_start_tls(SMTP_STATE *state)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Require a server certificate match when the sender requested
|
||||
* REQUIRETLS. Return the message as undeliverable only when
|
||||
* there are no more alternative MX hosts.
|
||||
*/
|
||||
if (var_requiretls_enable
|
||||
&& (state->request->sendopts & SOPT_REQUIRETLS_ESMTP)) {
|
||||
if (state->enforce_requiretls) {
|
||||
return (smtp_misc_fail(state, SMTP_MISC_FAIL_SOFT_NON_FINAL,
|
||||
DSN_BY_LOCAL_MTA,
|
||||
SMTP_RESP_FAKE(&fake, "5.7.10"),
|
||||
"REQUIRETLS Failure: Sender "
|
||||
"requested a TLS server "
|
||||
"certificate match, but no "
|
||||
"match was found. The last "
|
||||
"attempted server was %s",
|
||||
session->namaddr));
|
||||
} else {
|
||||
msg_info("REQUIRETLS Debug: Sender requested a TLS "
|
||||
"server certificate match, but no match was "
|
||||
"found. The last attempted server was %s",
|
||||
session->namaddr);
|
||||
}
|
||||
}
|
||||
return (smtp_site_fail(state, DSN_BY_LOCAL_MTA,
|
||||
SMTP_RESP_FAKE(&fake, "4.7.5"),
|
||||
"Server certificate not verified"));
|
||||
@ -1778,7 +1837,22 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state,
|
||||
if ((session->features & SMTP_FEATURE_SMTPUTF8) != 0
|
||||
&& (request->sendopts & SMTPUTF8_FLAG_REQUESTED) != 0)
|
||||
vstring_strcat(next_command, " SMTPUTF8");
|
||||
/* TODO(wietse) REQUIRETLS. */
|
||||
|
||||
/*
|
||||
* Request REQUIRETLS when the remote SMTP server supports
|
||||
* REQUIRETLS and the sender requested REQUIRETLS.
|
||||
*/
|
||||
#ifdef USE_TLS
|
||||
if (var_requiretls_enable
|
||||
&& (request->sendopts & SOPT_REQUIRETLS_ESMTP) != 0) {
|
||||
if ((session->features & SMTP_FEATURE_REQUIRETLS) != 0)
|
||||
vstring_strcat(next_command, " REQUIRETLS");
|
||||
else if (state->enforce_requiretls)
|
||||
msg_panic("Can't happen: must enforce REQUIRETLS, but "
|
||||
"host %s did not announce REQUIRETLS support",
|
||||
session->namaddr);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We authenticate the local MTA only, but not the sender.
|
||||
|
@ -82,6 +82,9 @@ SMTP_STATE *smtp_state_alloc(void)
|
||||
state->iterator->saved_dest = vstring_alloc(100);
|
||||
#ifdef USE_TLSRPT
|
||||
state->tlsrpt = 0;
|
||||
#endif
|
||||
#ifdef USE_TLS
|
||||
state->enforce_requiretls = 0;
|
||||
#endif
|
||||
if (var_smtp_cache_conn) {
|
||||
state->dest_label = vstring_alloc(10);
|
||||
|
@ -33,9 +33,9 @@
|
||||
/* int exception;
|
||||
/* const char *description;
|
||||
/* AUXILIARY FUNCTIONS
|
||||
/* int smtp_misc_fail(state, throttle, mta_name, resp, format, ...)
|
||||
/* int smtp_misc_fail(state, flags, mta_name, resp, format, ...)
|
||||
/* SMTP_STATE *state;
|
||||
/* int throttle;
|
||||
/* int flags;
|
||||
/* const char *mta_name;
|
||||
/* SMTP_RESP *resp;
|
||||
/* const char *format;
|
||||
@ -91,8 +91,11 @@
|
||||
/*
|
||||
/* smtp_misc_fail() provides a more detailed interface than
|
||||
/* smtp_site_fail() and smtp_mesg_fail(), which are convenience
|
||||
/* wrappers around smtp_misc_fail(). The throttle argument
|
||||
/* is either SMTP_THROTTLE or SMTP_NOTHROTTLE; it is used only
|
||||
/* wrappers around smtp_misc_fail(). The flags argument is either
|
||||
/* SMTP_MISC_FAIL_NONE or the bitwise OR of SMTP_MISC_FAIL_THROTTLE
|
||||
/* (throttle the destination) and/or SMTP_MISC_FAIL_SOFT_NON_FINAL
|
||||
/* (if the server was not the last one to try, treat a hard error
|
||||
/* as a soft error); SMTP_MISC_FAIL_THROTTLE is used only
|
||||
/* in the "soft error, final server" policy, and determines
|
||||
/* whether a destination will be marked as problematic.
|
||||
/*
|
||||
@ -210,7 +213,7 @@ static void smtp_check_code(SMTP_SESSION *session, int code)
|
||||
|
||||
/* smtp_bulk_fail - skip, defer or bounce recipients, maybe throttle queue */
|
||||
|
||||
static int smtp_bulk_fail(SMTP_STATE *state, int throttle_queue)
|
||||
static int smtp_bulk_fail(SMTP_STATE *state, int flags)
|
||||
{
|
||||
DELIVER_REQUEST *request = state->request;
|
||||
SMTP_SESSION *session = state->session;
|
||||
@ -220,8 +223,21 @@ static int smtp_bulk_fail(SMTP_STATE *state, int throttle_queue)
|
||||
int aggregate_status;
|
||||
int soft_error = (STR(why->status)[0] == '4');
|
||||
int soft_bounce_error = (STR(why->status)[0] == '5' && var_soft_bounce);
|
||||
int throttle_queue = (flags & SMTP_MISC_FAIL_THROTTLE);
|
||||
int nrcpt;
|
||||
|
||||
/*
|
||||
* Sanity check.
|
||||
*/
|
||||
if ((flags & SMTP_MISC_FAIL_SOFT_NON_FINAL) != 0) {
|
||||
if (soft_error) {
|
||||
msg_warn("smtp_bulk_fail: ignoring SMTP_MISC_FAIL_SOFT_NON_FINAL "
|
||||
"for a soft error");
|
||||
} else {
|
||||
soft_error = (state->misc_flags & SMTP_MISC_FLAG_FINAL_SERVER) == 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Don't defer the recipients just yet when this error qualifies them for
|
||||
* delivery to a backup server. Just log something informative to show
|
||||
@ -302,7 +318,7 @@ int smtp_sess_fail(SMTP_STATE *state)
|
||||
* because this error information is collected by a routine that
|
||||
* terminates BEFORE the error is reported.
|
||||
*/
|
||||
return (smtp_bulk_fail(state, SMTP_THROTTLE));
|
||||
return (smtp_bulk_fail(state, SMTP_MISC_FAIL_THROTTLE));
|
||||
}
|
||||
|
||||
/* vsmtp_fill_dsn - fill in temporary DSN structure */
|
||||
@ -342,7 +358,7 @@ static void vsmtp_fill_dsn(SMTP_STATE *state, const char *mta_name,
|
||||
|
||||
/* smtp_misc_fail - maybe throttle queue; skip/defer/bounce all recipients */
|
||||
|
||||
int smtp_misc_fail(SMTP_STATE *state, int throttle, const char *mta_name,
|
||||
int smtp_misc_fail(SMTP_STATE *state, int flags, const char *mta_name,
|
||||
SMTP_RESP *resp, const char *format,...)
|
||||
{
|
||||
va_list ap;
|
||||
@ -360,7 +376,7 @@ int smtp_misc_fail(SMTP_STATE *state, int throttle, const char *mta_name,
|
||||
/*
|
||||
* Skip, defer or bounce recipients, and throttle this queue.
|
||||
*/
|
||||
return (smtp_bulk_fail(state, throttle));
|
||||
return (smtp_bulk_fail(state, flags));
|
||||
}
|
||||
|
||||
/* smtp_rcpt_fail - skip, defer, or bounce recipient */
|
||||
@ -472,5 +488,5 @@ int smtp_stream_except(SMTP_STATE *state, int code, const char *description)
|
||||
* falling back to plaintext, because RETRY_AS_PLAINTEXT clears the
|
||||
* FINAL_SERVER flag.
|
||||
*/
|
||||
return (smtp_bulk_fail(state, SMTP_THROTTLE));
|
||||
return (smtp_bulk_fail(state, SMTP_MISC_FAIL_THROTTLE));
|
||||
}
|
||||
|
@ -57,6 +57,7 @@
|
||||
/* RFC 6531 (Internationalized SMTP)
|
||||
/* RFC 6533 (Internationalized Delivery Status Notifications)
|
||||
/* RFC 7505 ("Null MX" No Service Resource Record)
|
||||
/* RFC 8689 (SMTP REQUIRETLS extension)
|
||||
/* DIAGNOSTICS
|
||||
/* Problems and transactions are logged to \fBsyslogd\fR(8)
|
||||
/* or \fBpostlogd\fR(8).
|
||||
@ -370,7 +371,7 @@
|
||||
/* .IP "\fBsmtpd_sasl_mechanism_filter (!external, static:rest)\fR"
|
||||
/* If non-empty, a filter for the SASL mechanism names that the
|
||||
/* Postfix SMTP server will announce in the EHLO response.
|
||||
/* STARTTLS SUPPORT CONTROLS
|
||||
/* TLS SUPPORT CONTROLS
|
||||
/* .ad
|
||||
/* .fi
|
||||
/* Detailed information about STARTTLS configuration may be
|
||||
@ -544,7 +545,12 @@
|
||||
/* Request that remote SMTP clients send an RFC7250 raw public key
|
||||
/* instead of an X.509 certificate, when asking for or requiring client
|
||||
/* authentication.
|
||||
/* OBSOLETE STARTTLS CONTROLS
|
||||
/* .PP
|
||||
/* Available in Postfix version 3.10 and later:
|
||||
/* .IP "\fBrequiretls_enable (yes)\fR"
|
||||
/* Enable support for the ESMTP verb "REQUIRETLS", defined in RFC
|
||||
/* 8689.
|
||||
/* OBSOLETE TLS CONTROLS
|
||||
/* .ad
|
||||
/* .fi
|
||||
/* The following configuration parameters exist for compatibility
|
||||
@ -2105,6 +2111,11 @@ static int ehlo_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
|
||||
EHLO_APPEND(state, "SMTPUTF8");
|
||||
if ((discard_mask & EHLO_MASK_CHUNKING) == 0)
|
||||
EHLO_APPEND(state, "CHUNKING");
|
||||
#ifdef USE_TLS
|
||||
if (var_requiretls_enable && (discard_mask & EHLO_MASK_REQUIRETLS) == 0
|
||||
&& state->tls_context != 0)
|
||||
EHLO_APPEND(state, "REQUIRETLS");
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Send the reply.
|
||||
@ -2219,7 +2230,8 @@ static int mail_open_stream(SMTPD_STATE *state)
|
||||
cleanup_flags |= CLEANUP_FLAG_SMTPUTF8;
|
||||
else
|
||||
cleanup_flags |= smtputf8_autodetect(MAIL_SRC_MASK_SMTPD);
|
||||
/* TODO(wietse) REQUIRETLS. */
|
||||
if (state->flags & SMTPD_FLAG_REQUIRETLS)
|
||||
cleanup_flags |= CLEANUP_FLAG_REQUIRETLS;
|
||||
state->dest = mail_stream_service(MAIL_CLASS_PUBLIC,
|
||||
var_cleanup_service);
|
||||
if (state->dest == 0
|
||||
@ -2679,6 +2691,13 @@ static int mail_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
|
||||
&& (state->ehlo_discard_mask & EHLO_MASK_SMTPUTF8) == 0
|
||||
&& strcasecmp(arg, "SMTPUTF8") == 0) { /* RFC 6531 */
|
||||
/* Already processed early. */ ;
|
||||
#ifdef USE_TLS
|
||||
} else if (var_requiretls_enable
|
||||
&& state->tls_context != 0
|
||||
&& (state->ehlo_discard_mask & EHLO_MASK_REQUIRETLS) == 0
|
||||
&& strcasecmp(arg, "REQUIRETLS") == 0) { /* RFC 8689 */
|
||||
state->flags |= SMTPD_FLAG_REQUIRETLS;
|
||||
#endif
|
||||
#ifdef USE_SASL_AUTH
|
||||
} else if (strncasecmp(arg, "AUTH=", 5) == 0) {
|
||||
if ((err = smtpd_sasl_mail_opt(state, arg + 5)) != 0) {
|
||||
|
@ -209,6 +209,7 @@ typedef struct {
|
||||
#define SMTPD_FLAG_AUTH_USED (1<<2) /* don't reuse SASL state */
|
||||
#define SMTPD_FLAG_SMTPUTF8 (1<<3) /* RFC 6531/2 transaction */
|
||||
#define SMTPD_FLAG_NEED_MILTER_ABORT (1<<4) /* undo milter_mail_event() */
|
||||
#define SMTPD_FLAG_REQUIRETLS (1<<5) /* RFC 8689 */
|
||||
|
||||
#define SMTPD_NOTE_BARE_LF (1<<0) /* saw at least one bare LF */
|
||||
|
||||
|
@ -60,6 +60,10 @@
|
||||
/* Request that match_list_match() logs a warning and returns
|
||||
/* zero (with list->error set to a non-zero dictionary error
|
||||
/* code) instead of raising a fatal run-time error.
|
||||
/* .IP MATCH_FLAG_NOFILE
|
||||
/* Disable special handling for /file/name.
|
||||
/* .IP MATCH_FLAG_NODICT
|
||||
/* Disable special handling for type:name.
|
||||
/* .RE
|
||||
/* Specify MATCH_FLAG_NONE to request none of the above.
|
||||
/* .IP pattern_list
|
||||
@ -84,6 +88,9 @@
|
||||
/* IBM T.J. Watson Research
|
||||
/* P.O. Box 704
|
||||
/* Yorktown Heights, NY 10598, USA
|
||||
/*
|
||||
/* Wietse Venema
|
||||
/* porcupine.org
|
||||
/*--*/
|
||||
|
||||
/* System library. */
|
||||
@ -152,7 +159,8 @@ static ARGV *match_list_parse(MATCH_LIST *match_list, ARGV *pat_list,
|
||||
if (*item == 0)
|
||||
/* No graceful degradation for this... */
|
||||
msg_fatal("%s: no pattern after '!'", match_list->pname);
|
||||
if (*item == '/') { /* /file/name */
|
||||
if (*item == '/' /* /file/name */
|
||||
&& (match_list->flags & MATCH_FLAG_NOFILE) == 0) {
|
||||
if ((fp = vstream_fopen(item, O_RDONLY, 0)) == 0) {
|
||||
/* Replace unusable pattern with pseudo table. */
|
||||
vstring_sprintf(buf, "%s:%s", DICT_TYPE_NOFILE, item);
|
||||
@ -169,7 +177,8 @@ static ARGV *match_list_parse(MATCH_LIST *match_list, ARGV *pat_list,
|
||||
if (vstream_fclose(fp))
|
||||
msg_fatal("%s: read file %s: %m", myname, item);
|
||||
}
|
||||
} else if (MATCH_DICTIONARY(item)) { /* type:table */
|
||||
} else if (MATCH_DICTIONARY(item) /* type:table */
|
||||
&&(match_list->flags & MATCH_FLAG_NODICT) == 0) {
|
||||
vstring_sprintf(buf, "%s%s(%o,%s)", match ? "" : "!",
|
||||
item, OPEN_FLAGS, dict_flags_str(DICT_FLAGS));
|
||||
map_type_name_flags = STR(buf) + (match == 0);
|
||||
|
@ -38,8 +38,10 @@ struct MATCH_LIST {
|
||||
#define MATCH_FLAG_NONE 0
|
||||
#define MATCH_FLAG_PARENT (1<<0)
|
||||
#define MATCH_FLAG_RETURN (1<<1)
|
||||
#define MATCH_FLAG_ALL (MATCH_FLAG_PARENT | MATCH_FLAG_RETURN)
|
||||
|
||||
#define MATCH_FLAG_NOFILE (1<<2)
|
||||
#define MATCH_FLAG_NODICT (1<<3)
|
||||
#define MATCH_FLAG_ALL (MATCH_FLAG_PARENT | MATCH_FLAG_RETURN | \
|
||||
MATCH_FLAG_NOFILE | MATCH_FLAG_NODICT)
|
||||
extern MATCH_LIST *match_list_init(const char *, int, const char *, int,...);
|
||||
extern int match_list_match(MATCH_LIST *,...);
|
||||
extern void match_list_free(MATCH_LIST *);
|
||||
|
Loading…
x
Reference in New Issue
Block a user