]> git.openstreetmap.org Git - chef.git/blobdiff - cookbooks/exim/templates/default/exim4.conf.erb
Merge remote-tracking branch 'github/pull/459'
[chef.git] / cookbooks / exim / templates / default / exim4.conf.erb
index f37dad240764f84b97ec9839748cef5bd4f29095..2d1d96e1288751dac4ed8ae2073abe63f089dc9f 100644 (file)
@@ -42,6 +42,7 @@
 ######################################################################
 #                    MAIN CONFIGURATION SETTINGS                     #
 ######################################################################
 ######################################################################
 #                    MAIN CONFIGURATION SETTINGS                     #
 ######################################################################
+#
 
 # Specify your host's canonical name here. This should normally be the fully
 # qualified "official" name of your host. If this option is not set, the
 
 # Specify your host's canonical name here. This should normally be the fully
 # qualified "official" name of your host. If this option is not set, the
@@ -93,12 +94,13 @@ hostlist   relay_from_hosts = <; <%= @relay_from_hosts.join(" ; ") %>
 # to any other host on the Internet. Such a setting commonly refers to a
 # complete local network as well as the localhost. For example:
 #
 # to any other host on the Internet. Such a setting commonly refers to a
 # complete local network as well as the localhost. For example:
 #
-# hostlist relay_from_hosts = 127.0.0.1 : 192.168.0.0/16
+# hostlist relay_from_hosts = <; 127.0.0.1 ; ::1 ; 192.168.0.0/16
 #
 # The "/16" is a bit mask (CIDR notation), not a number of hosts. Note that you
 # have to include 127.0.0.1 if you want to allow processes on your host to send
 # SMTP mail by using the loopback address. A number of MUAs use this method of
 #
 # The "/16" is a bit mask (CIDR notation), not a number of hosts. Note that you
 # have to include 127.0.0.1 if you want to allow processes on your host to send
 # SMTP mail by using the loopback address. A number of MUAs use this method of
-# sending mail.
+# sending mail.  Often, connections are made to "localhost", which might be ::1
+# on IPv6-enabled hosts.  Do not forget CIDR for your IPv6 networks.
 
 # All three of these lists may contain many different kinds of item, including
 # wildcarded names, regular expressions, and file lookups. See the reference
 
 # All three of these lists may contain many different kinds of item, including
 # wildcarded names, regular expressions, and file lookups. See the reference
@@ -144,7 +146,7 @@ spamd_address = 127.0.0.1 783
 
 # Allow any client to use TLS.
 
 
 # Allow any client to use TLS.
 
-tls_advertise_hosts = <; !127.0.0.1 ; !::1
+tls_advertise_hosts = *
 
 # Specify the location of the Exim server's TLS certificate and private key.
 # The private key must not be encrypted (password protected). You can put
 
 # Specify the location of the Exim server's TLS certificate and private key.
 # The private key must not be encrypted (password protected). You can put
@@ -152,8 +154,17 @@ tls_advertise_hosts = <; !127.0.0.1 ; !::1
 # need the first setting, or in separate files, in which case you need both
 # options.
 
 # need the first setting, or in separate files, in which case you need both
 # options.
 
+<% if node[:exim][:certificate_names] -%>
+tls_certificate = /etc/ssl/certs/<%= node[:exim][:certificate_names].first %>.pem
+tls_privatekey = /etc/ssl/private/<%= node[:exim][:certificate_names].first %>.key
+<% else -%>
 tls_certificate = /etc/ssl/certs/exim.pem
 tls_privatekey = /etc/ssl/private/exim.key
 tls_certificate = /etc/ssl/certs/exim.pem
 tls_privatekey = /etc/ssl/private/exim.key
+<% end -%>
+
+# Configure TLS cipher selection.
+
+tls_require_ciphers = <%= node[:ssl][:gnutls_ciphers] %>:%SERVER_PRECEDENCE
 
 # In order to support roaming users who wish to send email from anywhere,
 # you may want to make Exim listen on other ports as well as port 25, in
 
 # In order to support roaming users who wish to send email from anywhere,
 # you may want to make Exim listen on other ports as well as port 25, in
@@ -224,18 +235,26 @@ never_users = root
 host_lookup = *
 
 
 host_lookup = *
 
 
-# The settings below, which are actually the same as the defaults in the
-# code, cause Exim to make RFC 1413 (ident) callbacks for all incoming SMTP
-# calls. You can limit the hosts to which these calls are made, and/or change
-# the timeout that is used. If you set the timeout to zero, all RFC 1413 calls
-# are disabled. RFC 1413 calls are cheap and can provide useful information
-# for tracing problem messages, but some hosts and firewalls have problems
-# with them. This can result in a timeout instead of an immediate refused
-# connection, leading to delays on starting up SMTP sessions. (The default was
-# reduced from 30s to 5s for release 4.61.)
+# The settings below cause Exim to make RFC 1413 (ident) callbacks
+# for all incoming SMTP calls. You can limit the hosts to which these
+# calls are made, and/or change the timeout that is used. If you set
+# the timeout to zero, all RFC 1413 calls are disabled. RFC 1413 calls
+# are cheap and can provide useful information for tracing problem
+# messages, but some hosts and firewalls have problems with them.
+# This can result in a timeout instead of an immediate refused
+# connection, leading to delays on starting up SMTP sessions.
+# (The default was reduced from 30s to 5s for release 4.61. and to
+# disabled for release 4.86)
+#
+#rfc1413_hosts = *
+#rfc1413_query_timeout = 5s
+
 
 
-rfc1413_hosts = *
-rfc1413_query_timeout = 5s
+# Enable an efficiency feature.  We advertise the feature; clients
+# may request to use it.  For multi-recipient mails we then can
+# reject or accept per-user after the message is received.
+#
+prdr_enable = true
 
 
 # By default, Exim expects all envelope addresses to be fully qualified, that
 
 
 # By default, Exim expects all envelope addresses to be fully qualified, that
@@ -251,6 +270,12 @@ rfc1413_query_timeout = 5s
 # and/or qualify_recipient (see above).
 
 
 # and/or qualify_recipient (see above).
 
 
+# Unless you run a high-volume site you probably want more logging
+# detail than the default.  Adjust to suit.
+
+log_selector = +all -skip_delivery
+
+
 # If you want Exim to support the "percent hack" for certain domains,
 # uncomment the following line and provide a list of domains. The "percent
 # hack" is the feature by which mail addressed to x%y@z (where z is one of
 # If you want Exim to support the "percent hack" for certain domains,
 # uncomment the following line and provide a list of domains. The "percent
 # hack" is the feature by which mail addressed to x%y@z (where z is one of
@@ -295,10 +320,37 @@ timeout_frozen_after = 7d
 # split_spool_directory = true
 
 
 # split_spool_directory = true
 
 
-# Log just about everything we can log so that we have the best
-# possible chance of knowing what's going on.
+# If you're in a part of the world where ASCII is not sufficient for most
+# text, then you're probably familiar with RFC2047 message header extensions.
+# By default, Exim adheres to the specification, including a limit of 76
+# characters to a line, with encoded words fitting within a line.
+# If you wish to use decoded headers in message filters in such a way
+# that successful decoding of malformed messages matters, you may wish to
+# configure Exim to be more lenient.
+#
+# check_rfc2047_length = false
+#
+# In particular, the Exim maintainers have had multiple reports of problems
+# from Russian administrators of issues until they disable this check,
+# because of some popular, yet buggy, mail composition software.
+
 
 
-log_selector = +all -skip_delivery
+# If you wish to be strictly RFC compliant, or if you know you'll be
+# exchanging email with systems that are not 8-bit clean, then you may
+# wish to disable advertising 8BITMIME.  Uncomment this option to do so.
+
+# accept_8bitmime = false
+
+
+# Exim does not make use of environment variables itself. However,
+# libraries that Exim uses (e.g. LDAP) depend on specific environment settings.
+# There are two lists: keep_environment for the variables we trust, and
+# add_environment for variables we want to set to a specific value.
+# Note that TZ is handled separately by the timezone runtime option
+# and TIMEZONE_DEFAULT buildtime option.
+
+# keep_environment = ^LDAP
+# add_environment = PATH=/usr/bin::/bin
 
 
 # Define trusted users.
 
 
 # Define trusted users.
@@ -306,10 +358,10 @@ log_selector = +all -skip_delivery
 trusted_users = <%= node[:exim][:trusted_users].join(" : ") %>
 
 
 trusted_users = <%= node[:exim][:trusted_users].join(" : ") %>
 
 
-# Don't keep any environment when starting programs - this is the
-# default but setting it stops exim warning
+# Do all deliveries via a limited set of queues.
 
 
-keep_environment =
+queue_only = true
+queue_run_max = <%= node[:exim][:queue_run_max] %>
 
 
 
 
 
 
@@ -330,9 +382,7 @@ acl_check_rcpt:
   # testing for an empty sending host field.
 
   accept  hosts = :
   # testing for an empty sending host field.
 
   accept  hosts = :
-<% if node[:lsb][:release].to_i >= 10.04 -%>
           control = dkim_disable_verify
           control = dkim_disable_verify
-<% end -%>
 
   #############################################################################
   # The following section of the ACL is concerned with local parts that contain
 
   #############################################################################
   # The following section of the ACL is concerned with local parts that contain
@@ -377,7 +427,7 @@ acl_check_rcpt:
 
   deny    message       = Restricted characters in address
           domains       = !+local_domains
 
   deny    message       = Restricted characters in address
           domains       = !+local_domains
-          local_parts   = ^[./|] : ^.*[@!] : ^.*/\\.\\./
+          local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
   #############################################################################
 
   # Block bounces to selected addresses
   #############################################################################
 
   # Block bounces to selected addresses
@@ -385,9 +435,10 @@ acl_check_rcpt:
   deny    local_parts   = root:postmaster:webmaster:abuse:support
           senders       = :
 
   deny    local_parts   = root:postmaster:webmaster:abuse:support
           senders       = :
 
-  # Block sender of spam backscatter
+  # Block blacklisted senders
 
 
-  deny    senders       = www-data@www.easyticket.de:*@email.realestate.co.nz:sipdentistry@mail.mediaworksonline.com:www-data@*.consoglobe.com:lina-noreply@jobstreet.com:apache@704210-web2.tristatecamera.com:webmaster@openstreetmap.org
+  deny    senders       = lsearch*@;/etc/exim4/blocked-senders
+          message       = Rejected because $sender_address is blacklisted\nQueries to postmaster@$qualify_domain
           !hosts        = +relay_from_hosts
 
   # Accept mail to postmaster in any local domain, regardless of the source,
           !hosts        = +relay_from_hosts
 
   # Accept mail to postmaster in any local domain, regardless of the source,
@@ -422,9 +473,7 @@ acl_check_rcpt:
 
   accept  hosts         = +relay_from_hosts
           control       = submission
 
   accept  hosts         = +relay_from_hosts
           control       = submission
-<% if node[:lsb][:release].to_i >= 10.04 -%>
           control       = dkim_disable_verify
           control       = dkim_disable_verify
-<% end -%>
 
   # Accept if the message arrived over an authenticated connection, from
   # any host. Again, these messages are usually from MUAs, so recipient
 
   # Accept if the message arrived over an authenticated connection, from
   # any host. Again, these messages are usually from MUAs, so recipient
@@ -433,9 +482,7 @@ acl_check_rcpt:
 
   accept  authenticated = *
           control       = submission
 
   accept  authenticated = *
           control       = submission
-<% if node[:lsb][:release].to_i >= 10.04 -%>
           control       = dkim_disable_verify
           control       = dkim_disable_verify
-<% end -%>
 
   # Insist that any other recipient address that we accept is either in one of
   # our local domains, or is in a domain for which we explicitly allow
 
   # Insist that any other recipient address that we accept is either in one of
   # our local domains, or is in a domain for which we explicitly allow
@@ -490,9 +537,8 @@ acl_check_data:
   # Deny if the message contains a virus. Before enabling this check, you
   # must install a virus scanner and set the av_scanner option above.
   #
   # Deny if the message contains a virus. Before enabling this check, you
   # must install a virus scanner and set the av_scanner option above.
   #
-  deny    demime     = *
-          malware    = *
-          message    = This message contains a virus ($malware_name).
+  deny    malware    = *
+          message    = This message was detected as possible malware ($malware_name).
 
 <% end -%>
 <% if File.exist?("/var/run/spamd.pid") -%>
 
 <% end -%>
 <% if File.exist?("/var/run/spamd.pid") -%>
@@ -504,14 +550,19 @@ acl_check_data:
 
 <% end -%>
   # Deny spammy messages with headers of the form:
 
 <% end -%>
   # Deny spammy messages with headers of the form:
-  #   X-PHP-Originating-Script: <digits>:SendMail.class.php
-  #   X-PHP-Originating-Script: <digits>:ExtendedMail.class.php
-  deny    condition  = ${if match {$h_X-PHP-Originating-Script:}{^[0-9]+:(Send|Extended)Mail\\.class\\.php\$}}
+  #   X-PHP-Originating-Script: <digits>:<name>.php
+  #   X-PHP-Originating-Script: <digits>:<name>.class.php
+  deny    condition  = ${if match {$h_X-PHP-Originating-Script:}{^[0-9]+:[A-Za-z]+(\\.class)?\\.php\$}}
+         !hosts      = +relay_from_hosts
           message    = This message failed local spam checks.
 
           message    = This message failed local spam checks.
 
-  # Accept the message.
+  # Accept messages from relay hosts without modification.
 
 
-  accept
+  accept  hosts      = +relay_from_hosts
+
+  # Accept messages from external hosts and add authentication results.
+
+  accept  add_header = :at_start:${authresults {$primary_hostname}}
 
 
 
 
 
 
@@ -637,7 +688,7 @@ smarthost:
 dnslookup:
   driver = dnslookup
   domains = ! +local_domains
 dnslookup:
   driver = dnslookup
   domains = ! +local_domains
-  transport = remote_smtp
+  transport = signed_smtp
   same_domain_copy_routing = yes
   ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
   no_more
   same_domain_copy_routing = yes
   ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
   no_more
@@ -661,6 +712,22 @@ begin transports
 
 remote_smtp:
   driver = smtp
 
 remote_smtp:
   driver = smtp
+  multi_domain = false
+  tls_require_ciphers = <%= node[:ssl][:gnutls_ciphers] %>:%LATEST_RECORD_VERSION
+
+
+# This transport is used for delivering DKIM signed messages over SMTP connections.
+
+signed_smtp:
+  driver = smtp
+  dkim_domain = ${lookup{${domain:$h_from:}}partial-lsearch{/etc/exim4/dkim-domains}{$value}}
+  dkim_selector = ${lookup{$dkim_domain}lsearch{/etc/exim4/dkim-selectors}{$value}}
+  dkim_private_key = /etc/exim4/dkim-keys/${dkim_domain}
+  dkim_identity = ${lc:${address:$h_from:}}
+  dkim_timestamps = 1209600
+  multi_domain = false
+  hosts_try_dane =
+  tls_require_ciphers = <%= node[:ssl][:gnutls_ciphers] %>:%LATEST_RECORD_VERSION
 
 
 # This transport is used for handling pipe deliveries generated by alias or
 
 
 # This transport is used for handling pipe deliveries generated by alias or
@@ -712,7 +779,7 @@ noreply:
   to = $sender_address
   subject = Re: $header_subject:
   headers = MIME-Version: 1.0\nContent-Type: text/plain; charset=utf-8
   to = $sender_address
   subject = Re: $header_subject:
   headers = MIME-Version: 1.0\nContent-Type: text/plain; charset=utf-8
-  file = /etc/exim4/noreply/$local_part
+  file = /etc/exim4/noreply/$local_part_data
   user = Debian-exim
   group = Debian-exim
 
   user = Debian-exim
   group = Debian-exim
 
@@ -726,7 +793,10 @@ noreply:
   command = <%= details[:command] %>
   home_directory = <%= details[:home_directory] %>
   path = <%= details[:path] || "/bin:/usr/bin" %>
   command = <%= details[:command] %>
   home_directory = <%= details[:home_directory] %>
   path = <%= details[:path] || "/bin:/usr/bin" %>
-  return_output
+<% if details[:environment] -%>
+  environment = <%= details[:environment].map { |k,v| "#{k}=#{v}" }.join(":") %>
+<% end -%>
+  return_fail_output
 <% else -%>
   driver = appendfile
 <% if details[:file] -%>
 <% else -%>
   driver = appendfile
 <% if details[:file] -%>
@@ -779,6 +849,7 @@ begin retry
 # There are no rewriting specifications in this default configuration file.
 
 begin rewrite
 # There are no rewriting specifications in this default configuration file.
 
 begin rewrite
+*@<%= node[:fqdn] %> "${if !match {${lookup{$1}lsearch{/etc/aliases}{$value}}}{@} {$1@openstreetmap.org}fail}" Eh
 <% node[:exim][:rewrites].each do |rewrite| -%>
 <%= rewrite[:pattern] %> <%= rewrite[:replacement] %> <%= rewrite[:flags] %>
 <% end -%>
 <% node[:exim][:rewrites].each do |rewrite| -%>
 <%= rewrite[:pattern] %> <%= rewrite[:replacement] %> <%= rewrite[:flags] %>
 <% end -%>