]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-3.10-20250131
authorWietse Z Venema <wietse@porcupine.org>
Fri, 31 Jan 2025 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <ietf-dane@dukhovni.org>
Sat, 1 Feb 2025 03:07:10 +0000 (14:07 +1100)
postfix/HISTORY
postfix/README_FILES/TLSRPT_README
postfix/html/TLSRPT_README.html
postfix/proto/TLSRPT_README.html
postfix/proto/stop.double-proto-html
postfix/proto/stop.spell-proto-html
postfix/src/global/mail_version.h
postfix/src/tls/tlsrpt_wrapper.c

index 83f568404c5d1701acb423af6c3ef6479d5ebca5..0ecbb813adb5ee7e9b6132879e104ecbe55f0a4d 100644 (file)
@@ -28887,4 +28887,14 @@ Apologies for any names omitted.
 
        Cleanup: a few remaining pre-ANSI C function definitions
        in the lowest-level Postfix code. Files: util/binhash.c,
-       util/close_on_exec.c, util/non_blocking.c.
+       util/close_on_exec.c, util/non_blocking.c, util/ring.c.
+
+20250130
+
+       Updated the TLSRPT_README introduction, github info, and
+       build instructions. File: proto/TLSRPT_README.html.
+
+20250131
+
+       Debug: verbose logging for the tlsrpt_wrapper functions.
+       File: tls/tlsrpt_wrapper.c.
index 2553348e4b3cf3d1d66d1b30af35414c0ab794a1..8c8c2455306fcc4b1cf1d53902c9a547d3c395f7 100644 (file)
@@ -30,14 +30,12 @@ successful and failed SMTP over TLS connections to domain example.com, and to
 report those summaries via email to the specified address. Instead of mailto:,
 a policy may specify an https: destination.
 
-The high-level diagram shows how Postfix reports summaries to domains that
-publish a TLSRPT policy.
+The high-level diagram below shows how TLS handshake success and failure events
+from Postfix are collected and processed into daily summary reports.
 
-    Postfix SMTP and     TLSRPT client      TLSRPT summary      Email or HTTP
-       TLS client    -->    library     -->    generator    -->    delivery
-        engines
-
-When Postfix TLSRPT support is enabled (with "smtp_tlsrpt_enable = yes"):
+     Postfix SMTP and      TLSRPT client     TLSRPT collector,    Email or HTTP
+    TLS client engines -> library (linked ->   fetcher, and    ->   delivery
+                           into Postfix)     summary generator
 
   * The Postfix SMTP and TLS client engines will generate a "success" or
     "failure" event for each TLS handshake,
@@ -45,9 +43,13 @@ When Postfix TLSRPT support is enabled (with "smtp_tlsrpt_enable = yes"):
   * They will pass those events to an in-process TLSRPT client library that
     sends data over a local socket to
 
-  * A TLSRPT report generator that produces daily summary reports.
+  * A local TLSRPT collector that runs on each Postfix machine. A TLSRPT
+    fetcher gathers information from individual collectors, and a central
+    TLSRPT report generator produces daily summary reports.
 
-The TLSRPT client library and report generator are maintained by sys4.
+The TLSRPT client library, and the infrastructure to collect, fetch, and report
+TLSRPT information are maintained by sys4 at https://github.com/sys4/libtlsrpt
+and https://github.com/sys4/tlsrpt-reporter, respectively.
 
 The Postfix implementation supports both DANE (Postfix built-in) and MTA-STS
 (through an smtp_tls_policy_maps plug-in).
@@ -64,33 +66,35 @@ These instructions assume that you build Postfix from source code as described
 in the INSTALL document. Some modification may be required if you build Postfix
 from a vendor-specific source package.
 
-The Postfix TLSRPT client builds on a TLSRPT client library whose source code
-can be obtained from:
+The Postfix TLSRPT client builds on a TLSRPT library which may be available as
+a built package (rpm, deb, etc.), or which you can build from source code from:
 
-    https://github.com/sys4/tlsrpt
+    https://github.com/sys4/libtlsrpt
 
 The library is typically installed as a header file in /usr/local/include/
 tlsrpt.h and an object library in /usr/local/lib/libtlsrpt.a or /usr/local/lib/
 libtlsrpt.so. The actual pathnames will depend on OS platform conventions.
 
 In order to build Postfix with TLSRPT support, you will need to add compiler
-options -DUSE_TLSRPT (to build with TLSRPT support), and -I (with the directory
+options -DUSE_TLSRPT (to build with TLSRPT support) and -I (with the directory
 containing the tlsrpt.h header file), and you will need to add linker options
 to link with the TLSRPT client library, for example:
 
     make -f Makefile.init makefiles \
       "CCARGS=-DUSE_TLSRPT -I/usr/local/include" \
-      "AUXLIBS=-L/usr/local/lib -ltlsrpt"
+      "AUXLIBS=-L/usr/local/lib -Wl,-rpath,/usr/local/lib -ltlsrpt"
+
+(On Solaris systems you may need to use "-Wl,-R" instead of "-Wl,-rpath".)
 
 Then, just run 'make'.
 
     Note: if your build command line already has CCARGS or AUXLIBS settings,
     then simply append the above settings to the existing CCARGS or AUXLIBS
-    values.
+    values:
 
-        make -f Makefile.init makefiles \
-          "CCARGS=existing settings... -DUSE_TLSRPT -I/usr/local/include" \
-          "AUXLIBS=existing settings... -L/usr/local/lib -ltlsrpt"
+    make -f Makefile.init makefiles \
+      "CCARGS=... -DUSE_TLSRPT -I/usr/local/include" \
+      "AUXLIBS=... -L/usr/local/lib -Wl,-rpath,/usr/local/lib -ltlsrpt"
 
 T\bTu\bur\brn\bni\bin\bng\bg o\bon\bn T\bTL\bLS\bSR\bRP\bPT\bT
 
@@ -98,20 +102,29 @@ After installing Postfix TLSRPT support, you can enable TLSRPT support in
 main.cf like this:
 
     smtp_tlsrpt_enable = yes
-    smtp_tlsrpt_socket_name = /path/to/socket
+    smtp_tlsrpt_socket_name = path/to/socket
 
-The smtp_tlsrpt_socket_name parameter specifies an absolute pathname, or a
-pathname that is relative to $queue_directory.
+The smtp_tlsrpt_socket_name parameter specifies either an absolute pathname, or
+pathname that is relative to $queue_directory.
 
-    Note: the recommended socket location is still to be determined. A good
-    socket location would be under the Postfix queue directory, for example:
+Notes:
+
+  * The recommended socket location is still to be determined. A good socket
+    location would be under the Postfix queue directory, for example:
     "smtp_tlsrpt_socket_name = run/tlsrpt/tlsrpt.sock". The advantage of using
     a relative name is that it will work equally well whether or not Postfix
     chroot is turned on.
 
-Do not specify a location under a directory such as private or public that is
-already used by Postfix programs. Only Postfix programs should create sockets
-there.
+  * Regardless of whether Postfix chroot is enabled, the TLSRPT receiver
+    (tlsrpt_collectd) will need to be configured with the socket's absolute
+    pathname.
+
+  * Do not specify a TLSRPT socket location under a Postfix socket directory
+    such as private or public. Only Postfix programs should create sockets
+    there.
+
+For details on how to run the TLSRPT collection and reporting infrastructure,
+see the documentation at https://github.com/sys4/tlsrpt-reporter.
 
 T\bTL\bLS\bSR\bRP\bPT\bT S\bSt\bta\bat\btu\bus\bs l\blo\bog\bgg\bgi\bin\bng\bg
 
@@ -176,16 +189,17 @@ Notes:
 D\bDe\bel\bli\biv\bve\ber\bri\bin\bng\bg T\bTL\bLS\bSR\bRP\bPT\bT s\bsu\bum\bmm\bma\bar\bri\bie\bes\bs v\bvi\bia\ba e\bem\bma\bai\bil\bl
 
 RFC 8460 Section 3 specifies that an MTA must not enforce TLS security when
-sending failure reports via email. However, Postfix currently has no way to
-request that TLS enforcement will be disabled when submitting an email message.
+sending failure reports via email.
 
 Options:
 
-  * Specify the "T\bTL\bLS\bS-\b-R\bRe\beq\bqu\bui\bir\bre\bed\bd:\b: n\bno\bo" message header, defined in RFC 8689, to
-    reduce the TLS security level to "m\bma\bay\by" (that is, do not verify remote SMTP
-    server certificates, and fall back to plaintext if TLS is unavailable).
+  * In an email report, specify the "T\bTL\bLS\bS-\b-R\bRe\beq\bqu\bui\bir\bre\bed\bd:\b: n\bno\bo" message header, defined
+    in RFC 8689, to reduce the Postfix SMTP client TLS security level to "m\bma\bay\by"
+    (that is, do not verify remote SMTP server certificates, and fall back to
+    plaintext if TLS is unavailable).
 
-    This feature is available in Postfix 3.10 and later.
+    This feature is available in Postfix 3.10 and later. If your outbound MTAs
+    run an older version, you can use one of the options described below.
 
   * Do nothing. When TLS security enforcement is required but fails, a TLSRPT
     summary message will be delayed until the problem is addressed, or until
@@ -193,10 +207,11 @@ Options:
     real-time monitoring service; it takes on average 12 hours before a failure
     is reported through TLSRPT.
 
-  * Exclude the sender of TLSRPT summaries from TLS security enforcement.
-    Implement the configuration below on outbound MTA instances (replace
-    noreply-smtp-tls-reporting@example.com with your actual report generator's
-    sender address):
+  * On outbound MTAs that don't support the "T\bTL\bLS\bS-\b-R\bRe\beq\bqu\bui\bir\bre\bed\bd:\b: n\bno\bo" header feature
+    (such as Postfix 3.9 and earlier), disable TLS security enforcement for the
+    sender of TLSRPT summaries. Implement the configuration below on outbound
+    MTA instances (replace noreply-smtp-tls-reporting@example.com with your
+    actual report generator's sender address):
 
     /etc/postfix/main.cf:
         # Limitation: this setting is overruled with transport_maps.
index af99332574a98a4b0d2fd3530b4d5aad95e2de52..602857f0b8c63eae22d7b84ba32f33238a91e6ac 100644 (file)
@@ -55,32 +55,33 @@ summaries of successful and failed SMTP over TLS connections to domain
 specified address. Instead of <tt>mailto:</tt>, a policy may specify an
 <tt>https:</tt> destination. </p>
 
-<p> The high-level diagram shows how Postfix reports  summaries to
-domains that publish a TLSRPT policy.
+<p> The high-level diagram below shows how TLS handshake success
+and failure events from Postfix are collected and processed into
+daily summary reports.  </p>
 
 <blockquote>
 
 <table>
 
-<tr> <td align="center" bgcolor="#f0f0ff"> Postfix SMTP and<br> TLS
-client engines </td> <td> <tt> --&gt; </tt> </td>
+<tr> <td align="center" bgcolor="#f0f0ff"> Postfix SMTP and TLS
+client engines </td> <td> <tt> &rarr; </tt> </td>
 
-<td align="center" bgcolor="#f0f0ff"> TLSRPT client <br> library
-</td> <td> <tt> --&gt; </tt> </td>
+<td align="center" bgcolor="#f0f0ff"> <a
+href="https://github.com/sys4/libtlsrpt">TLSRPT client library </a>
+(linked into Postfix) </td> <td> <tt> &rarr; </tt> </td>
 
-<td align="center" bgcolor="#f0f0ff"> TLSRPT summary <br> generator
-</td> <td> <tt> --&gt; </tt> </td>
+<td align="center" bgcolor="#f0f0ff"> <a
+href="https://github.com/sys4/tlsrpt-reporter">TLSRPT collector,
+fetcher, and summary generator</a> </td> <td> <tt> &rarr; </tt>
+</td>
 
-<td align="center" bgcolor="#f0f0ff"> Email or HTTP <br> delivery
-</td> </tr>
+<td align="center" bgcolor="#f0f0ff"> Email or HTTP delivery </td>
+</tr>
 
 </table>
 
 </blockquote>
 
-<p> When Postfix TLSRPT support is enabled (with "<a href="postconf.5.html#smtp_tlsrpt_enable">smtp_tlsrpt_enable</a>
-= yes"): </p>
-
 <ul>
 
 <li> <p> The Postfix SMTP and TLS client engines will generate a
@@ -89,17 +90,20 @@ client engines </td> <td> <tt> --&gt; </tt> </td>
 <li> <p> They will pass those events to an in-process TLSRPT client
 library that sends data over a local socket to </p>
 
-<li> <p> A TLSRPT report generator that produces daily summary
-reports. </p>
+<li> <p> A local TLSRPT collector that runs on each Postfix machine.
+A TLSRPT fetcher gathers information from individual collectors,
+and a central TLSRPT report generator produces daily summary reports.
+</p>
 
 </ul>
 
-<p> The TLSRPT client library and report generator are maintained
-by sys4. </p>
+<p> The TLSRPT client library, and the infrastructure to collect,
+fetch, and report TLSRPT information are maintained by sys4 at
+<a href="https://github.com/sys4/libtlsrpt">https://github.com/sys4/libtlsrpt</a> and
+<a href="https://github.com/sys4/tlsrpt-reporter">https://github.com/sys4/tlsrpt-reporter</a>, respectively. </p>
 
 <p> The Postfix implementation supports both DANE (Postfix built-in)
-and MTA-STS (through an <a href="postconf.5.html#smtp_tls_policy_maps">smtp_tls_policy_maps</a> plug-in).
-</p>
+and MTA-STS (through an <a href="postconf.5.html#smtp_tls_policy_maps">smtp_tls_policy_maps</a> plug-in). </p>
 
 <p> The Postfix <a href="smtp.8.html">smtp(8)</a> client process implements the SMTP client
 engine. With "<a href="postconf.5.html#smtp_tls_connection_reuse">smtp_tls_connection_reuse</a> = no", the <a href="smtp.8.html">smtp(8)</a> client
@@ -116,11 +120,12 @@ code as described in the <a href="INSTALL.html">INSTALL</a> document. Some modif
 be required if you build Postfix from a vendor-specific source
 package. </p>
 
-<p> The Postfix TLSRPT client builds on a TLSRPT client library
-whose source code can be obtained from: </p>
+<p> The Postfix TLSRPT client builds on a TLSRPT library which may
+be available as a built package (rpm, deb, etc.), or which you can
+build from source code from: </p>
 
 <blockquote>
- <p> <a href="https://github.com/sys4/tlsrpt">https://github.com/sys4/tlsrpt</a> </p>
+<p> <a href="https://github.com/sys4/libtlsrpt">https://github.com/sys4/libtlsrpt</a> </p>
 </blockquote>
 
 <p> The library is typically installed as a header file in
@@ -130,7 +135,7 @@ actual pathnames will depend on OS platform conventions. </p>
 
 <p> In order to build Postfix with TLSRPT support, you will need
 to add compiler options <tt>-DUSE_TLSRPT</tt> (to build with TLSRPT
-support), and <tt>-I</tt> (with the directory containing the tlsrpt.h
+support) and <tt>-I</tt> (with the directory containing the tlsrpt.h
 header file), and you will need to add linker options to link with
 the TLSRPT client library, for example: </p>
 
@@ -138,28 +143,28 @@ the TLSRPT client library, for example: </p>
 <pre>
 make -f Makefile.init makefiles \
   "CCARGS=-DUSE_TLSRPT -I/usr/local/include" \
-  "AUXLIBS=-L/usr/local/lib -ltlsrpt"
+  "AUXLIBS=-L/usr/local/lib -Wl,-rpath,/usr/local/lib -ltlsrpt"
 </pre>
 </blockquote>
 
+<p> (On Solaris systems you may need to use "<tt>-Wl,-R</tt>" instead
+of "<tt>-Wl,-rpath</tt>".) </p>
+
 <p> Then, just run 'make'. </p>
 
 <blockquote>
 
 <p> Note: if your build command line already has CCARGS or AUXLIBS
 settings, then simply append the above settings to the existing CCARGS
-or AUXLIBS values. </p>
+or AUXLIBS values: </p>
 
-<blockquote>
 <pre>
 make -f Makefile.init makefiles \
-  "CCARGS=<i>existing settings...</i> -DUSE_TLSRPT -I/usr/local/include" \
-  "AUXLIBS=<i>existing settings...</i> -L/usr/local/lib -ltlsrpt"
+  "CCARGS=... -DUSE_TLSRPT -I/usr/local/include" \
+  "AUXLIBS=... -L/usr/local/lib -Wl,-rpath,/usr/local/lib -ltlsrpt"
 </pre>
 </blockquote>
 
-</blockquote>
-
 <h2> <a name="using"> Turning on TLSRPT </a> </h2>
 
 <p> After installing Postfix TLSRPT support, you can enable TLSRPT
@@ -168,27 +173,38 @@ support in <a href="postconf.5.html">main.cf</a> like this: </p>
 <blockquote>
 <pre>
 <a href="postconf.5.html#smtp_tlsrpt_enable">smtp_tlsrpt_enable</a> = yes
-<a href="postconf.5.html#smtp_tlsrpt_socket_name">smtp_tlsrpt_socket_name</a> = /path/to/socket
+<a href="postconf.5.html#smtp_tlsrpt_socket_name">smtp_tlsrpt_socket_name</a> = path/to/socket
 </pre>
 </blockquote>
 
-<p> The <a href="postconf.5.html#smtp_tlsrpt_socket_name">smtp_tlsrpt_socket_name</a> parameter specifies an absolute
-pathname, or a pathname that is relative to $<a href="postconf.5.html#queue_directory">queue_directory</a>. </p>
+<p> The <a href="postconf.5.html#smtp_tlsrpt_socket_name">smtp_tlsrpt_socket_name</a> parameter specifies either an
+absolute pathname, or a pathname that is relative to $<a href="postconf.5.html#queue_directory">queue_directory</a>.
+</p>
+
+<p> Notes: </p>
 
-<blockquote>
+<ul>
 
-<p> Note: the recommended socket location is still to be determined.
+<li> <p> The recommended socket location is still to be determined.
 A good socket location would be under the Postfix queue directory,
 for example: "<a href="postconf.5.html#smtp_tlsrpt_socket_name">smtp_tlsrpt_socket_name</a> = run/tlsrpt/tlsrpt.sock".
 The advantage of using a relative name is that it will work equally
 well whether or not Postfix chroot is turned on. </p>
 
-</blockquote>
+<li> <p> Regardless of whether Postfix chroot is enabled, the TLSRPT
+receiver (<tt>tlsrpt_collectd</tt>) will need to be configured with
+the socket's absolute pathname. </p>
 
-<p> Do not specify a location under a directory such as <tt>private</tt>
-or <tt>public</tt> that is already used by Postfix programs. Only Postfix
+<li> <p> Do not specify a TLSRPT socket location under a Postfix socket
+directory such as <tt>private</tt> or <tt>public</tt>. Only Postfix
 programs should create sockets there. </p>
 
+</ul>
+
+<p> For details on how to run the TLSRPT collection and reporting
+infrastructure, see the documentation at
+<a href="https://github.com/sys4/tlsrpt-reporter">https://github.com/sys4/tlsrpt-reporter</a>.
+
 <h2> <a name="logging"> TLSRPT Status logging </a> </h2>
 
 <p> With TLSRPT support turned on, the Postfix TLSRPT client will
@@ -268,19 +284,20 @@ have the details for why TLS authentication failed. </p>
 
 <p> <a href="https://datatracker.ietf.org/doc/html/rfc8460#section-3">RFC
 8460 Section 3</a> specifies that an MTA must not enforce TLS
-security when sending failure reports via email. However, Postfix
-currently has no way to request that TLS enforcement will be disabled
-when submitting an email message. </p>
+security when sending failure reports via email. </p>
 
 <p> Options:
 
 <ul>
 
-<li> <p> Specify the "<b>TLS-Required: no</b>" message header,
-defined in <a href="https://tools.ietf.org/html/rfc8689">RFC 8689</a>, to reduce the TLS security level to "<b>may</b>"
-(that is, do not verify remote SMTP server certificates, and fall
-back to plaintext if TLS is unavailable). <br> <br> This feature
-is available in Postfix 3.10 and later. </p>
+<li> <p> In an email report, specify the "<b>TLS-Required: no</b>"
+message header,
+defined in <a href="https://tools.ietf.org/html/rfc8689">RFC 8689</a>, to reduce the Postfix SMTP client TLS security
+level to "<b>may</b>" (that is, do not verify remote SMTP server
+certificates, and fall back to plaintext if TLS is unavailable).
+<br> <br> This feature is available in Postfix 3.10 and later. If
+your outbound MTAs run an older version, you can use one of the
+options described below. </p>
 
 <li> <p> Do nothing. When TLS security enforcement is required but
 fails, a TLSRPT summary message will be delayed
@@ -289,8 +306,9 @@ in the mail queue. Keep in mind that TLSRPT is not a real-time
 monitoring service; it takes on average 12 hours before a failure
 is reported through TLSRPT. </p>
 
-<li> <p> Exclude the sender of TLSRPT summaries from TLS security
-enforcement.
+<li> <p> On outbound MTAs that don't support the "<b>TLS-Required:
+no</b>" header feature (such as Postfix 3.9 and earlier), disable
+TLS security enforcement for the sender of TLSRPT summaries.
 Implement the configuration below on outbound MTA instances (replace
 noreply-smtp-tls-reporting@example.com with your actual report
 generator's sender address): </p>
index 1d6820d4e7b0fffe38f13c5c3e7cecad80e19d71..32a3fd9db0ee2c948207f100b98872f089badd6c 100644 (file)
@@ -55,32 +55,33 @@ summaries of successful and failed SMTP over TLS connections to domain
 specified address. Instead of <tt>mailto:</tt>, a policy may specify an
 <tt>https:</tt> destination. </p>
 
-<p> The high-level diagram shows how Postfix reports  summaries to
-domains that publish a TLSRPT policy.
+<p> The high-level diagram below shows how TLS handshake success
+and failure events from Postfix are collected and processed into
+daily summary reports.  </p>
 
 <blockquote>
 
 <table>
 
-<tr> <td align="center" bgcolor="#f0f0ff"> Postfix SMTP and<br> TLS
-client engines </td> <td> <tt> --&gt; </tt> </td>
+<tr> <td align="center" bgcolor="#f0f0ff"> Postfix SMTP and TLS
+client engines </td> <td> <tt> &rarr; </tt> </td>
 
-<td align="center" bgcolor="#f0f0ff"> TLSRPT client <br> library
-</td> <td> <tt> --&gt; </tt> </td>
+<td align="center" bgcolor="#f0f0ff"> <a
+href="https://github.com/sys4/libtlsrpt">TLSRPT client library </a>
+(linked into Postfix) </td> <td> <tt> &rarr; </tt> </td>
 
-<td align="center" bgcolor="#f0f0ff"> TLSRPT summary <br> generator
-</td> <td> <tt> --&gt; </tt> </td>
+<td align="center" bgcolor="#f0f0ff"> <a
+href="https://github.com/sys4/tlsrpt-reporter">TLSRPT collector,
+fetcher, and summary generator</a> </td> <td> <tt> &rarr; </tt>
+</td>
 
-<td align="center" bgcolor="#f0f0ff"> Email or HTTP <br> delivery
-</td> </tr>
+<td align="center" bgcolor="#f0f0ff"> Email or HTTP delivery </td>
+</tr>
 
 </table>
 
 </blockquote>
 
-<p> When Postfix TLSRPT support is enabled (with "smtp_tlsrpt_enable
-= yes"): </p>
-
 <ul>
 
 <li> <p> The Postfix SMTP and TLS client engines will generate a
@@ -89,17 +90,20 @@ client engines </td> <td> <tt> --&gt; </tt> </td>
 <li> <p> They will pass those events to an in-process TLSRPT client
 library that sends data over a local socket to </p>
 
-<li> <p> A TLSRPT report generator that produces daily summary
-reports. </p>
+<li> <p> A local TLSRPT collector that runs on each Postfix machine.
+A TLSRPT fetcher gathers information from individual collectors,
+and a central TLSRPT report generator produces daily summary reports.
+</p>
 
 </ul>
 
-<p> The TLSRPT client library and report generator are maintained
-by sys4. </p>
+<p> The TLSRPT client library, and the infrastructure to collect,
+fetch, and report TLSRPT information are maintained by sys4 at
+https://github.com/sys4/libtlsrpt and
+https://github.com/sys4/tlsrpt-reporter, respectively. </p>
 
 <p> The Postfix implementation supports both DANE (Postfix built-in)
-and MTA-STS (through an smtp_tls_policy_maps plug-in).
-</p>
+and MTA-STS (through an smtp_tls_policy_maps plug-in). </p>
 
 <p> The Postfix smtp(8) client process implements the SMTP client
 engine. With "smtp_tls_connection_reuse = no", the smtp(8) client
@@ -116,11 +120,12 @@ code as described in the INSTALL document. Some modification may
 be required if you build Postfix from a vendor-specific source
 package. </p>
 
-<p> The Postfix TLSRPT client builds on a TLSRPT client library
-whose source code can be obtained from: </p>
+<p> The Postfix TLSRPT client builds on a TLSRPT library which may
+be available as a built package (rpm, deb, etc.), or which you can
+build from source code from: </p>
 
 <blockquote>
- <p> https://github.com/sys4/tlsrpt </p>
+<p> https://github.com/sys4/libtlsrpt </p>
 </blockquote>
 
 <p> The library is typically installed as a header file in
@@ -130,7 +135,7 @@ actual pathnames will depend on OS platform conventions. </p>
 
 <p> In order to build Postfix with TLSRPT support, you will need
 to add compiler options <tt>-DUSE_TLSRPT</tt> (to build with TLSRPT
-support), and <tt>-I</tt> (with the directory containing the tlsrpt.h
+support) and <tt>-I</tt> (with the directory containing the tlsrpt.h
 header file), and you will need to add linker options to link with
 the TLSRPT client library, for example: </p>
 
@@ -138,28 +143,28 @@ the TLSRPT client library, for example: </p>
 <pre>
 make -f Makefile.init makefiles \
   "CCARGS=-DUSE_TLSRPT -I/usr/local/include" \
-  "AUXLIBS=-L/usr/local/lib -ltlsrpt"
+  "AUXLIBS=-L/usr/local/lib -Wl,-rpath,/usr/local/lib -ltlsrpt"
 </pre>
 </blockquote>
 
+<p> (On Solaris systems you may need to use "<tt>-Wl,-R</tt>" instead
+of "<tt>-Wl,-rpath</tt>".) </p>
+
 <p> Then, just run 'make'. </p>
 
 <blockquote>
 
 <p> Note: if your build command line already has CCARGS or AUXLIBS
 settings, then simply append the above settings to the existing CCARGS
-or AUXLIBS values. </p>
+or AUXLIBS values: </p>
 
-<blockquote>
 <pre>
 make -f Makefile.init makefiles \
-  "CCARGS=<i>existing settings...</i> -DUSE_TLSRPT -I/usr/local/include" \
-  "AUXLIBS=<i>existing settings...</i> -L/usr/local/lib -ltlsrpt"
+  "CCARGS=... -DUSE_TLSRPT -I/usr/local/include" \
+  "AUXLIBS=... -L/usr/local/lib -Wl,-rpath,/usr/local/lib -ltlsrpt"
 </pre>
 </blockquote>
 
-</blockquote>
-
 <h2> <a name="using"> Turning on TLSRPT </a> </h2>
 
 <p> After installing Postfix TLSRPT support, you can enable TLSRPT
@@ -168,27 +173,38 @@ support in main.cf like this: </p>
 <blockquote>
 <pre>
 smtp_tlsrpt_enable = yes
-smtp_tlsrpt_socket_name = /path/to/socket
+smtp_tlsrpt_socket_name = path/to/socket
 </pre>
 </blockquote>
 
-<p> The smtp_tlsrpt_socket_name parameter specifies an absolute
-pathname, or a pathname that is relative to $queue_directory. </p>
+<p> The smtp_tlsrpt_socket_name parameter specifies either an
+absolute pathname, or a pathname that is relative to $queue_directory.
+</p>
+
+<p> Notes: </p>
 
-<blockquote>
+<ul>
 
-<p> Note: the recommended socket location is still to be determined.
+<li> <p> The recommended socket location is still to be determined.
 A good socket location would be under the Postfix queue directory,
 for example: "smtp_tlsrpt_socket_name = run/tlsrpt/tlsrpt.sock".
 The advantage of using a relative name is that it will work equally
 well whether or not Postfix chroot is turned on. </p>
 
-</blockquote>
+<li> <p> Regardless of whether Postfix chroot is enabled, the TLSRPT
+receiver (<tt>tlsrpt_collectd</tt>) will need to be configured with
+the socket's absolute pathname. </p>
 
-<p> Do not specify a location under a directory such as <tt>private</tt>
-or <tt>public</tt> that is already used by Postfix programs. Only Postfix
+<li> <p> Do not specify a TLSRPT socket location under a Postfix socket
+directory such as <tt>private</tt> or <tt>public</tt>. Only Postfix
 programs should create sockets there. </p>
 
+</ul>
+
+<p> For details on how to run the TLSRPT collection and reporting
+infrastructure, see the documentation at
+https://github.com/sys4/tlsrpt-reporter.
+
 <h2> <a name="logging"> TLSRPT Status logging </a> </h2>
 
 <p> With TLSRPT support turned on, the Postfix TLSRPT client will
@@ -268,19 +284,20 @@ have the details for why TLS authentication failed. </p>
 
 <p> <a href="https://datatracker.ietf.org/doc/html/rfc8460#section-3">RFC
 8460 Section 3</a> specifies that an MTA must not enforce TLS
-security when sending failure reports via email. However, Postfix
-currently has no way to request that TLS enforcement will be disabled
-when submitting an email message. </p>
+security when sending failure reports via email. </p>
 
 <p> Options:
 
 <ul>
 
-<li> <p> Specify the "<b>TLS-Required: no</b>" message header,
-defined in RFC 8689, to reduce the TLS security level to "<b>may</b>"
-(that is, do not verify remote SMTP server certificates, and fall
-back to plaintext if TLS is unavailable). <br> <br> This feature
-is available in Postfix 3.10 and later. </p>
+<li> <p> In an email report, specify the "<b>TLS-Required: no</b>"
+message header,
+defined in RFC 8689, to reduce the Postfix SMTP client TLS security
+level to "<b>may</b>" (that is, do not verify remote SMTP server
+certificates, and fall back to plaintext if TLS is unavailable).
+<br> <br> This feature is available in Postfix 3.10 and later. If
+your outbound MTAs run an older version, you can use one of the
+options described below. </p>
 
 <li> <p> Do nothing. When TLS security enforcement is required but
 fails, a TLSRPT summary message will be delayed
@@ -289,8 +306,9 @@ in the mail queue. Keep in mind that TLSRPT is not a real-time
 monitoring service; it takes on average 12 hours before a failure
 is reported through TLSRPT. </p>
 
-<li> <p> Exclude the sender of TLSRPT summaries from TLS security
-enforcement.
+<li> <p> On outbound MTAs that don't support the "<b>TLS-Required:
+no</b>" header feature (such as Postfix 3.9 and earlier), disable
+TLS security enforcement for the sender of TLSRPT summaries.
 Implement the configuration below on outbound MTA instances (replace
 noreply-smtp-tls-reporting@example.com with your actual report
 generator's sender address): </p>
index 9fb66ec655ed722c9215ce5a1433a1c114f2ce59..911ed5145d1e7355f1491b8ef4154bb39b9e5102 100644 (file)
@@ -363,3 +363,4 @@ Postfix  Postfix legacy TLS Support
  Note the recommended socket location is still to be determined A good socket location would be under the Postfix queue directory for example smtp_tlsrpt_socket_name run tlsrpt tlsrpt sock The advantage of using a relative name is that
  with cipher ECDHE RSA AES256 GCM SHA384 256 256 bits 
  TLSv1 2 with cipher ECDHE RSA AES256 GCM SHA384 256 256 bits 
+ The recommended socket location is still to be determined A good socket location would be under the Postfix queue directory for example smtp_tlsrpt_socket_name run tlsrpt tlsrpt sock The advantage of using a relative name is that it
index d52edef6a180fc418f01e6213c7ef91b5864b3f5..1a487be5fe24ec5a332cdda2b11c1e936347e9fa 100644 (file)
@@ -396,3 +396,4 @@ doctype
 dtd
 marc
 LP
+collectd
index 7dbf579b83b809c181d75b27b25a966f1c6c6f98..e52be6f07d9cae5afe445d9ac5d87c3bc276b677 100644 (file)
@@ -20,7 +20,7 @@
   * Patches change both the patchlevel and the release date. Snapshots have no
   * patchlevel; they change the release date only.
   */
-#define MAIL_RELEASE_DATE      "20250127"
+#define MAIL_RELEASE_DATE      "20250131"
 #define MAIL_VERSION_NUMBER    "3.10"
 
 #ifdef SNAPSHOT
index 11d06434de2d6c22bf59cf406607003b58fd24f1..b4ccdea4d21df1cb6aa371de11f6ae4dcca9f500 100644 (file)
@@ -312,8 +312,15 @@ TLSRPT_WRAPPER *trw_create(const char *rpt_socket_name,
                                   const char *rpt_policy_string,
                                   int skip_reused_hs)
 {
+    const char myname[] = "trw_create";
     TLSRPT_WRAPPER *trw;
 
+    if (msg_verbose > 1)
+       msg_info("%s(rpt_socket_name=%s, rpt_policy_domain=%s, "
+                "rpt_policy_string=%s, skip_reused_hs=%d)",
+                myname, rpt_socket_name, rpt_policy_domain,
+                rpt_policy_string, skip_reused_hs);
+
     /*
      * memset() is not portable for pointer etc. types.
      */
@@ -338,6 +345,10 @@ TLSRPT_WRAPPER *trw_create(const char *rpt_socket_name,
 
 void    trw_free(TLSRPT_WRAPPER *trw)
 {
+    if (msg_verbose > 1)
+       msg_info("trw_free: rpt_socket_name=%s, rpt_policy_domain=%s, ...",
+                trw->rpt_socket_name, trw->rpt_policy_domain);
+
     /* Destroy fields set with trw_create(). */
     myfree(trw->rpt_socket_name);
     myfree(trw->rpt_policy_domain);
@@ -362,6 +373,19 @@ void    trw_set_tls_policy(TLSRPT_WRAPPER *trw,
                                   const char *tls_policy_domain,
                                   const char *const * mx_host_patterns)
 {
+    const char myname[] = "trw_set_tls_policy";
+
+#define STR_OR_NULL(s) ((s) ? (s) : "(Null)")
+#define PSTR_OR_NULL(p)        ((p) ? STR_OR_NULL(*p) : "(Null)")
+
+    if (msg_verbose > 1)
+       msg_info("%s(tlsrpt_policy_type_t=%d, tls_policy_strings=%s..., "
+                "tls_policy_domain=%s, mx_host_patterns=%s...)",
+                myname, tls_policy_type,
+                PSTR_OR_NULL(tls_policy_strings),
+                STR_OR_NULL(tls_policy_domain),
+                PSTR_OR_NULL(mx_host_patterns));
+
     trw->tls_policy_type = tls_policy_type;
     MYFREE_IF_SET_AND_COPY(trw->tls_policy_domain, tls_policy_domain);
     if (tls_policy_type == TLSRPT_NO_POLICY_FOUND) {
@@ -385,6 +409,11 @@ void    trw_set_tcp_connection(TLSRPT_WRAPPER *trw,
 {
     const char myname[] = "trw_set_tcp_connection";
 
+    if (msg_verbose > 1 && (snd_mta_addr || rcv_mta_name || rcv_mta_addr))
+       msg_info("%s(snd_mta_addr=%s, rcv_mta_name=%s, rcv_mta_addr=%s)",
+                myname, STR_OR_NULL(snd_mta_addr),
+                STR_OR_NULL(rcv_mta_name), STR_OR_NULL(rcv_mta_addr));
+
     /*
      * Sanity check: usage errors are not a show stopper.
      */
@@ -405,6 +434,9 @@ void    trw_set_ehlo_resp(TLSRPT_WRAPPER *trw, const char *rcv_mta_ehlo)
 {
     const char myname[] = "trw_set_ehlo_resp";
 
+    if (msg_verbose > 1 && rcv_mta_ehlo)
+       msg_info("%s(rcv_mta_ehlo=%s)", myname, rcv_mta_ehlo);
+
     /*
      * Sanity check: usage errors are not a show stopper.
      */
@@ -499,6 +531,11 @@ int     trw_report_failure(TLSRPT_WRAPPER *trw,
     struct tlsrpt_connection_t *con;
     int     res;
 
+    if (msg_verbose > 1)
+       msg_info("%s(failure_type=%d, additional_info=%s, failure_reason=%s)",
+                myname, failure_type, STR_OR_NULL(additional_info),
+                STR_OR_NULL(failure_reason));
+
     /*
      * Sanity check: usage errors are not a show stopper.
      */
@@ -579,6 +616,9 @@ int     trw_report_success(TLSRPT_WRAPPER *trw)
     struct tlsrpt_connection_t *con;
     int     res;
 
+    if (msg_verbose > 1)
+       msg_info("trw_report_success");
+
     /*
      * Sanity check: usage errors are not a show stopper.
      */