OpenLDAP, sendmail und aliases
- Schema und Index
- Äste in OpenLDAP vorbereiten
aliases
in OpenLDAP einpflegen- Virtuelle User in OpenLDAP einpflegen
sendmail.mc
überarbeiten- Die neuen Einträge testen
Schema und Index
Bislang hat mein sendmail
sich seine Aliase und virtuelle User aus Hash-Datenbanken im Filesystem zusammengeklaubt; wenn nun aber schon ein OpenLDAP am Start ist, sollen auch diese Informationen darin abgelegt werden. Um das zu realisieren muss das sendmail.schema
in /etc/ldap/slapd.conf
eingebunden werden:
include /etc/ldap/schema/sendmail.schema
Außerdem wird die Konfiguration um einen weiteren Index erweitert:
index
sendmailMTACluster,sendmailMTAHost,sendmailMTAMapName,sendmailMTAKey eq
Der Übersichtlichkeit halber findest hier meine Version der slapd.conf
; und wie bereits im einführenden Artikel beschrieben muss die Konfigurationsdatenbank hernach verworfen und aus der slapd.conf
neu erzeugt werden – das Setzen der Dateirechte nicht vergessen. Nun kann der Dienst neu gestartet werden.
Äste in OpenLDAP vorbereiten
sendmail
erwartet seine Aliase in sendmailMTAMapName=aliases
, und ich beschließe, meine virtuellen User analog hierzu in sendmailMTAMapName=virtuser
unterzubringen; diese beiden Äste müssen dementsprechend im OpenLDAP-Baum erzeugt werden, und hierzu dient Sendmail.ldif
; die eigentlichen Aliase und virtuellen User werden anschließend wie Blätter an diese Äste angehängt:
# Entry for sendmailMTAMapName=aliases
dn: sendmailMTAMapName=aliases,dc=sysadmama,dc=de
objectclass: sendmailMTA
objectclass: sendmailMTAMap
objectclass: top
sendmailmtacluster: spiller.me
sendmailmtamapname: aliases
# Entry for sendmailMTAMapName=virtuser
dn: sendmailMTAMapName=virtuser,dc=sysadmama,dc=de
objectclass: sendmailMTA
objectclass: sendmailMTAMap
objectclass: top
sendmailmtacluster: spiller.me
sendmailmtamapname: virtuser
$ ldapadd -x -D 'cn=papaschlumpf,dc=sysadmama,dc=de' -W -f Sendmail.ldif
adding new entry "sendmailMTAMapName=aliases,dc=sysadmama,dc=de"
adding new entry "sendmailMTAMapName=virtuser,dc=sysadmama,dc=de"
aliases
in OpenLDAP einpflegen
Als erstes möchte ich einen Alias für zorro
erstellen: Mails an zorro
sollen in die Mailbox von User spillerm
zugestellt und außerdem an externer_user@example.com
weitergeleitet werden.
## Zorro.ldif
dn: sendmailMTAKey=zorro,sendmailMTAMapName=aliases,dc=sysadmama,dc=de
objectclass: sendmailMTA
objectclass: sendmailMTAAlias
objectclass: sendmailMTAAliasObject
sendmailmtaaliasgrouping: aliases
sendmailmtaaliasvalue: spillerm
sendmailmtaaliasvalue: externer_user@example.com
sendmailmtacluster: spiller.me
sendmailmtakey: zorro
$ ldapadd -x -D 'cn=papaschlumpf,dc=sysadmama,dc=de' -W -f Zorro.ldif
adding new entry "sendmailMTAKey=zorro,sendmailMTAMapName=aliases,dc=sysadmama,dc=de"
Analog hierzu werden alle benötigten Aliase – also zumindest das, was in /etc/aliases
bzw. /etc/mail/aliases
zu finden ist – eingepflegt; exemplarisch hierfür steht FirstAliases.ldif
, das Aliase für root
, postmaster
und mailer-daemon
definiert.
Virtuelle User in OpenLDAP einpflegen
Nach folgendem Schema werden die Einträge für die virtuellen User hinzugefügt.
## virtuser entry for blog@spiller.me
dn: sendmailMTAKey=blog@spiller.me,sendmailMTAMapName=virtuser,dc=sysadmama,dc=de
objectclass: sendmailMTA
objectclass: sendmailMTAMap
objectclass: sendmailMTAMapObject
objectclass: top
sendmailmtahost: spiller.me
sendmailmtakey: blog@spiller.me
sendmailmtamapname: virtuser
sendmailmtamapvalue: spillerm
sendmail.mc
überarbeiten
Bislang hat sendmail
noch keinen blassen Schimmer davon, dass diese Daten aus OpenLDAP gezogen werden sollen; im letzten Schritt ändern wir nun genau das. In aller Regel muss hierfür die sendmail.mc
editiert und um folgende Einträge erweitert werden:
...
dnl ## LDAP SETTINGS
define(`confLDAP_CLUSTER',`spiller.me')dnl
FEATURE(`virtusertable',`LDAP')dnl
define(`ALIAS_FILE',`ldap:')dnl
define(`confLDAP_DEFAULT_SPEC',`-h 127.0.0.1 -b dc=sysadmama,dc=de')dnl
define(`confLDAP_DEFAULT_SPEC',`-w 3')dnl
...
Auf diese Art definieren wir sendmailMTACluster
mit dem Wert spiller.me
und legen fest, dass sendmail
LDAPv3 „spricht“ – vergessen wir letzteres, kommt es sonst zu folgender Fehlermeldung:
Oct 11 12:44:43 spiller slapd[19398]: conn=1689 fd=29 ACCEPT from IP=127.0.0.1:39737 (IP=0.0.0.0:389)
Oct 11 12:44:43 spiller slapd[19398]: conn=1689 op=0 BIND dn="" method=128
Oct 11 12:44:43 spiller slapd[19398]: conn=1689 op=0 RESULT tag=97 err=2 text=historical protocol version requested, use LDAPv3 instead
Nun können wir die sendmail.cf
neu generieren und dem Dienst einen Tritt geben; sinnvollerweise solltest du parallel hierzu auch schon die Logfiles beobachten und eventuelle Fehlermeldungen aufgreifen!
$ cd /etc/mail
$ m4 sendmail.mc > sendmail.cf
$ service sendmail restart
Die neuen Einträge testen
Abschließend solltest du überprüfen, ob die Verbindung funktioniert und die Einträge korrekt aufgelöst werden; hierzu gibt es verschiedene Herangehensweisen, ich entscheide mich für eine relativ simple über die Konsole:
$ sendmail -bv zorro
spillerm... deliverable: mailer local, user spillerm
externer_user@example.com... deliverable: mailer esmtp, host example.com., user externer\_user@example.com
$ sendmail -bv mailer-daemon
spillerm... deliverable: mailer local, user spillerm
That’s it! In /var/log/syslog
lässt sich prima beobachten, wie beim Eintreffen neuer Nachrichten in OpenLDAP nachgeschlagen wird. Und analog zu sendmailMTAMapName=virtuser
lassen sich weitere Strukturen einrichten, beispielsweise für Mailinglisten (sendmailMTAMapName=mailman
), Ticketsysteme (sendmailMTAMapName=rt
, sendmailMTAMapName=otrs
) und so weiter – eine elegante Art, Struktur und Ordnung zu schaffen, vor allem in umfangreichen Umgebungen.
Hintergrundbild: Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten