Postfix et LDAP : contrôler le destinataire

par julien, juillet 2007

Par défaut, le système Postfix accepte tous les mails à destination d'un domaine particulier mais, n'ayant pas connaissance des comptes existant sur ce domaine, il ne peut filtrer plus précisement les mails entrants. La solution est de relier postfix à l'outil de gestion des utilisateurs, ici LDAP. Pour cela, il faut tout d'abord avoir un système LDAP fonctionnel.

Mettre en place Slapd

Travaillant sous Debian (Etch, en l'occurrence), la première chose à faire est un

apt-get install slapd

Comme Debian est bien faite, dpkg pose la majorité des questions importantes pendant l'installation, ce qui fait que le fichier /etc/ldap/slapd.conf est quasiment fonctionnel. Il faut toutefois s'assurer que la version 2 du protocole est activée car postfix-ldap fonctionne encore avec cette version.

#######################################################################
# Global Directives:

# Features to permit
allow bind_v2

Si cette ligne n'est pas décommentée, postfix va loguer des erreurs de connections à LDAP.

Pour ce qui est de la base de données principale, celle de Linuxwall ressemble à ca :

{..............}
#######################################################################
# Specific Backend Directives for bdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
backend         bdb
checkpoint 512 30

#######################################################################
# Specific Backend Directives for 'other':
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
#backend                <other>

#######################################################################
# Specific Directives for database #1, of type bdb:
# Database specific directives apply to this databasse until another
# 'database' directive occurs
database        bdb

# The base of your directory in database #1
suffix          "dc=linuxwall,dc=info"

# rootdn directive for specifying a superuser on the database. This is needed
# for syncrepl.
rootdn          "cn=admin,dc=linuxwall,dc=info"

# mdp root obtenu avec "slappasswd -h '{SSHA}' -v"
rootpw {SSHA}machintruchashbidulequiestsupersecret

# Where the database file are physically stored for database #1
directory       "/var/lib/ldap"

# For the Debian package we use 2MB as default but be sure to update this
# value if you have plenty of RAM
dbconfig set_cachesize 0 2097152 0
{..............}

Avec ca, vous pouvez mettre en place un phpldapadmin sur apache (https évidemment ;) ) et vous connecter pour créer vos comptes. Personnellement, j'utilise l'attribut 'Courier mail account' dans phpldapadmin.

Configurer Postfix

Quand il reçoit un mail, postfix check la table des alias dans /etc/aliases (par défaut) pour voir si le mail doit être forwarder autre part. Il est possible de rajouter une directive dans le 'main.cf' pour que postfix requête LDAP avant ou après avoir checké cette table. Bien entendu, la première chose à faire est d'installer, toujours avec apt-get, le package postfix-ldap :

apt-get install postfix-ldap

Ensuite, a directive à ajouter est :

local_recipient_maps = ldap:/etc/postfix/ldap_local_recipient.cf, $alias_maps

sachant que alias_maps est habituellement placé sur la valeur

alias_maps = hash:/etc/aliases

Mais ce qui nous interesse ici, c'est 'ldap_local_recipient.cf'. Ce fichier doit contenir la méthode à utiliser pour interroger LDAP. Vous pouvez utiliser le modèle ci-dessous :

server_host = 127.0.0.1
server_port = 389
search_base = dc=linuxwall,dc=info

# le %s signifie "adresse du destinataire telle que fourni par la commande "RCPT TO:"
query_filter = (mail=%s)
result_attribute = mail

Il ne reste plus qu'a recharger Postfix et à tester. La commande postmap nous permet de vérifier que cela fonctionne :

sachiel:/# postmap -q switcher@linuxwall.info ldap://etc/postfix/ldap_local_recipient.cf
switcher@linuxwall.info
sachiel:/# postmap -q jeankevin@linuxwall.info ldap://etc/postfix/ldap_local_recipient.cf
sachiel:/#        

Dans le premier cas, postmap renvoie une réponse positive à la requête. Notez bien que vous devez requêter sous la forme user@domain et pas autrement. Dans le second cas, postmap ne renvoie rien, l'entrée n'a pas été trouvée.

Et voilà ! ;)~~DISCUSSION~~

fr/ressources/dossiers/postfix/ldap.txt · Last modified: 2011/03/16 01:41 (external edit)
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0