My github Postfix repo: https://github.com/vdukhovni/postfix
has a "tlsfallback" branch, which extends Postfix with two new pairs (smtp and lmtp flavours) of parameters (postconf(5) documentation snippets below). I am soliciting feedback on the interface and any operational experience if anyone is willing to test the code on a live system. You can test just the "audit" feature if you wish, if audit-only "security" (log authentication failure and deliver anyway) is not your cup of tea. $ git clone https://github.com/vdukhovni/postfix.git $ cd postfix/postfix $ git checkout tlsfallback set shared=yes/no dynamimaps=yes/no to taste, tweak other compile-time options and build (see INSTALL file for details): $ make -f Makefile.init shared=yes dynamicmaps=yes \ CCARGS="... -DUSE_TLS ..." \ AUXLIBS="... -lssl -lcrypto ..." \ AUXLIBS_CDB=... \ AUXLIBS_PCRE=... \ ... \ makefiles $ make Install the new code: # make upgrade Even if running the code is too bleeding-edge, comments based on the documentation are welcome. Do you want/need the new features? Is the audit interface too complex (it errs on the side of flexibility, perhaps there should a handful of named templates whose definitions could be changed by the adventurous, but most users could use a standard setting?) Documentation snippets: ----------------------- smtp_tls_fallback_level (default: empty) Optional fallback levels for authenticated TLS levels. Specify a white-space or comma-separate list of policy_level=fallback_level pairs. The policy_level must require authentication (be one of dane, dane-only, fingerprint, verify, secure). The fallback_level must be "encrypt" or "may". When an authenticated connection with a policy level equal to one of the specified values cannot be established, delivery will proceed at the fallback level if possible. A warning will be logged indicating the fallback reason. You can use smtp_tls_audit_template to record the TLS security status for each delivery. The TLS policy table can be used to specify a destination-specific fallback strategy via the "fallback" policy attribute. The value of the "fallback" attribute, if specified, must be "may", "encrypt" or "none". If not "none", this specifies the fallback level for the des- tination in question. If the attribute value is "none", fallback is suppressed for the destination even if enabled via a global setting of smtp_tls_fallback_level. Example: /etc/postfix/main.cf: # When authentication fails, log a warning and deliver anyway # over an unauthenticated TLS connection. # smtp_tls_fallback_level = dane=encrypt, dane-only=encrypt, fingerprint=encrypt, verify=encrypt, secure=encrypt indexed = ${default_database_type}:${config_directory}/ smtp_tls_policy_maps = ${indexed}tls-policy /etc/postfix/tls-policy: # No fallback for example.com example.com secure fallback=none # For example.net tolerate cleartext fallback example.net dane fallback=may This feature is available in Postfix 2.12 and later. smtp_tls_audit_template (default: empty) Optional template for tls audit logging at the completion of each mes- sage data transfer. If empty (the default setting) no TLS audit log entries are generated. The following $name expansions are done on smtp_tls_audit_template: $relay The remote SMTP server. $level The effective TLS security level after any fallback. $policy The desired TLS security level before any fallback, undefined if no fallback took place. $auth The authentication level of the remote SMTP server. One of "Cleartext", "Anonymous", "Untrusted", "Trusted" or "Verified". $protocol The TLS protocol version, defined only when TLS is used. $cipher The TLS cipher name, defined only when TLS is used. $cert_digest The digest of the remote SMTP server's certificate, defined only when TLS is used and the remote server presented a certificate. The digest algorithm is that specified via smtp_tls_finger- print_digest. $spki_digest The digest of the remote SMTP server's public key (Subject Pub- lic Key Info or SPKI from X.509), defined only when TLS is used and the remote server presented a certificate. The digest algo- rithm is that specified via smtp_tls_fingerprint_digest. ${name?value} Expands to value when $name is non-empty. ${name:value} Expands to value when $name is empty. Example: /etc/postfix/main.cf: smtp_tls_audit_template = tlsaudit: relay=${relay}${auth?, auth=${auth}}${level?, level=${level}}${policy?, policy=${policy}}${protocol?, protocol=${protocol}}${cipher?, cipher=${cipher}} This feature is available in Postfix 2.12 and later. -- Viktor.