Contrôle d'accès par client, utilisateur, etc.


Classes de restriction de Postfix

Le serveur SMTP de Postfix supporte différents restrictions d'accès parmi les quels reject_rbl_client ou reject_unknown_client sur la partie droite des tables du serveur SMTP (access(5)). Ceci vous permet d'implémenter différentes restrictions contre les spams.

Devoir indiquer des listes de restriction d'accès pour chaque destinataire peut vite devenir fastidieux. Les classes de restrictions vous permettent de donner des noms faciles à retenir aux groupes de restrictions anti-spam (tel "permissif", "restrictif",...).

La réelle raison de l'existence des classes de restrictions Postfix est plus pratique : vous ne pouvez pas indiquer une autre table de correspondance dans la partie droite des tables d'accès. C'est parce que Postfix doit ouvrir les tables au démarrage, mais le lecteur n'est probablement pas intéressé par ces détails.

Exemple :

/etc/postfix/main.cf :
    smtpd_restriction_classes = restrictive, permissive
    restrictive = reject_unknown_sender_domain reject_unknown_client ...
    permissive = permit

    smtpd_recipient_restrictions = 
	permit_mynetworks
	reject_unauth_destination
	hash:/etc/postfix/recipient_access

/etc/postfix/recipient_access:
    joe@my.domain	permissive
    jane@my.domain	restrictive

Dans cet exemple, vous pouvez utiliser "restrictive" ou "permissive" sur la partie droite de vos table d'accès par client/helo/destinataire/expéditeur su serveur SMTPD.

La suite de ce document montre des exemples d'emploi des classes de restriction de Postfix :

Ces questions reviennent fréquemment et les exemples montrent clairement que ces classes de restriction ne sont pas réellement la bonne solution. Elles peuvent être utilisées pour ce pour quoi elles ont été conçues : différnets restriction anti-spam pour différents clients ou utilisateurs.

Proteger les listes de distribution internes

Nous voulons implémenter une liste de distribution interne  all@mon.domaine qui contient tous les employés. Ma première idée fut d'utiliser les alias, mais delà n'interdit pas aux extérieurs de l'utiliser.

Postfix peut implémenter un contrôle d'accès par adresse. Ce qui suit est basé sur l'adresse IP du client SMTP et donc est sujette à l'IP spoofing.

/etc/postfix/main.cf :
    smtpd_recipient_restrictions =
        hash:/etc/postfix/access
        ...comme d'habitude...

/etc/postfix/access:
    all@my.domain   permit_mynetworks,reject
    all@my.hostname permit_mynetworks,reject

Utilisez dbm au lieu de hash si votre système utilise des fichiers dbm au lieu de fichiers db. Pour connaître les types de tables supportées par Postfix, utilisez la commande postconf -m.

Ce peut être suffisant si votre machine reçoit le courrier d'Internet directement, mais pas si votre réseau dépasse le niveau d'une simple agence. Par exemple, vos MX de sauvegarde blanchiront l'adresse IP du client qui semblera venir d'un réseau sûr.

Dans le cas général, vous avez besoin de deux tables de correspondances : une table listant les destinations à protéger et une autre pour les domaines autorisés à envoyer du courrier aux destinations protégées.

Ce qui suit est basé sur l'adresse de l'expéditeur de l'enveloppe SMTP et donc sujette au spoofing de cette adresse.

/etc/postfix/main.cf :
    smtpd_recipient_restrictions =
        hash:/etc/postfix/protected_destinations
        ...contenu habituel...

    smtpd_restriction_classes = insiders_only
    insiders_only = check_sender_access hash:/etc/postfix/insiders, reject

/etc/postfix/protected_destinations:
    all@my.domain   insiders_only
    all@my.hostname insiders_only

/etc/postfix/insiders:
    mon.domain      OK  correspond à mon.domain et ses sous-domaines
    autre.domaine   OK  correspond à un autre.domaine et ses sous-domaines

Usurper ce schéma est relativement aisé car la seule chose à faire est de modifier l'adresse de l'expéditeur SMTP.

Si la liste interne est de petite taille, peut-être est il mieux de la modérer.

Restreindre les utilisateurs pouvant envoyer du courrier vers sites extérieurs

Comment puis-je configurer Postfix afin de restreindre la liste des utilisateurs pouvant envoyer du courrier vers les sites extérieurs ? Les utilisateurs n'ayant pas accès à Internet devant recevoir un message générique de rejet. Il ne s'agit pas ici de discuter de l'opportunité d'une telle décision, mais d'en étudier l'aspect technique.

Postfix dispose d'un support des restrictions par utilisateurs. Ces restrictions sont implémentées dans le serveur SMTP. Les utilisateurs violant cette politique verront leurs messages rejetés par le serveur SMTP comme suit :

554 <utilisateur@site.distant>: Access denied

Cette implémentation utilise deux tables de correspondances. L'une défini les utilisateurs qui sont restreints à l'envoi de messages locaux et l'autre les destinations considérées comme locales. Il s'agit d'un exercice que le lecteur pourra adapter s'il doit restreindre la majorité de ses utilisateurs en utilisant une table des utilisateurs autorisés.

Cet exemple utilise des fichiers DB/DBM, mais peut être adapté avec LDAP ou SQL.

/etc/postfix/main.cf :
    smtpd_recipient_restrictions =
        check_sender_access hash:/etc/postfix/restricted_senders
        ...suite...

    smtpd_restriction_classes = local_only
    local_only = 
        check_recipient_access hash:/etc/postfix/local_domains, reject

/etc/postfix/restricted_senders:
    foo@domain      local_only
    bar@domain      local_only

/etc/postfix/local_domains:
    this.domain     OK      correspond à this.domain et ses sous-domaines
    that.domain     OK      correspond à that.domain et ses sous-domaines

Indiquez dbm aulieu de hash si votre système utilise des fichiers dbm au lieu de fichiers db. Pour connaître les types de bases supportées par Postfix, utilisez la commande postconf -m.

Note : ce schéma n'authentifie pas les utilisateurs et peut être contourné par plusieurs voies :

Valid HTML 4.01! traduction par Xavier Guimard - Retour au menu