Dovecot
configurationserveremaildovecot

Dovecot ist ein IMAP Server. Er kann von Postfix aber auch als SMTP Authentifizierungsserver genutzt werden, wodurch eine einheitliche Konfiguration möglich wird. Mit dovecot -a lässt sich herausfinden was in dovecot hinein kompiliert wurde. Es kann daher passieren, dass der Befehl nichts zurück gibt. Über die FreeBSD Ports kann man sich eine eigene Version kompilieren:

cd /usr/ports/mail/postfix-current/
make config   # in diesem Schritt dovecot2 aktivieren!
make
make install  # ggf. make reinstall anstattdessen

Die Einrichtung ist gut im Dovecot-Wiki beschrieben

postfix #

installation

pkg install icu gmake
cd /usr/ports/mail/postfix-current/

installation #

pkg install dovecot2 ;# less good documented but newer version of dovecot

first configuration steps #

cd /usr/local/etc/dovecot/
mkdir conf.d && cd conf.d/

cp ../example-config/conf.d/10-auth.conf .
cp ../example-config/conf.d/auth-passwdfile.conf.ext .
cp ../example-config/conf.d/10-mail.conf .
cp ../example-config/conf.d/10-master.conf .
cp ../example-config/conf.d/10-ssl.conf .

create a ssl certificate #

mkdir /usr/local/etc/ssl
cd /usr/local/etc/ssl
openssl genrsa -rand -genkey -out dovecot.key 4096
chmod 640 dovecot.key
openssl req -new -x509 -days 365 -key dovecot.key -out dovecot.crt -sha256

sieve #

Sieve is a server side mail message filter. Here comes how to set it up.

pkg install dovecot-pigeonhole ;# sieve support for dovecot2 (name misleading!)

copy required configuration files in place...

# /usr/local/etc/dovecot/conf.d/
cp /usr/local/share/doc/dovecot-pigeonhole/example-config/conf.d/20-managesieve.conf .
cp /usr/local/share/doc/dovecot-pigeonhole/example-config/conf.d/90-sieve.conf .
cp ../example-config/conf.d/20-lmtp.conf .
mkdir -p /var/lib/dovecot/sieve.d/

you copied the default config. modify these values (uncomment):

# 20-managesieve.conf
# ...
service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
}
# ...
service managesieve {
  # Max. number of ManageSieve processes (connections)
  process_limit = 1024
}
# ...
# 20-managesieve.conf
# ...
sieve_before = /var/lib/dovecot/sieve.d/
# ...
sieve_extensions = +vnd.dovecot.filter
# ...
sieve_plugins = sieve_extprograms
# /var/lib/dovecot/sieve.d/spamassassin.sieve
require [ "vnd.dovecot.filter" ];
filter "spamc" [ "--no-safe-fallback" ];

Restart dovecot and compile your sieve rules:

service dovecot restart
sievec /var/lib/dovecot/sieve.d/spamassassin.sieve

if you get this message you forgot to restart dovecot:

$ sievec /var/lib/dovecot/sieve.d/spamassassin.sieve
spamassassin: line 1: error: require command: unknown Sieve capability `vnd.dovecot.filter'.
spamassassin: line 2: error: unknown command 'filter' (only reported once at first occurrence).
spamassassin: error: validation failed.
sievec(root): Error: failed to compile sieve script '/var/lib/dovecot/sieve.d/spamassassin.sieve'

Here comes, what sieve will actually do for you: it is going to move mails containing ***Spam*** in the subject to a specific folder called Junk. So please change test.de/max according to your specific mail address:

# /var/mail/vhosts/test.de/max/.dovecot.sieve
require "fileinto";
if header :comparator "i;ascii-casemap" :contains "Subject" "***Spam***"  {
        fileinto "Junk";
        stop;
}

spamassassin #

installation

pkg install spamassassin spamass-rules

add spamd to /etc/rc.conf:

# /etc/rc.conf
spamd_enable="YES"               # enable spamassassin spam blocker
sa-update -D
spamassassin --lint   ;# check rules (optional)
sa-compile            ;# compile
spamd -D

service sa-spamd start

debugging #

tail -f "/var/log/maillog"     ;# dovecot logs here by default via syslog
tail -f "/var/log/dovecot.log" ;# postfix logs here by default
tail -f "/var/log/messages"    ;# postfix logs here by default

postqueue -p                   ;# shows postfix queue
postsuper -d ALL               ;# deletes all mails form queue

telnet -4 <domain> 25
openssl s_client -ign_eof -crlf -starttls smtp -connect <domain>:587 ;# also deactivates openssl renegotiation 
top