Filtrage de contenu avant mise en file d'attente avec Postfix


ATTENTION ATTENTION ATTENTION

Le filtrage de contenu avant mise en file d'attente décrit ici n'est utilisable que sur les sites à faible trafic. Reportez-vous au paragraphe "Pour et contre" de ce document pour plus de détails

La fonctionnalité de filtrage de contenu avant mise en file d'attente de Postfix

Depuis la version 2.1, le serveur SMTP de Postfix peur transférer tout le courrier entrant à un serveur mandataire de filtrage de contenu qui inspecte les messages AVANT leur mise en file d'attente.

Le filtrage de contenu avant mise en file d'attente est censé être utilisé comme suit :

Internet -> Serveur SMTP de Postfix -> Filtrage avant mise en file d'attente -> Serveur SMTP de Postfix -> Serveur cleanup de Postfix -> Postfix queue -< smtp
local
virtual

Le filtrage de contenu avant mise en file ne doit pas être confondu avec l'approche du filtrage décrite à la page FILTER_README où le courrier est filtré APRÈS la mise en file d'attente.

Ce document aborde les sujets suivants :

Principes de l'opération

Le serveur SMTP de Postfix avant-filtrage reçoit le courrier de l'Internet et effectue les contrôles d'accès et de relais habituels, l'authentification SASL, les consultations des listes noires, le rejet des expéditeurs et destinataires inexistants, etc. Le filtre avant mise en file d'attente reçoit le contenu d'un message non filtré et effectue l'une des opérations suivantes :

  1. Ré-injecte le message dans Postfix par SMTP, éventuellement après en avoir modifié le contenu et/ou la destination.

  2. Rejette le message en renvoyant un code de statut SMTP à Postfix. Ce dernier transmets ce statut au client distant. Ainsi, Postfix n'a pas à générer de message de renvoi.

Le serveur SMTP après-filtrage de Postfix reçoit les messages filtrés. A partir de là, Postfix procède comme d'habitude.

Le filtre avant mise en file d'attente décrit ici fonctionne comme le filtre après mise en file d'attente décrit à la page FILTER_README. Dans la plupart des cas, vous pourrez utiliser le même logiciel avec les limites discutées au paragraphe "Pour et contre" ci-dessous.

Pour et contre le filtrage de contenu avant mise en file d'attente

Configurer le dispositif proxy SMTP de Postfix

Dans l'exemple suivant, le serveur SMTP avant-fitrage de Postfix transmets les messages à un filtre de contenu en écoute sur le port 10025 de la machine locale. Le serveur SMTP après-filtrage reçoit les messages filtrés sur le port 10026. A partir de là, le traitement fonctionne comme d'habitude.

Le filtre de contenu lui-même n'est pas décrit ici. Vous pouvez utilisez tous les filtres compatibles SMTP. Pour ceux qui ne peuvent dialoguer avec le protocole SMTP, le proxy de Bennett Todd's implémente un bon framework de filtrage de contenu PERL/SMTP. Reportez-vous à la page http://bent.latency.net/smtpprox/.

Internet -> Serveur SMTP de Postfix sur le port 25 -> filtre sur le port 10025 -> Serveur SMTP de Postfix sur le port 10026 -> Serveur cleanup de Postfix -> file d'attente entrante de Postfix

Ceci est configuré en éditant le fichier master.cf :

/etc/postfix/master.cf:
    # =============================================================
    # service type  private unpriv  chroot  wakeup  maxproc command
    #               (yes)   (yes)   (yes)   (never) (100)
    # =============================================================
    #
    # Serveur SMTP avant-filtrage. Reçoit le courrier du réseau et
    # le passe au filtre de contenu sur le port 10025.
    #
    smtp      inet  n       -       n       -       20      smtpd
        -o smtpd_proxy_filter=127.0.0.1:10025
        -o smtpd_client_connection_count_limit=10
    #
    # Serveur SMTP après-filtrage. Reçoit le courrier du filtre de
    # contenu sur le port 10026.
    #
    :10026    inet  n       -       n       -        -      smtpd
        -o smtpd_authorized_xforward_hosts=127.0.0.0/8
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o smtpd_data_restrictions=
        -o mynetworks=127.0.0.0/8
        -o receive_override_options=no_unknown_recipient_checks

Note : n'utilisez pas d'espaces, autour des caractères "=" et ",".

L'entrée du serveur SMTP avant-filtrage est une version modifiée de celle du serveur SMTP par défaut, normalement configuré au début du fichier master.cf :

Le serveur SMTP après-filtrage est une nouvelle entrée du fichier master.cf :

Par défaut, le filtre dispose de 100 secondes pour faire son travail. En cas de dépassement, Postfix reporte une erreur au client SMTP distant. Vous pouvez augmenter cette limite (reportez-vous au paragraphe ci-dessous) mais vous risquez de dépasser la limite accordée par le client.

Paramètres de configuration

Paramètres qui contrôlent le mandatement :

Comment Postfix dialogue avec le filtre avant mise en file d'attente

Le serveur SMTP avant-filtrage de Postfix se connecte au filtre de contenu, délivre un message et se déconnecte. Lorsqu'il envoie le message au filtre, Postfix dialogue avec le protocole ESMTP mais n'utilise pas de commande pipeling. Postfix génère ses propres commandes EHLO, XFORWARD (pour loguer l'adresse IP du client et non localhost[127.0.0.1]), DATA et QUIT, et transfère des copies non modifiées de tous les commandes MAIL FROM et RCPT TO qu'il n'a pas rejeté lui-même. Postfix n'envoie pas d'autres commandes SMTP.

Le filtre de contenu doit accepter les mêmes syntaxes des commandes MAIL FROM et RCPT TO que le serveur SMTP de Postfix et doit transmettre ces mêmes commandes sans modifications au serveur SMTP aval situé après le filtre. Si le filtre de contenu ou le serveur SMTP aval ne supportent pas toutes les fonctionnalités ESMTP que le serveur SMTP Postfix amont, vous devez désactiver les fonctionnalités concernées avec le paramètre smtpd_discard_ehlo_keywords.

Lorsque le filtre rejette un contenu, il devrait renvoyer une réponse négative au serveur SMTP Postfix amont et couper la connexion avec le serveur SMTP aval sans terminer la conversation SMTP.

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