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
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 :
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 :
Ré-injecte le message dans Postfix par SMTP, éventuellement après en avoir modifié le contenu et/ou la destination.
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 : Postfix peut rejeter le courrier avant son transfert en file d'attente, ainsi Postfix n'a pas à renvoyer les messages à l'expéditeur (qui est généralement forgé). Les messages non acceptés restent à la charge du client SMTP distant.
Contre : le client SMTP distant attend une réponse SMTP dans un temps donné. A mesure que la charge de votre système augmente, de moins en moins de cycles de CPU sont disponibles pour répondre avant la limite et vous devrez soit arrêter de recevoir le courrier soit cesser de le filtrer. C'est pour cette raison que ce filtrage ne doit être utilisé que sur des sites à trafic modéré.
Contre : le logiciel de filtrage de contenu peut utiliser beaucoup de mémoire. Pour éviter un dépassement de mémoire vous devez réduire le nombre de processus SMTP avant-filtrage, ce qui évitera de planter votre système. Ceci suppose que vos clients SMTP devront attendre parfois assez longtemps la remise des messages.
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 nombre de sessions SMTP est réduit de la valeur 100 (par défaut) à 20 seulement pour éviter le plantage du système.
L'option "-o smtpd_client_connection_count_limit=10" évite à un client SMTP d'utiliser les 20 processus du serveur SMTP. Cette limite n'est pas nécessaire si vous recevez tout le courrier d'un relais approuvé.
Note : ce paramètre est ignoré sur la version stable 2.1 de Postfix. Cette fonctionnalité ne sera disponible que sur les versions expérimentales jusqu'à la sortie de la version 2.2.
L'option "-o smtpd_proxy_filter=127.0.0.1:10025" indique au serveur SMTP avant-filtrage qu'il doit transférer le courrier entrant au filtre de contenu écoutant sur le port 10025.
Postfix 2.3 support à la fois les filtres TCP et du domaine UNIX. Le filtre exemple ci-dessus pourrait être indiqué ainsi : "inet:127.0.0.1:10025". Pour indiquer un filtre dans le domaine UNIX, indiquez "unix:chemin". Un chemin relatif est interprété à partir du répertoire des files d'attentes de Postfix.
Le serveur SMTP après-filtrage est une nouvelle entrée du fichier master.cf :
":10026" le met en écoute sur la boucle locale uniquement sans s'exposer au réseau. Ne mettez jamais le serveur après-filtrage en écoute sur Internet :-)
L'option "-o smtpd_authorized_xforward_hosts=127.0.0.0/8" permet au serveur SMTP après-filtrage de recevoir les informations du client SMTP distant du serveur SMTP avant-filtrage, ainsi les démons de Postfix travaillant après le filtrage peuvent enregistrer les propriétés du client et non localhost[127.0.0.1].
Les autres paramètres du serveur SMTP après-filtrage évitent la duplication du travail qui a été déjà effectué par le serveur SMTP avant-filtrage.
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 qui contrôlent le mandatement :
smtpd_proxy_filter (syntaxe : hôte:port) : la machine et le port TCP du filtre de contenu avant mise en file d'attente. Si aucun hôte ou hôte: n'est spécifié la valeur retenue est la machine locale.
smtpd_proxy_timeout (défaut: 100s): temps limite pour se connecter au filtre de contenu avant mise en file d'attente et pour envoyer et recevoir les commandes et les données. Toutes les erreurs du proxy sont loguées. Pour des raisons de confidentialité, tout ce que voit le client SMTP distant est "451 Error: queue file write error". Il ne serait pas bon de divulguer plus de détails aux étrangers.
smtpd_proxy_ehlo (défaut: $myhostname) : le nom de machine à utiliser lors de l'envoi de la commande EHLO au filtre de contenu.
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.
traduction par Xavier Guimard - Retour au menu