sendmail OpenLDAP aliases

wall < "OpenLDAP, sendmail und aliases"

Broadcast message from spillerm@unixe.de (pts/1) (Mo Okt 19 07:23:01 2015):
4
Diesen Beitrag schrieb ich vor 3 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

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

Ausserdem wird die Konfiguration um einen weiteren Index erweitert:

index		sendmailMTACluster,sendmailMTAHost,sendmailMTAMapName,sendmailMTAKey	eq

Der Übersichtlichkeit halber findest hier meine Version der slapd.confGITHUB; 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 beschliesse, meine virtuellen User analog hierzu in sendmailMTAMapName=virtuser unterzubringen; diese beiden Äste müssen dementsprechend im OpenLDAP-Baum erzeugt werden, und hierzu dient Sendmail.ldifGITHUB; die eigentlichen Aliase und virtuellen User werden anschliessend 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 ausserdem 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.ldifGITHUB, 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 marianne@spiller.me
dn: sendmailMTAKey=marianne@spiller.me,sendmailMTAMapName=virtuser,dc=sysadmama,dc=de
objectclass: sendmailMTA
objectclass: sendmailMTAMap
objectclass: sendmailMTAMapObject
objectclass: top
sendmailmtahost: spiller.me
sendmailmtakey: marianne@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

Abschliessend 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

UnterschriftThat’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.

4
  1. sendmail. #autschn ;)

Keine weitere Reaktionen mehr möglich.