On 4/15/21 11:00 AM, Wietse Venema wrote:
> Demi Marie Obenour:
>> Would the following be a good idea?
> [a bunch of port-dependent behavior]
> 
> That is all good and well, but this needs to be made configurable.
> 
> I boldly assume this will use the xxx_tls_wrapper_mode parameters,
> instead of replacing them with some totally different mechanism.

I don’t particularly care about the mechanism.  Since this already
exists, using it is obviously preferable to writing a new one.

> Possible options:
> 
> smtpd_tls_wapper_mode =
>       Something that depends on an inbound port which is defined
>       in master.cf. As of Postfix 3.3, the read-only "service_name"
>       parameter contains the first field of a master.cf entry,
>       in the form of a port, service-name, host:port, host:service-name,
>       or UNIX-domain pathname. Extracting or matching the port
>       or service-name portion is beyond what is currently possible
>       with Postfix conditional parameter expansions. From a
>       security standpoint, using this information is OK because
>       master.cf is writable by the super-user only, and because
>       the Postfix master daemon is a trusted process.
> 
> smtp_tls_wrapper_mode =
>       Something that depends on an outbound port or service-name
>       that is specified in a delivery request in a next-hop
>       destination as host:port or host:service-name (this is based
>       on information from default_transport, relayhost, transport_maps,
>       or the sender-dependent versions of those). Basically,
>       this would make parameter evaluation dependent on data in
>       a delivery request. There is prior art for doing this in
>       the local delivery agent in very limited cases: luser_relay,
>       forward_path, and command_execution_directory. That had to
>       be implemented very carefully to avoid security problems.
> 
> So based on this we need 
> 
> 1) SMTP server: Add support to match the port or service name in
> in the service_name parameter (new parameter evaluation code,
> non-trivial), OR: make the port or service name available as another
> parameter (new code in daemon library, trivial and safe). In both
> cases, make the smtpd_ls_wrapper_mode default value port dependent.

Exactly.

> 2) SMTP client: Postpone the evaluation of smtp_tls_wrapper_mode
> until after a delivery request is received, add support for
> request-dependent $parameter expansion in smtp_tls_wrapper_mode,
> and make that bullet-proof. Doing this for smtp_tls_wrapper_mode
> can be made safe; doing this for more SMTP client parameters would
> require a much more extensive security analysis.

From my perspective, SMTP + STARTTLS is equivalent to SMTPS, except
that they use different port numbers and the latter uses fewer
round-trips.  Obviously, downgrade from TLS to no TLS is bad, but
switching between SMTP + STARTTLS and SMTPS is fine.

That said, this appears to be more complicated than I thought it
would be.  Do you consider the extra complexity (and attack surface)
justified?

>       Wietse

Demi

Attachment: OpenPGP_0xB288B55FFF9C22C1.asc
Description: OpenPGP public key

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to