Merge pull request #164 from andryyy/dev
Fall back to dkim.conf for signing
This commit is contained in:
		@@ -9,8 +9,8 @@ RUN dpkg-divert --local --rename --add /sbin/initctl \
 | 
				
			|||||||
    && dpkg-divert --local --rename --add /usr/bin/ischroot \
 | 
					    && dpkg-divert --local --rename --add /usr/bin/ischroot \
 | 
				
			||||||
    && ln -sf /bin/true /usr/bin/ischroot
 | 
					    && ln -sf /bin/true /usr/bin/ischroot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RUN apt-key adv --fetch-keys http://rspamd.com/apt/gpg.key \
 | 
					RUN apt-key adv --fetch-keys http://rspamd.com/apt-stable/gpg.key \
 | 
				
			||||||
    && echo "deb http://rspamd.com/apt/ xenial main" > /etc/apt/sources.list.d/rspamd.list \
 | 
					    && echo "deb http://rspamd.com/apt-stable/ xenial main" > /etc/apt/sources.list.d/rspamd.list \
 | 
				
			||||||
    && apt-get update \
 | 
					    && apt-get update \
 | 
				
			||||||
    && apt-get -y install rspamd ca-certificates python-pip
 | 
					    && apt-get -y install rspamd ca-certificates python-pip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										34
									
								
								data/conf/rspamd/local.d/dkim.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								data/conf/rspamd/local.d/dkim.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					sign_condition =<<EOD
 | 
				
			||||||
 | 
					return function(task)
 | 
				
			||||||
 | 
					  local smtp_from = task:get_from('smtp')
 | 
				
			||||||
 | 
					  local mime_from = task:get_from('mime')
 | 
				
			||||||
 | 
					  local rspamd_logger = require "rspamd_logger"
 | 
				
			||||||
 | 
					  if smtp_from[1]['domain'] ~= nil and smtp_from[1]['domain'] ~= '' then
 | 
				
			||||||
 | 
					    domain = smtp_from[1]['domain']
 | 
				
			||||||
 | 
					    rspamd_logger.infox(task, "set domain found in smtp from field to %s", domain)
 | 
				
			||||||
 | 
					    if not task:get_user() then
 | 
				
			||||||
 | 
					      rspamd_logger.infox(task, "found domain in smtp header field, but user is not authenticated - skipped")
 | 
				
			||||||
 | 
					      return false
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  elseif mime_from[1]['domain'] ~= nil and mime_from[1]['domain'] ~= '' then
 | 
				
			||||||
 | 
					    domain = mime_from[1]['domain']
 | 
				
			||||||
 | 
					    rspamd_logger.infox(task, "set domain found in mime from field to %s", domain)
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    rspamd_logger.infox(task, "cannot determine domain for dkim signing")
 | 
				
			||||||
 | 
					    return false
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  local keyfile = io.open("/data/dkim/keys/" .. domain .. ".dkim")
 | 
				
			||||||
 | 
					  if keyfile then
 | 
				
			||||||
 | 
					    rspamd_logger.infox(task, "found dkim key file for domain %s", domain)
 | 
				
			||||||
 | 
					    keyfile:close()
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      key = "/data/dkim/keys/" .. domain .. ".dkim",
 | 
				
			||||||
 | 
					      domain = domain,
 | 
				
			||||||
 | 
					      selector = "dkim"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    rspamd_logger.infox(task, "no key file for domain %s - skipped", domain)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  return false
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					EOD;
 | 
				
			||||||
@@ -1,38 +0,0 @@
 | 
				
			|||||||
# If false, messages with empty envelope from are not signed
 | 
					 | 
				
			||||||
allow_envfrom_empty = true;
 | 
					 | 
				
			||||||
# If true, envelope/header domain mismatch is ignored
 | 
					 | 
				
			||||||
allow_hdrfrom_mismatch = false;
 | 
					 | 
				
			||||||
# If true, multiple from headers are allowed (but only first is used)
 | 
					 | 
				
			||||||
allow_hdrfrom_multiple = false;
 | 
					 | 
				
			||||||
# If true, username does not need to contain matching domain
 | 
					 | 
				
			||||||
allow_username_mismatch = false;
 | 
					 | 
				
			||||||
# If false, messages from authenticated users are not selected for signing
 | 
					 | 
				
			||||||
auth_only = true;
 | 
					 | 
				
			||||||
# Default path to key, can include '$domain' and '$selector' variables
 | 
					 | 
				
			||||||
path = "/data/dkim/keys/$domain.$selector";
 | 
					 | 
				
			||||||
# Default selector to use
 | 
					 | 
				
			||||||
selector = "dkim";
 | 
					 | 
				
			||||||
# If false, messages from local networks are not selected for signing
 | 
					 | 
				
			||||||
sign_local = true;
 | 
					 | 
				
			||||||
# Symbol to add when message is signed
 | 
					 | 
				
			||||||
symbol = "DKIM_SIGNED";
 | 
					 | 
				
			||||||
# Whether to fallback to global config
 | 
					 | 
				
			||||||
try_fallback = true;
 | 
					 | 
				
			||||||
# Domain to use for DKIM signing: can be "header" or "envelope"
 | 
					 | 
				
			||||||
use_domain = "header";
 | 
					 | 
				
			||||||
# Whether to normalise domains to eSLD
 | 
					 | 
				
			||||||
use_esld = true;
 | 
					 | 
				
			||||||
# Whether to get keys from Redis
 | 
					 | 
				
			||||||
use_redis = false;
 | 
					 | 
				
			||||||
# Hash for DKIM keys in Redis
 | 
					 | 
				
			||||||
hash_key = "DKIM_KEYS";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Domain specific settings
 | 
					 | 
				
			||||||
#domain {
 | 
					 | 
				
			||||||
#  example.com {
 | 
					 | 
				
			||||||
#    # Private key path
 | 
					 | 
				
			||||||
#    path = "/var/lib/rspamd/dkim/example.key";
 | 
					 | 
				
			||||||
#    # Selector
 | 
					 | 
				
			||||||
#    selector = "ds";
 | 
					 | 
				
			||||||
#  }
 | 
					 | 
				
			||||||
#}
 | 
					 | 
				
			||||||
@@ -15,6 +15,25 @@ mailcow UI configuration parameters can be to...
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
\* To change SOGos default language, you will need to edit `data/conf/sogo/sogo.conf` and replace "English" by your preferred language.
 | 
					\* To change SOGos default language, you will need to edit `data/conf/sogo/sogo.conf` and replace "English" by your preferred language.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Anonymize headers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Save as `data/conf/postfix/mailcow_anonymize_headers.pcre`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					/^\s*Received:[^\)]+\)\s+\(Authenticated sender:(.+)/
 | 
				
			||||||
 | 
						REPLACE Received: from localhost (localhost [127.0.0.1]) (Authenticated sender:$1
 | 
				
			||||||
 | 
					/^\s*User-Agent/        IGNORE
 | 
				
			||||||
 | 
					/^\s*X-Enigmail/        IGNORE
 | 
				
			||||||
 | 
					/^\s*X-Mailer/          IGNORE
 | 
				
			||||||
 | 
					/^\s*X-Originating-IP/  IGNORE
 | 
				
			||||||
 | 
					/^\s*X-Forward/         IGNORE
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Add this to `data/conf/postfix/main.cf`:
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					smtp_header_checks = pcre:/opt/postfix/conf/mailcow_anonymize_headers.pcre
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Backup and restore maildir (simple tar file)
 | 
					## Backup and restore maildir (simple tar file)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Backup
 | 
					### Backup
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user