Teaser
The more I see, the more I know
The more I know, the less I understand
clear

Login:

Username:
Password:

Ubuntu Exim / Dovecot Howto

1.1 Einleitung

Basierend auf dem sehr gutem Exim/Dovecot Howto von struction.de stelle ich hier einmal eine komplette Konfiguration für einen Mailserver basierend auf Exim, Dovecot, mysql für Ubuntu zur Verfügung. Das Howto ist unter folgenden Linux Versionen getestet:

 

Getestet unter Ubuntu Karmic !

 

Features:

  • Exim SMTP Server mit Greylisting (all Credits to Struction.de)
  • wahlweise mit/ohne Smarthost Funktionalität für lokale Mailserver
  • Virus Check durch ClamAV (all Credits to Struction.de)
  • Spam Check durch Spamassassin (all Credits to Struction.de)
  • SQL Userverwaltung per PHP Frontend oder per Shell Script (Todo)
  • Dovecot IMAP / POP3 Server
  • Sieve Unterstützung

 

Von der Anleitung auf struction.de unterscheidet sich dieses Howto durch die Ausrichtung auf Ubuntu 9.10, eine Weboberfläche für die Userverwaltung und kleinere Anpassung und Korrekturen. Dennoch wäre das Howto ohne die Vorarbeit von struction.de nicht möglich gewesen

 

 


2.1) Pakete

Für die komplette Installation benötigen wir folgenden Pakete:

  • exim4-daemon-heavy
  • dovecot-common, dovecot-imapd, dovecot-pop3d
  • clamav-daemon, clamav, clamav-freshclam
  • spamassassin
  • mysql-server, mysql-client

Optionale Pakete (zur Verwaltung via Webinterface):

  • apache2 (optional)
  • phpmyadmin (optional)

 

Nun installieren wir die Pakete:

apt-get install exim4-daemon-heavy dovecot-common dovecot-imapd dovecot-pop3d \

clamav-daemon clamav clamav-freshclam spamassassin mysql-server mysql-client \

phpmyadmin apache2

 

 

2.2 User anlegen

Außerdem richten wir noch zwei User ein: Einmal für Spamassassin und einmal für die Mails. Letztendlich kann jedes Verzeichnis bzw. Usernamen genommen werden, ich wähle /var/mails und den User "mails" für die Emails und den User "spamd" für Spamassassin.

groupadd spamd

useradd -g spamd -s /bin/false -d /home/spamd spamd

mkdir /home/spamd

chown spamd:spamd /home/spamd

groupadd emails

useradd -g emails -s /bin/false -d /var/mails emails

mkdir /var/mails

chown emails:emails  /var/mails

 

Nun merken wir uns noch, welche User- und Gruppen ID der User hat:

# grep emails /etc/passwd

emails:x:1002:1002:,,,:/var/mails/:/bin/false

In unserem Fall also die User-ID 1002 und die Gruppen ID 1002. Merken!

 

 

2.3 IPv6 deaktivieren

Wieso IPv6 deaktivieren ? Per Default hat Ubuntu IPv6 aktiviert. Das bedeutet aber, daß man jede lokale IPv6 Adresse bei den Server Diensten mit angeben und konfigurieren muss. so muss z.B. exim bei einer vorhandenen IPv6 Konfiguration auch auf der IPv6 Adresse lauschen, weil sonst z.B. fetchmail keine Emails zustellen kann. Da es zumindest beim Autor keine Rolle spielt, ob IPv6 Adressen vorhanden sind, wird IPv6 komplett deaktiviert. Macht das Leben einfacher und sorgt für weniger Probleme.

in /etc/hosts die IPv6 Adressen deaktivieren

Bei Ubuntu < 9.10 : /etc/modprobe.d/blacklist folgende Zeile eintragen:

blacklist ipv6


Bei Ubuntu 9.10: Die Datei /etc/default/grub ändern:

GRUB_CMDLINE_LINUX="ipv6.disable=1"

Anschließend "update-grub2" ausführen!


3) Mysql einstellen

3.1 MysQL

Zunächst legen wir einen MySQL- User an für die Email Userverwaltung in mySQL:

mysql -u root -p (mit mySQL verbinden)

create database exim4;

grant usage on *.* to exim_user@localhost identified by 'exim_pass';

grant all privileges on exim4.* to exim_user@localhost ;

 

Die passende mySQL Struktur kann man hier herunterladen. Anschließend wie folgt importieren:

mysql -u root -p exim4 < exim4.sql


1.4 Exim

Unter Ubuntu (basierend auf Debian) ist die Config auf dem ersten Blick verwirrend, da es bei Debian verschiedene Möglichkeiten gibt, wie Exim verwaltet wird. Sofern man Debian seine Config pflegen lassen möchte, so kann man Einstellungen in "/etc/exim4/update-exim4.conf" vornehmen und dann mit 'dpkg-reconfigure exim4-config' übernehmen. Siehe auch /usr/share/doc/exim4-base/README.Debian.g für mehr Details.

Wenn jedoch unter Ubuntu/Debian eine /etc/exim4/exim4.conf Datei vorhanden ist, dann wird diese als lokale Config genommen und der gesamte Automatismus ignoriert. Dies ist die Möglichkeit die ich bevorzuge und in diesem Howto auch einsetze.

 

]1.4.1 exim4.conf installieren

Eine fertige Exim Config für dieses Setup kann man hier herunterladen: /etc/exim4/exim4.conf

 

Anschließend muss man die notwendigen Änderungen vornehmen:

Zeile 35: hier werden die mySQL Zugangsdaten eingetragen:

hide mysql_servers = MYSQL_HOST/EXIM_DB/EXIM_USER/EXIM_PASS

 

Zeile 62: hier die lokalen Adressen, auf die Exim lauschen soll, eintragen. Das sind üblicherweise localhost sowie die Adressen vom Server.

local_interfaces =  127.0.0.1 : 188.188.188.188

 

Zeile 84: hier werden die Adressen eingetragen, von den Exim ohne jedes Passwort Emails entgegen nehmen soll. In unserem Beispiel ist das identisch der lokalen Adressen:

hostlist   relay_from_hosts = 127.0.0.1 : 188.188.188.188       

 

Zeile 104 und 105: hier werden die SSL Zertfikate eingetragen. Diese werden später erstellt.

tls_certificate = /etc/exim4/exim.crt

tls_privatekey= /etc/exim4/exim.key

 

Zeile 722ff: wenn Exim als Smarthost arbeiten soll, dann müssen hier die Einstellungen vorgenommen werden. Ein Smarthost mag dann notwendig sein, wenn Exim im lokalen Netz arbeitet und die Emails zunächst einen anderen Mailserver zugestellt werden sollen. Die Voreinstellung ist direkte Zustellung der Emails ohne Smarthost!

 

 

 

1.4.2 Alias Datei setzen

Über die Systemeigene Alias Datei, kann man noch unabhängig von der SQL Datenbank Aliase verwalten. Das eignet sich hervoragend um z.B. Servermitteilungen die z.B.an root gesendet werden, zu verwalten.

touch /etc/mail/aliases

Die Datei sieht z.B. so aus:

root    user@hier_kommt_meine_domain.de

Nach Änderungen an der Datei wird dann das Programm "newaliases" ausgeführt!

 

 

1.4.3 SSL Zertifikate erstellen

Ein "wenig" versteckt findet man unter Ubuntu ein Programm zum erstellen der Exim SSL Zertifikate. Folgendes Programm starten:

/usr/share/doc/exim4-base/examples/exim-gencert

 

 

1.4.4 greylist Tabelle löschen

Die Greylist Tabelle füllt sich nach und nach. Daher ist ein regelmäßiges löschen angebracht. Das kann man entweder per cronjob durchführen oder ab mySQL 5.1.x auch per mySQL Eventsteuerung. Dazu muß man zunächst die mySQL Events in der my.cnf von mySQL aktivieren:

# Event

event_scheduler         = 1

Nun kann man in die mySQL Datenbank folgendes Event setzen:

DROP EVENT `clear_greylist`;

CREATE EVENT `clear_greylist` ON SCHEDULE EVERY 300 SECOND STARTS '2009-11-07 09:37:16' ON 

COMPLETION NOT PRESERVE ENABLE DO delete from greylist where 

 (FROM_UNIXTIME(first_seen)+INTERVAL 2 DAY) < NOW();

 

 

 

1.5 Dovecot

Dovecot ist ein sehr guter Imap und Pop3 Server mit einer sehr guten Dokumentation. Die Installation ist eigentlich relativ einfach, wir müssen nur kleinere Anpassungen vornehmen. Die fertige Konfigurationsdateien (eine für Dovecot, eine für die SQL Anbindung) kann man sich hier herunterladen. Im weiteren werde ich mich darauf beziehen. Die Verzeichnisstruktur basiert auf den Vorschlägen der Dovecot Anleitung

 

Die Konfigurationsdateien liegen hier:

/etc/dovecot/dovecot.conf
/etc/dovecot/dovecot-sql.conf

 

 

1.5.1 Logging

mkdir /var/log/dovecot

chown emails:emails /var/log/dovecot

 

 

1.5.2 Anpassungen in /etc/dovecot/dovecot.conf

Zeile 42: welche Dienste sollen gestartet werden?

protocols = imap imaps pop3 pop3s managesieve

 

Zeile 70: sollen auch bei unverschlüsselter Verbindung Klartext Passwörter akzeptiert werden ?

disable_plaintext_auth = no

 

Zeile 117: SSL Zertifikate. Im Beispiel nehme ich die gleichen wie für Exim.

ssl_cert_file = /etc/exim4/exim.crt

ssl_key_file = /etc/exim4/exim.key

 

Zeile 235: Wo liegt das Mail Verzeichnis. DIese Angabe muß mit denen bei Exim übereinstimmen.

mail_location = maildir:~/Mails

 

Zeile 701ff: Sieve Anpassungen ?

sieve=~/.dovecot.sieve

sieve_storage=~/sieve

 

Zeile 729ff: LDA Anpassungen ?

protocol lda {

 postmaster_address = postmaster@DOMAIN_ANGABE (!)

 #hostname =

  #log_path = /var/log/sieve/sieve.log

 #info_log_path = /var/log/sieve/sieve2.log

 #debug=yes

 deliver_log_format = msgid=%m: %$f %s %$

 }

 

 

Zeile 835ff: Debug Ausgabe aktivieren ?

auth_debug = no

auth_debug_passwords = no

 

Zeile 877ff: SQL Userverwaltung

 # SQL database 

 passdb sql {

 # Path for SQL configuration file

 args = /etc/dovecot/dovecot-sql.conf

 }

 

Zeile 884ff: SQL Userverwaltung

 # SQL database 

userdb sql {

# Path for SQL configuration file

args = /etc/dovecot/dovecot-sql.conf

}

 

 

1.5.3 Anpassungen in /etc/dovecot/dovecot-sql.conf

mySQL Zugangsdaten anpassen

connect = host=127.0.0.1 dbname=EXIM_DB user=EXIM_USER password=EXIM_PASS

 

Passwort Format? Ich nehme in diesem Beispiel MD5-Crypt, also "versalzende MD5-Hashes". Das Passwort liegt also nicht im Klartext in der Datenbank und kann auch schlecht durch Rainbow Tabellen ermittelt werden.

default_pass_scheme = MD5-CRYPT

 

Hier werden nun die beiden SQL Abfragen für User- und Passwort Abfrage eingerichtet. Die numerischen ID für User und Gruppen müssen dem System angepasst werden (also unter welchem User die Emails gespeichert werden).

password_query = SELECT password FROM mailbox WHERE username  = '%u'

user_query = SELECT maildir as home, 1002 AS uid, 1002 AS gid FROM \\

               mailbox WHERE username = '%u' and active="1";

# Achtung: Die user_query muss eine Zeile sein

 

 

 

1.6 ClamAV

Mit Clamav werden eingehende Emails auf Viren überprüft.

Zunächst fügen wir den User "clamav" der Gruppe "Exim-Debian" zu, damit Clamav auf die Emails zugreifen kann:

usermod -a -G Debian-exim clamav

 

Dann müssen wir die Apparmor Sicherheitseinstellungen noch anpassen, damit clamav überhaupt in das Verzeichnis schreiben darf.

/etc/apparmor.d/usr.sbin.clamd

 # For use with exim

 /var/tmp/** krw,

 /var/spool/exim4/** krw,

Anschließend apparmor neu starten (/etc/initd.d/apparmor restart)

 

 

1.7 Spamassassin

Mit Spamassassin wird bereits beim SMTP Prozess auf Spam überprüft und die Email wird je nach Spam-Score abgelehnt (hoher Spam-Score, wird berechnet aus BUGBUGBUG), per Greylisting auf später verschoben (mittlerer Spam-Score, größer 10) oder direkt zugestellt (niedriger Spam-Score). Um dieses flexibel zu halten, ist in der SQL Datenbank eine individuelle Spam-Score Einstellung möglich.

/etc/default/spamassassin

Zeile 8: Anstellen

ENABLED=1

 

Zeile 31: Automatische Updates der Spamassassin Regeln

CRON=1

 

 

1.8 Webuserverwaltung installieren

Für die Userverwaltung nehme ich eine geänderte Version von Postfix Admin, einem exzellenten Tool für Postfix mit mysql. Einfach das Tar-File runterladen und entpacken.

Email Admin Software

Außerdem müssen ggf. noch die PHP Imap Funkionen nachgerüstet werden:

apt-get install php5-imap

 

 

1.8.1 Webuserinterface anpassen

Dazu die Datei config.inc.php im Root Verzeichnis des Webuserinterfaces anpassen:

 

Zeile 31: Setup Passwort hinterlegen: dazu kommen wir später !

 

Zeile 49: mysql Parameter anpassen

 

Zeile 76: Postmaster Adresse hinterlegen

 

Zeile 124ff: default Aliase für die Domains hinterlegen

 

Zeile 147: Eckdaten einer Domain. Die Begrenzen gelten für Domain Administratoren, nicht für den Super User

 

Zeile 310: Wenn das Homeverzeichnis eines User nicht existiert, werden keine Email zugestellt. Daher erstellen wir unmittelbar nach dem erzeugen der Email die richtige Verzeichnisstruktur.

Abspeichern. Und die Weboberfläche aufrufen: DOMAIN/emailadmin/setup.php

Nun trägt man unten ein Superuser Password ein und erhält dafür einen MD5 Hash Key. Diesen trägt man nun in die Config Datei, Zeile 31 ein.

Anschließend ruft man wieder die Weboberfläche auf, trägt bei "Setup password" das eben genannte Passwort ein und erstellt anschließend einen Admin user. Nun kann man über DOMAIN/emailadmin die Verwaltungsoberfläche aufrufen.

 

 

1.8.2 Create User Directory

Hier zu muß die Datei /etc/sudoers angepasst werden:

 www-data HOSTNAME =  NOPASSWD: /usr/local/bin/maildirmake.sh

 

Und die Datei /usr/local/bin/maildirmake.sh sieht wie folgt aus:

#!/bin/bash

set -e

mail_home="/var/mails/"

mkdir -p "$mail_home/$3"

chown -R emails:emails "$mail_home/$3"

chmod -R 700 "$mail_home/$3"

Die Datei bekommt dann die Rechte "4755", also

chmod 4755 /usr/local/bin/maildirmake.sh

 

 

 

 

1.9 Sieve

Sieve ist eine Möglichkeit direkt bei der Email Zustellung die Emails zu sortieren. So kann man z.B. Mails von Mailinglisten gleich in das passende Verzeichnis schieben, ohne daß auf Client Seite hier Filter nötig werden.

 

Die installierte Config unterstützt Sieve bereits. Für Thunderbird muß man ein Plugins nachinstallieren. Unter "Extras -> Sieve Nachrichtenfilter" kann man nun seine Filter einstellen. Wichtig: Eventuelle Verzeichnissturen werden durch ein Punkt "." unterteilt, also "INBOX.Mailinglisten.Email.Dovecot" ergibt "/Mailinglisten/Email/Dovecot/". Neu erstellte Verzeichnisse werden automatisch abonniert.

Ein Beispiel:

require ["fileinto", "reject"];

#

#  Email 

#

if header :contains "List-ID"  "courier-users.lists.sourceforge.net" {

   fileinto "INBOX.Mailinglisten.Email.Courier"; stop;

}

elsif header :contains "List-ID"  "dovecot.dovecot.org" {

   fileinto "INBOX.Mailinglisten.Email.Dovecot"; stop;

}

elsif address :is ["From", "To"] "support@stonki.de" {

  fileinto "INBOX.stonki"; stop;

}

[Edit]1.10 Squirrelmail

Squirrelmail kann man via apt-get oder durch die aktuellste Version von der Squirrelmail Webseite. Beim direkten Installieren einfach von der Webseite runterladen und in das Webverzeichnis kopieren.

Configure -ein Menügesteuertes Config Programm- aufrufen:

./configure

Im Punkt 2 die Server Einstellungen ändern:

1.  Domain                 : example.com

 

Im Punkt 3 die Folder Einstellungen ändern. Sonst gibt es z.B. Probleme mit dem Zusammenspiel mit Thunderbird!

3.  Trash Folder                   : Trash

4.  Sent Folder                    : Sent

5.  Drafts Folder                  : Drafts

In Punkt 4 sehen wir noch die Verzeichnisse für Anhänge sowie zwei nette Einstellungen für die Thread Darstellung in Squirrelmail:

1.  Data Directory               : /var/local/squirrelmail/data/

2.  Attachment Directory         : /var/local/squirrelmail/attach/

....

10. Allow server thread sort     : true

11. Allow server-side sorting    : true

 

Bitte erstellen und www-data zuverweisen:

mkdir -p /var/local/squirrelmail/data

mkdir -p /var/local/squirrelmail/attach

chown -R www-data:www-data /var/local/squirrelmail/

 

 

1.11 Rechner neustarten

Wegen der Änderungen der Gruppen sowie bei den Modulen empfiehlt sich ein Neustart des Systems. Bei mehreren Installationen basierend auf diesem Howto haben sich eine Menge vermeintlicher Probleme nach dem ersten Neustart in Luft aufgelöst.

 

 

1.12 Testen

Bei Probleme stehen mehrere Logs zur Verfügung:

/var/log/exim/mainlog

/var/log/mails.log

/var/log/dovecot/dovecot.log

/var/log/lda_info.log

 

Viel Spaß !

 

 

1.13 Testimonial

28. Januar 2010 : Installation auf www.stonki.de

08. Januar 2010 : Installation auf www.2wheel-distribution.com

01. November 2009 : Installation auf www.svenna.de