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-utilsFü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 * noneEin 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 noneDie 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 restartWir 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/dovecotpopperexim4/eximmta Um das Verzeichnis zu füttern:
ldapadd -x -D cn=admin,dc=middle,dc=earth -W < users.ldifHier 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
``Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.