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.
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.
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 :
En envoyant un message via un relais moins restrictif.
En envoyant un message à quelqu'un d'autre qui a la permission d'envoyer ce message.
traduction par Xavier Guimard - Retour au menu