Mail Server · 4 min read · Oct 13, 2025

Einrichten eines Mailservers mit Exim4, Clamav, Dovecot, SpamAssassin und vielen weiteren auf Debian Lenny

Einrichten eines Mailservers mit Exim4, Clamav, Dovecot, SpamAssassin und vielen weiteren auf Debian

Dieses Howto beschreibt eine Möglichkeit, eine skalierbare, sichere, voll funktionsfähige Mail-Plattform aufzubauen. Es bietet virtuelles Hosting von Postfächern im Maildir-Format mit Unterstützung für Quotas und serverseitige Filterung, Domain-Alias, Adress-Alias, Adressweiterleitung und Catchall-Adressen. Das Relaying ist mit STARTTLS und SMTP-AUTH gesichert. Eingehende Mails werden auf Viren, Spam überprüft und gegen die SPF-Richtlinie und DNSBL geprüft.

Um Skalierbarkeit zu erreichen, wird die Einrichtung auf 3 Server aufgeteilt:

  • 1 MX-Server, auf dem die meisten Sicherheitsfunktionen sitzen (faramir.middle.earth)
  • 1 SMTP-Relay, um Benutzern das Senden von Mails in die Außenwelt zu ermöglichen (ectelion.middle.earth)
  • 1 Mailstore-Server, auf dem das Postfach sitzt (denetor.middle.earth)

Natürlich können weitere MX-Server mit DNS-MX-Einträgen zu Ihren Domains hinzugefügt werden, weitere Relay-Server können mit DNS-Round-Robin hinzugefügt werden, und weitere Mailstores können mit den in diesem Howto beschriebenen Mechanismen hinzugefügt werden. Im Gegenteil können Sie leicht den MX- und den Relay-Teil oder den Relay- und den Mailstore-Teil zusammenführen. Das Zusammenführen von MX und Mailstore erfordert einige Modifikationen.

Vorbemerkung

In diesem Howto gehen wir davon aus, dass Sie einen funktionierenden Debian-Server haben. Außerdem sollte sudo auf den Systemen installiert sein und Sie müssen ein Sudoer sein.

Konfigurieren von LDAP

Die Benutzerinformationen werden in einem LDAP-Verzeichnis gespeichert. Hier werden wir es auf dem Relay-Server installieren.

Zuerst installieren wir die notwendigen Pakete:

 sudo apt-get install slapd ldap-utils

Für das Tutorial verwenden wir die folgenden LDAP-Parameter:

ldapBase: dc=middle,dc=earth

adminDn: cn=admin,dc=middle,dc=earth

adminPwd: thirdAge

Zusätzlich verwenden wir ein spezifisches LDAP-Schema. Die meisten Attribute und Objekte sind Standard, mit Ausnahme von ein oder zwei. Vorsicht: Da es viele Standardattribute gibt, müssen Sie darauf achten, dass keines von ihnen doppelt definiert ist.

Fügen wir also das Schema in OpenLDAP in /etc/ldap/schema/mailMEO.schema hinzu:

 attributetype ( 2.16.840.1.113730.3.1.13   
   NAME 'mailLocalAddress'   
   DESC 'RFC822 E-Mail-Adresse dieses Empfängers'   
   EQUALITY caseIgnoreIA5Match   
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )   
 
attributetype ( 2.16.840.1.113730.3.1.16   
   NAME 'mailQuota'   
   DESC 'Maximale Menge an Speicherplatz für ein Postfach in Kilobytes'   
   EQUALITY integerMatch   
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )   
 
attributetype ( 2.16.840.1.113730.3.1.18   
   NAME 'mailHost'   
   DESC 'FQDN des SMTP/MTA dieses Empfängers'   
   EQUALITY caseIgnoreIA5Match   
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256}   
   SINGLE-VALUE )   
 
attributetype ( 2.16.840.1.113730.3.1.22   
   NAME 'mailCopyAddress'   
   DESC 'RFC822 E-Mail-Schattenkopie-Adresse'   
   EQUALITY caseIgnoreIA5Match   
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )   
 
attributetype ( 2.16.840.1.113730.3.1.47   
   NAME 'mailRoutingAddress'   
   DESC 'RFC822 Routing-Adresse dieses Empfängers'   
   EQUALITY caseIgnoreIA5Match   
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )   
 
attributetype ( 2.16.840.1.113730.3.1.49   
   NAME 'spamassassinUserPrefs'   
   DESC 'SpamAssassin-Benutzereinstellungen'   
   EQUALITY caseIgnoreIA5Match   
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )   
 
objectclass ( 2.16.840.1.113730.3.2.147   
   NAME 'inetLocalMailRecipient'   
   DESC 'Internet lokaler Mailempfänger'   
   SUP top AUXILIARY   
   MAY   ( mailLocalAddress $ mailHost $ mailRoutingAddress $ mailCopyAddress $ mailQuota $ spamassassinUserPrefs ) )   
 
objectclass ( 2.16.840.1.113730.3.2.148   
   NAME 'inetMailForwarder'   
   DESC 'Internet-Mail-Weiterleitungsadresse'   
   SUP top AUXILIARY   
   MAY   ( mailHost $ mailRoutingAddress ) )

Stellen Sie dann sicher, dass Sie das benötigte Schema in /etc/ldap/slapd.conf hinzufügen:

...  
include /etc/ldap/schema/inetorgperson.schema  
include /etc/ldap/schema/mailMEO.schema  
...

… und überprüfen Sie den Suffix (debconf sollte ihn bereits konfiguriert haben, als Sie slapd installiert haben):

suffix          "dc=middle,dc=earth"

Jetzt fügen wir einige ACLs hinzu, die die Daemons benötigen, um sich bei LDAP zu binden.

Ein schreibgeschützter Zugriff auf das Attribut userPassword für Dovecot:

access to attrs=userPassword,shadowLastChange   
        by dn="cn=admin,dc=middle,dc=earth" write   
        by dn="uid=dovecot,dc=middle,dc=earth" read   
        by anonymous auth   
        by self write   
        by * none

Ein schreibgeschützter Zugriff auf andere Attribute für Exim und Dovecot:

access to *   
        by dn="cn=admin,dc=middle,dc=earth" write   
        by dn="uid=dovecot,dc=middle,dc=earth" read   
        by dn="uid=exim,dc=middle,dc=earth" read   
        by * read  
        by anonymous none

Die letzte ACL deaktiviert anonyme Lesezugriffe, ermöglicht jedoch das Lesen (Suchen) für jeden authentifizierten Benutzer, was Sie möglicherweise nicht möchten.

Wir können jetzt slapd neu starten, damit die Änderungen wirksam werden:

sudo /etc/init.d/slapd restart

Wir müssen die Benutzer der vorherigen ACL erstellen. Dazu verwenden wir die folgende user.ldif-Datei:

dn: uid=exim,dc=middle,dc=earth  
objectClass: account  
objectClass: simpleSecurityObject  
objectClass: top  
uid: exim  
userPassword:: e01ENX1hOElTeXAwV2hnVzFSVnhHd0hCNDF3PT0=  
  
dn: uid=dovecot,dc=middle,dc=earth  
objectClass: account  
objectClass: simpleSecurityObject  
objectClass: top  
uid: dovecot  
userPassword:: e01ENX1yZGp2Q1lPNmtDRm1scXAyVWQwa0xBPT0=

Die Benutzer/Passwörter sind:

dovecot/dovecotpopper
exim4/eximmta 

Um das Verzeichnis zu füttern:

ldapadd -x -D cn=admin,dc=middle,dc=earth -W < users.ldif

Hier ist eine weitere ldif-Datei, die Beispieldaten enthält (Vorsicht, dieses Beispiel enthält IP-Adressen, die nicht zu Ihrer Einrichtung passen, ändern Sie sie manuell):

dn: ou=domains,dc=middle,dc=earth  
objectClass: organizationalUnit  
objectClass: top  
ou: domains  
  
dn: dc=middle.earth,ou=domains,dc=middle,dc=earth  
dc: middle.earth  
objectClass: dNSDomain  
objectClass: top  
objectClass: inetLocalMailRecipient  
objectClass: domainRelatedObject  
objectClass: posixAccount  
mailLocalAddress: [email protected]  
cn: catchall  
gidNumber: 8  
homeDirectory: /var/mail/middle.earth/c/catchall  
uid: catchall  
uidNumber: 8  
userPassword:: e01ENX1EV3RteGErOFROanJKNUFXZWt1Z0tBPT0=  
mailQuota: 102400  
mailHost: denetor.middle.earth  
associatedDomain: middle.earth  
associatedDomain: lotr.middle.earth  
  
dn: uid=sam,dc=middle.earth,ou=domains,dc=middle,dc=earth  
cn: sam  
displayName: Sam Gamji  
gidNumber: 8  
homeDirectory: /var/mail/middle.earth/s/sam  
mail: [email protected]  
mailHost: 172.16.16.23  
mailQuota: 102400  
objectClass: inetLocalMailRecipient  
objectClass: inetOrgPerson  
objectClass: posixAccount  
objectClass: top  
sn: Gamji  
uidNumber: 8  
uid: sam  
userPassword:: e01ENX1NeVV5M1BxaHkvWWVLaVpyMXlOaExBPT0=  
mailLocalAddress: [email protected]  
mailLocalAddress: [email protected]  
mailLocalAddress: [email protected]  
  
dn: uid=frodo,dc=middle.earth,ou=domains,dc=middle,dc=earth  
cn: frodo  
displayName: Frodo Baggins  
gidNumber: 8  
givenName: Frodo  
homeDirectory: /var/mail/middle.earth/f/frodo  
mail: [email protected]  
mailHost: 172.16.16.23  
mailQuota: 102400  
objectClass: inetLocalMailRecipient  
objectClass: inetOrgPerson  
objectClass: posixAccount  
objectClass: top  
sn: Baggins  
uidNumber: 8  
uid: frodo  
userPassword:: e01ENX04UGlDRHVnWEdCMmNhRktnbDljTmpRPT0=  
mailLocalAddress: [email protected]  
mailLocalAddress: [email protected]  
mailLocalAddress: [email protected]  
  
dn: uid=gmail,dc=middle.earth,ou=domains,dc=middle,dc=earth  
cn: gmail  
mail: [email protected]  
mailHost: 172.16.16.23  
mailRoutingAddress: [email protected]  
objectClass: inetMailForwarder  
objectClass: inetOrgPerson  
objectClass: top  
sn: alias zu Gmail-Adresse  
uid: gmail
``
Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.