Retourner en haut de la page Aller au bas de la page
Logo de mon site
Logo de mon site

Yasser Arafat

Item 1 Description

Yasser Arafat

Hugo Chávez

Item 1 Description

Hugo Chávez

Mikhaïl Gorbatchev

Item 1 Description

Mikhail Sergueievitch Gorbatchev

L'Abbé Pierre

Item 1 Description

Abbe Pierre

Salvadore Allende

Item 1 Description

Salvadore Allende

Angela Yvonne Davis

Item 1 Description

Angela Yvonne Davis

Jean Moulin

Item 1 Description

Jean Moulin

Nelson Mandela

Item 1 Description

Nelson Mandela

Martin Luther King

Item 1 Description

Martin Luther King

Gamal Abdel Nasser

Item 1 Description

Gamal Abdel Nasser

Richard Stallman

Item 1 Description

Richard Stallman

Simone Veil

Item 1 Description

Simone Veil

Hand Shake

Item 1 Description

Hand Shake

Wangari Muta Maathai

Item 1 Description

Wangari Muta Maathai

Michel Colucci

Item 1 Description

Coluche

Mère Teresa

Item 1 Description

Mère Térésa

Charles de Gaulle

Item 1 Description

Charles de Gaulle

Che Guevara

Item 1 Description

Ernesto Rafael Guevara

Mohandas Gandhi

Item 1 Description

Mohandas Karamchand Gandhi

Lech Walesa

Item 1 Description

Lech Walesa

Linus Benedict Torvalds

Item 1 Description

Linus Benedict Torvalds

Sous-commandant Marcos

Item 1 Description

Sous commandant Insurge Marcos

Ahmed Shah Massoud

Item 1 Description

Ahmed Shah Massoud

Luxpopuli / Internet / Postfix + Cyrus IMAP + SSL + LDAP / Postfix : contrôle LDAP





Right menu

OBLIGATOIRE

Un professeur témoigne

La brigade canine dans un collège du Gers.
Réaction d'une internaute Québécoise:
«quand on est rendu à accepter que (...) les autorité mettent leurs sales pattes dans les culottes de vos enfants (...) il est temps (...) de vous réveiller.»
OBLIGATOIRE

Les mensonges de R. Dati

La note de recadrage statistique du sociologue L. Mucchielli recadre également les mensonges de la propagande sécuritaire dont on nous rabat les oreilles depuis déjà trop longtemps et dont les mineurs de France sont à présents la cible.
Le rapport de L. Mucchielli
OBLIGATOIRE

L'aveu de Jean-Marc Sylvestre

«Le système financier s'effondre aujourd'hui comme un jeu de carte... parce que... il a été géré d'une part.... par les États-Unis sans règle... et il a été d'autre part géré... par une bande de voyous... qui se sont gouinfrés... au détriment des autres.»
VOIR LES VIDÉOS

OBLIGATOIRE

prev prev prev prev


Postfix : contrôle LDAP

Date de publication: le mercredi 16 mai 2007 à 11h10
Dernière modification: par Pascal BOYER le dimanche 15 juillet 2007 à 09h02
« Article précédent: Postfix : le fichier smtpd.conf
» Article suivant: Postfix : Analyse des logs

Avant propos

Dans cet article, nous allons voir comment utiliser un annuaire LDAP afin de contrôler les adresses de destination des mails que reçoit le serveur smtpd Postfix.

Pré-requis

La configuration du serveur smtpd Postfix présentée ici est totalement indépendante d’une quelconque configuration préalable, et relative à LDAP, du serveur imapd Cyrus IMAP.

Il en résulte que vous pouvez très bien configurer votre serveur smtpd Postfix comme indiqué dans cet article sans avoir à configurer le serveur imapd Cyrus-IMAP pour LDAP. En d’autres termes, vous pouvez très bien arrêter votre lecture sur la configuration de Cyrus IMAP à l’article 4, passer à la mise en oeuvre du serveur Postfix présentée dans les articles 8, 9, 10, 11 puis enchainer sur celui-ci. Bon, là, je pense avoir été clair.... ;-)

Généralités

Contexte

Le but que nous cherchons à atteindre est le suivant:

Chaque fois que Postfix va recevoir un mail à délivrer localement alors il va contrôler que l’adresse du destinataire existe bien dans l’annuaire.

  • si une entrée de l’annuaire LDAP contient cette adresse de destination alors Postfix fait suivre le mail à l’agent de distribution local qui le déposera dans la BàL,
  • si aucune entrée de l’annuaire LDAP ne contient cette adresse alors le mail sera rejeté par Postfix.

Ce comportement manichéen de Postfix (mail accepté ou rejetté) est délibéré.

Mais cela n’était pas mon souhait.

1°/ Le fichier main.cf

Puisqu’il faut bien commencer quelque part, ce sera par ce fichier.

Et la variable $alias_maps renvoie à cette règle:

Nous allons donc modifier la règle local_recipient_maps comme ceci:

2°/ Le fichier /usr/lib/sasl2/smtpd.conf

3°/ La table de recherche /etc/postfix/aliases

Dans les commentaires relatifs à la règle local_recipient_maps du fichier /etc/postfix/ main.cf il est dit ceci:

La table de recherche /etc/postfix/aliases doit contenir au moins tous les utilisateurs ayant une BàL sur le serveur IMAP si et seulement si local_recipient_maps = alias_maps !!!

donc:

  • 1°/ si nous conservons intacte cette table de rechercher, le serveur LDAP ne sera pas consulté puisque les adresses de destination sont contenues dans cette table qui est consultée en premier.
  • 2°/ nous devons conserver cette table de recherche car elle contient tous les alias relatifs au différents administrateurs logiciel ou système.

Une première solution aux 1°/ et 2°/ consiste bien évidemment à intervertir l’ordre de recherche. On obtient alors:

vi /etc/postfix/aliases

# /etc/postfix/aliases

# ========================  IMPORTANT !!!  ==========================
#
# Après chaque modification de cette base, penser à lancer les commandes:
#
#               ~# newaliases
#               ~# postfix reload
# =============================================================

# CI-DESSOUS, LES ALIAS DES ADMINISTRATEURS SYSTÈME ET LOGICIEL:

abuse:                   pascal@linuxorable.fr
ftp:                     pascal@linuxorable.fr
hostmaster:              pascal@linuxorable.fr
mailer-daemon:           pascal@linuxorable.fr
news:                    pascal@linuxorable.fr
nobody:                  pascal@linuxorable.fr
noc:                     pascal@linuxorable.fr
pirouette:               pascal@linuxorable.fr
postmaster:              pascal@linuxorable.fr
root:                    pascal@linuxorable.fr
security:                pascal@linuxorable.fr
usenet:                  pascal@linuxorable.fr
webmaster:               pascal@linuxorable.fr
webmin:                  pascal@linuxorable.fr
www:                     pascal@linuxorable.fr

# CI-DESSOUS, UNE ENTRÉE POUR CHAQUE BàL CRÉÉE SUR LE SERVEUR Cyrus-IMAP SI ON
# N'UTILISE PAS LDAP.

# SI ON UTILISE LDAP, ALORS IL FAUT COMMENTER LES ENTRÉES CI-DESSOUS.

# En LHS il ne doit pas y avoir de nom n'ayant pas de BàL sur le serveur !!!
# LHS                                       RHS
ma-femme:                ma-femme@linuxorable.fr
ma-fille:                ma-fille@linuxorable.fr
ma-soeur:                ma-soeur@linuxorable.fr
mon-bof:                 mon-bof@linuxorable.fr
mon-frere:               mon-frere@linuxorable.fr
mon-garçon1:             mon-garçon1@linuxorable.fr
mon-garçon2:             mon-garçon2@linuxorable.fr
pascal:                  pascal@linuxorable.fr

vi /etc/postfix/aliases

# /etc/postfix/aliases

# ========================  IMPORTANT !!!  ==========================
#
# Après chaque modification de cette base, penser à lancer les commandes:
#
#               ~# newaliases
#               ~# postfix reload
# =============================================================

# CI-DESSOUS, LES ALIAS DES ADMINISTRATEURS SYSTÈME ET LOGICIEL:

abuse:                   pascal@linuxorable.fr
ftp:                     pascal@linuxorable.fr
hostmaster:              pascal@linuxorable.fr
mailer-daemon:           pascal@linuxorable.fr
news:                    pascal@linuxorable.fr
nobody:                  pascal@linuxorable.fr
noc:                     pascal@linuxorable.fr
pirouette:               pascal@linuxorable.fr
postmaster:              pascal@linuxorable.fr
root:                    pascal@linuxorable.fr
security:                pascal@linuxorable.fr
usenet:                  pascal@linuxorable.fr
webmaster:               pascal@linuxorable.fr
webmin:                  pascal@linuxorable.fr
www:                     pascal@linuxorable.fr

A partir de maintenant, si vous tapez les deux commandes suivantes:

newaliases

et/ou

postfix reload

alors plus aucun mail ne parviendra dans les BàL et en regardant les logs de /var/log/mail.log vous devriez obtenir des messages du type:

postfix/smtpd[16464]: maps_find: local_recipient_maps: @linuxorable.fr: not found
postfix/smtpd[16464]: mail_addr_find: mon-bof@linuxorable.fr -> (not found)
postfix/smtpd[16464]: NOQUEUE: reject: RCPT from web26801.mail.ukl.yahoo.com[217.146.176.77]: 550 <mon-bof@linuxorable.fr>:
     Recipient address rejected: User unknown in local recipient table; from=<lucien@yahoo.fr> to=<mon-bof@linuxorable.fr>
     proto=SMTP helo=<web26801.mail.ukl.yahoo.com>
postfix/smtpd[16464]: > web26801.mail.ukl.yahoo.com[217.146.176.77]: 550 <mon-bof@linuxorable.fr>:
     Recipient address rejected: User unknown in local recipient table

Explicitons ce qui m’apparait par ailleurs tout à fait clair:

  • 1ère ligne: aucune adresse en @linuxorable.fr n’a été trouvée dans la table de recherche définie par la règle local_recipient_maps .
  • 2ème ligne: l’adresse mon-bof@linuxorable.fr n’a pas été trouvée.
  • 3ème ligne:
    • le mail n’a pas été placé dans la file d’attente deferred .
    • le mail, en provenance de mail.ukl.yahoo.com[217.146.176.77] a été rejeté définitivement (code erreur 550) parce que le destinataire est inconnu dans la table de recherche ( Recipient address rejected: User unknown in local recipient table; ).
  • 4ème ligne: à nouveau on nous donne la raison du rejet du mail.

Et pendant ce temps, voici le mail que reçoit lucien , l’expéditeur du mail rejeté:

MAILER-DAEMON@ yahoo.com        failure notice

qui contient:

Date:       17 Jan 2005 15:55:58 -0000
De:         MAILER-DAEMON@yahoo.com  Ajouter au carnet d'adressesAjouter au carnet d'adresses
À:          lucien@yahoo.fr
Objet:      failure notice

Hi. This is the qmail-send program at yahoo.com.
I'm afraid I wasn't able to deliver your message to the following 
addresses.
This is a permanent error; I've given up. Sorry it didn't work out.

<mon-bof@linuxorable.fr>:
88.xxx.xxx.xxx does not like recipient.
Remote host said: 550 <mon-bof@linuxorable.fr>58 Recipient address 
rejected58 User unknown in local recipient table
Giving up on 88.xxx.xxx.xxx.

--- Below this line is a copy of the message.
[...]

4°/ Le fichier /etc/postfix/ldap_local_recipient.cf

Ce fichier contient toutes les indications nécessaires à Postfix pour effectuer le contrôle de l’adresse du destinataire dans l’annuaire LDAP.

4.1°/ Principe de fonctionnement d’une requête LDAP

Postfix recherche dans l’annuaire LDAP la valeur de l’attribut "mail". Pour chaque entrée consultée dans l’annuaire, Postfix compare l’adresse de destination du mail qu’il vient de recevoir à la valeur de l’attribut "mail" de l’entrée consultée.

  • 1°/ si après avoir consulté toutes les entrées, aucune correspondance n’est trouvée, alors le mail est rejeté définitivement avec le code 550.
  • 2°/ si une correspondance est trouvée alors le mail est livré à l’agent de livraison locale qui se nomme local .
# Explications des 5 lignes ci-dessous:
# ***********************************

# Ces 5 lignes veulent dire:

# Sur le serveur LDAP dont l'adresse IP est 82.67.66.131 et qui écoute sur le port 389, effectuons une recherche
# à partir du contexte "ou=mail accounts,dc=linuxorable,dc=fr".
# Le filtre de recherche précise que Postfix recherche la valeur de l'attribut "mail" telle que précisée par 
# la commande "RCPT TO:" et c'est la valeur de l'attribut "mail" qui devra être retournée comme résultat de la recherche.

server_host = 82.67.66.131
server_port = 389
search_base = ou=mail accounts,dc=linuxorable,dc=fr
# le %s signifie "adresse du destinataire telle que fournie par la commande "RCPT TO:"
query_filter = (mail=%s)
result_attribute = mail

5°/ Les fichiers .ldif

Pour que les requêtes LDAP soient efficientes il est bien évidemment nécessaire de créer des entrées dans l’annuaire LDAP. Ces entrées devront contenir au minimum l’attribut mail .

Les entrées que je vous propose de créer sont en tous points identiques à celles présentées au paragrahe 5°/ de l’article Cyrus IMAP : authentification LDAP .

Je ne m’étendrai donc pas sur la création de tels fichiers (reportez vous à l’article sus-cité) et vous présente simplement un exemple de leur contenu:

# AJOUT D'UN UTILISATEUR DANS l'ANNUAIRE LDAP
dn: cn=mon-bof DURANT,ou=mail accounts,dc=linuxorable,dc=fr
cn: mon-bof DURANT
cn: mon-bof
sn: DURANT
mail: mon-bof@linuxorable.fr
userPassword: xxxxx
objectClass: inetOrgPerson

Bien. Une fois toutes vos entrées créées, il ne vous reste plus qu’à tester que tout fonctionne correctement en vous envoyant un mail à partir du webmail de votre FAI par exemple.

postmap -q mon-bof@linuxorable.net ldap:/etc/postfix/ldap_local_recipient.cf

Si tout fonctionne bien, alors la sortie de cette commande doit être:

mon-bof@linuxorable.fr
Voici à quoi ressemble les logs d'une requête qui abouti positivement:

postfix/smtpd[16923]: dict_ldap_lookup: In dict_ldap_lookup
postfix/smtpd[16923]: dict_ldap_lookup: Using existing connection for LDAP source /etc/postfix/ldap_local_recipient.cf
postfix/smtpd[16923]: dict_ldap_lookup: Searching with filter (mail=mon-bof@linuxorable.fr)
postfix/smtpd[16923]: dict_ldap_get_values[1]: Search found 1 match(es)
postfix/smtpd[16923]: dict_ldap_get_values[1]: search returned 1 value(s) for requested result attribute mail
postfix/smtpd[16923]: dict_ldap_get_values[1]: Leaving dict_ldap_get_values
postfix/smtpd[16923]: dict_ldap_lookup: Search returned mon-bof@linuxorable.fr
postfix/smtpd[16923]: maps_find: local_recipient_maps: ldap:/etc/postfix/ldap_local_recipient.cf(0,100):
    mon-bof@linuxorable.net = mon-bof@linuxorable.fr
postfix/smtpd[16923]: mail_addr_find: mon-bof@linuxorable.fr -> mon-bof@linuxorable.fr
postfix/smtpd[16923]: connect to subsystem public/cleanup

Conclusion

Cette serie d’articles consacrés à la mise en oeuvre d’un serveur Postfix prend fin. J’espère qu’à sa lecture vous aurez pris plaisir et appris quelque chose. A nouveau je vous engage vivement à me faire connaître toutes vos remarques en m’écrivant ici .

Lien vers l'article précédent
Postfix : le fichier smtpd.conf
Postfix : Analyse des logs
Lien vers l'article suivant

Commentaires