From 37d3edca5ed447b898913cf453bf8d2c557bea37 Mon Sep 17 00:00:00 2001 From: Mike Hillyer Date: Tue, 3 Sep 2024 10:33:14 -0400 Subject: [PATCH] Introduce community bounces and shaping files in their own directory with notes on how to incorporate them into configs. --- assets/community/bounces.toml | 52 +++++++++++++++++++++ assets/community/shaping.toml | 88 +++++++++++++++++++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 assets/community/bounces.toml create mode 100644 assets/community/shaping.toml diff --git a/assets/community/bounces.toml b/assets/community/bounces.toml new file mode 100644 index 00000000..5c4f9201 --- /dev/null +++ b/assets/community/bounces.toml @@ -0,0 +1,52 @@ +# THIS FILE IS FOR COMMUNITY CONTRIBUTED BOUNCE CLASSIFICATION RULES +# THESE ARE PROVIDED AS-IS BY THEIR RESPECTIVE CONTRIBUTERS +# THIS FILE SHOULD BE USED IN COMBINATION WITH iana.toml TO GET FULL +# COVERAGE INCLUDING STATUS CODE BASED RULES. + +# THIS FILE IS OVERWRITTEN DURING UPDATES, IF YOU MAKE CHANGES TO THIS FILE +# YOU WILL NEED TO DO A PULL REQUEST TO THE REPO AND HAVE IT ACCEPTED FOR +# YOUR CHANGES TO PERSIST, OTHERWISE MAKE THESE CHANGES TO YOUR OWN CUSTOM +# BOUNCE RULES FILE: +# -- load the community bounces.toml + iana.toml + local settings +# kumo.on('init', function() +# kumo.configure_local_logs { +# log_dir = '/var/log/kumomta', +# } +# kumo.configure_bounce_classifier { +# files = { +# '/opt/kumomta/etc/bounces.toml', +# '/opt/kumomta/share/community/bounces.toml', +# '/opt/kumomta/share/bounce_classifier/iana.toml', +# }, +# } +# end) + +[rules] +InvalidRecipient = [ +] +BadDomain = [ +] +InactiveMailbox = [ +] +InvalidSender = [ +] +QuotaIssues = [ +] +NoAnswerFromHost = [ +] +BadConnection = [ +] +DNSFailure = [ +] +RoutingErrors = [ +] +TransientFailure = [ +] +MessageExpired = [ +] +ProtocolErrors = [ +] +AuthenticationFailed = [ +] +PolicyRelated = [ +] diff --git a/assets/community/shaping.toml b/assets/community/shaping.toml new file mode 100644 index 00000000..eb928db7 --- /dev/null +++ b/assets/community/shaping.toml @@ -0,0 +1,88 @@ +# THIS FILE IS FOR COMMUNITY CONTRIBUTED BOUNCE CLASSIFICATION RULES +# THESE ARE PROVIDED AS-IS BY THEIR RESPECTIVE CONTRIBUTERS +# THIS FILE SHOULD BE USED IN COMBINATION WITH shaping.toml TO GET FULL +# COVERAGE INCLUDING STATUS CODE BASED RULES. + +# THIS FILE IS OVERWRITTEN DURING UPDATES, IF YOU MAKE CHANGES TO THIS FILE +# YOU WILL NEED TO DO A PULL REQUEST TO THE REPO AND HAVE IT ACCEPTED FOR +# YOUR CHANGES TO PERSIST, OTHERWISE MAKE THESE CHANGES TO YOUR OWN CUSTOM +# SHAPING FILE: +# -- load the community shaping.toml + local settings +# kumo.on( +# 'get_egress_path_config', +# shaping:setup { +# '/opt/kumomta/etc/shaping.toml', +# '/opt/kumomta/share/policy-extras/shaping.toml', +# '/opt/kumomta/share/community/shaping.toml`, +# } +# ) + +["default"] +connection_limit = 10 +max_connection_rate = "100/min" +max_deliveries_per_connection = 100 +max_message_rate = "100/s" +idle_timeout = "60s" +data_timeout = "30s" +data_dot_timeout = "60s" +enable_tls = "Opportunistic" +consecutive_connection_failures_before_delay = 100 + +[["default".automation]] +regex=[ + '/Messages from \d+\.\d+\.\d+\.\d+ temporarily deferred/', + '/All messages from \d+\.\d+\.\d+\.\d+ will be permanently deferred/', + '/has been temporarily rate limited due to IP reputation/', + '/Unfortunately, messages from \d+\.\d+\.\d+\.\d+ weren.t sent/', + '/Server busy\. Please try again later from/' +] +action = [ + {SetConfig={name="max_message_rate", value="1/minute"}}, + {SetConfig={name="connection_limit", value=1}} +] +duration = "90m" + +[["default".automation]] +regex="KumoMTA internal: failed to connect to any candidate hosts: All failures are related to OpportunisticInsecure STARTTLS. Consider setting enable_tls=Disabled for this site" +action = {SetConfig={name="enable_tls", value="Disabled"}} +duration = "30 days" + +# https://support.google.com/mail/answer/81126 +["gmail.com"] +max_deliveries_per_connection = 50 +connection_limit = 5 +enable_tls = "Required" +consecutive_connection_failures_before_delay = 5 + +# PROVIDED BY YAHOO! DIRECTLY +# https://senders.yahooinc.com/best-practices +["yahoo.com"] +max_deliveries_per_connection = 20 + +[["yahoo.com".automation]] +regex = "\\[TS04\\]" +action = "Suspend" +duration = "2 hours" + +# PROVIDED BY COMCAST DIRECTLY +# https://spa.xfinity.com/postmaster +# https://spa.xfinity.com/postmaster?faq=comcast-mail-errors +["comcast.net"] +connection_limit = 25 +max_deliveries_per_connection = 250 +enable_tls = "Required" +idle_timeout = "30s" +consecutive_connection_failures_before_delay = 24 + +# PROVIDED DIRECTLY BY MAIL.COM +["mail.com"] +max_deliveries_per_connection = 100 + +# https://www.postmastery.com/orange-postmaster-smtp-error-codes-ofr/ +["orange.fr"] +connection_limit = 3 + +# PROVIDED DIRECTLY FROM MAILGUN FOR SENDERS WHO SMARTHOST VIA MAILGUN +["smtp.mailgun.com"] +connection_limit = 7000 +max_deliveries_per_connection = 3