Configuration Postfix · 14 min read · Nov 14, 2025
Filtre anti-spam Postfix utilisant Ubuntu Dapper, MailScanner, SpamAssassin, Razor, Pyzor, DCC et ClamAV - Page 2
2 Configuration de Postfix
Nous avons besoin de quelques fichiers d’exemple du code source de Postfix, notez que le code source que nous récupérons ici est le code source original, avant qu’il ne soit modifié par les mainteneurs de paquets Ubuntu/Debian :
cd /usr/local/src
wget http://us.archive.ubuntu.com/ubuntu/pool/main/p/postfix/postfix_2.3.3.orig.tar.gz
tar xzvf postfix_2.3.3.orig.tar.gzArrêtez Postfix :
postfix stopASSUREZ-VOUS de répondre “n” à “écraser ?” Faites chaque section séparément :
cp -i /usr/share/postfix/main.cf.debian /etc/postfix/main.cf
cp -i /usr/local/src/postfix-2.3.3/conf/* /etc/postfix
cp -i /etc/postfix/header_checks /etc/postfix/body_checks
cp -i /etc/postfix/access /etc/postfix/sender_access2.1 Éditer master.cf
Au fait, faites attention aux deux fichiers de configuration Postfix, tous deux situés dans le dossier /etc/postfix. Plus d’un administrateur s’est déjà mélangé entre master.cf et main.cf !
D’abord, sauvegardez le master.cf actuel :
cp /etc/postfix/master.cf /etc/postfix/master.cf-origÉditez master.cf :
vi /etc/postfix/master.cfNous devons ajouter deux éléments sous le type de service pickup. Le service pickup “ramasse” le courrier local (local signifiant “sur cette machine”) et le livre. Plus tard, nous créerons un rapport quotidien/hebdomadaire que cette boîte nous enverra par mail et parce que le rapport contiendra des contenus qui classeront le rapport lui-même comme spam, c’est un moyen de contourner le filtrage de contenu pour le courrier généré par cette machine.
Ajoutez ceci juste en dessous du type de service ‘pickup’ :
-o content_filter=
-o receive_override_options=no_header_body_checksCela devrait ressembler à ceci lorsque vous avez terminé :
pickup fifo n - - 60 1 pickup
-o content_filter=
-o receive_override_options=no_header_body_checks2.2 Éditer main.cf
Ceci est le fichier de configuration principal pour Postfix. Pour plus d’informations, veuillez lire les commentaires dans le fichier main.cf, la documentation dans /usr/local/src/postfix-2.3.3/README_FILES, ou le site Web de Postfix http://www.postfix.org/documentation.html.
D’abord, nous devons sauvegarder le fichier main.cf.
cp /etc/postfix/main.cf /etc/postfix/main.cf-origPuisque nous configurons notre filtre anti-spam pour relayer tout son courrier vers un autre serveur, nous allons utiliser ce que Postfix considère comme une “classe d’adresse de domaine de relais” qui signifie essentiellement que nous allons utiliser, parmi les 300+ paramètres configurables dans Postfix, un petit groupe de paramètres qui sert le mieux notre objectif. Cette classe d’adresse est décrite ici : http://www.postfix.org/ADDRESS_CLASS_README.html#relay_domain_class. Nous agissons également en tant que MX principal pour un autre serveur, donc veuillez lire cette section appropriée : http://www.postfix.org/STANDARD_CONFIGURATION_README.html#backup.
Il est courant dans Postfix de stocker des éléments dans des tables de recherche. Nous allons utiliser plusieurs tables de hachage pour stocker des données que Postfix utilisera. Une fois que nous avons des données en texte brut dans ces tables, nous utilisons la commande postmap pour créer des fichiers binaires (format Berkeley DB) que Postfix utilisera finalement pour récupérer les données. Par exemple, si vous avez un fichier appelé “sampletext” et que vous postmap sampletext, un nouveau fichier est créé “sampletext.db”. Postfix récupérera des données à partir de “sampletext.db”, pas “sampletext”. Il existe plus d’une douzaine d’autres types de fichiers de données que Postfix peut utiliser pour stocker des données. Les tables de hachage sont un choix approprié pour plusieurs tables que nous allons utiliser, et pcre (Expressions Régulières Compatibles Perl) est approprié pour quelques tables que nous allons utiliser pour contenir des données de filtrage de contenu. Dans sa forme la plus simple, une table de hachage est composée de 2 pièces de données, une clé et une valeur ; généralement appelées la paire clé/valeur. La clé et la valeur sont séparées par des espaces (généralement un espace ou une tabulation). Les données dans une table typique que nous utilisons dans Postfix ressembleraient à ceci :
[email protected] OK
[email protected] OK
[email protected] OKLecture suggérée : http://www.postfix.org/DATABASE_README.html.
Nous allons utiliser postconf pour éditer main.cf au lieu de taper les paramètres dans le fichier avec vi. Les “” sont nécessaires comme cela apparaît dans les boîtes de commande.
2.2.1 alias_maps
Nous devons simplement apporter une correction au paramètre par défaut ici :
postconf -e "alias_maps = hash:/etc/aliases"Créez le fichier d’alias :
newaliasesVous verrez qu’il y a maintenant un fichier aliases.db dans le répertoire /etc/. C’est ce que Postfix lit généralement. Maintenant que vous avez un fichier d’alias approprié et parce que nous allons configurer notre système pour relayer tout le courrier (aucun courrier ne sera livré localement), le fichier d’alias sera ignoré par Postfix. Au lieu de cela, nous allons configurer virtual_alias_maps pour le redirection d’adresse. D’autres programmes peuvent ne pas fonctionner correctement si le fichier /etc/aliases est manquant, donc ne le supprimez pas.
2.2.2 myorigin
Le nom de domaine d’où le courrier créé sur cette machine semble provenir. Par exemple, si cron envoie un mail à “[email protected]”, il apparaîtra comme venant de “[email protected]”.
postconf -e "myorigin = example.com"Évidemment, dans ce qui précède, et toutes les commandes suivantes, remplacez mes paramètres d’exemple, comme “example.com”, par vos propres valeurs spécifiques.
2.2.3 myhostname
Le nom de domaine complètement qualifié (FQDN) de la machine exécutant le système Postfix.
postconf -e "myhostname = sfa.example.com"2.2.4 mynetworks
Ce sont les machines auxquelles je fais confiance, et qui relayeront le courrier vers n’importe quelle destination. En général, cela est défini sur mon LAN, ou juste un, ou quelques serveurs de messagerie internes de confiance. Avec relay_domains, c’est un point important à bien configurer sinon vous risquez de devenir un “relais ouvert”. En d’autres termes, votre boîte pourrait accepter et transférer du courrier vers des domaines pour lesquels elle n’a pas à le faire. Être un relais ouvert est un problème sérieux, et peut vous faire mettre sur liste noire par divers listes anti-spam sur Internet, parmi d’autres problèmes. Vous pouvez spécifier un seul ordinateur, plusieurs ordinateurs individuels, ou n’importe quel ordinateur sur un réseau spécifié. Vous pouvez également exclure certains hôtes de votre réseau en précédant l’adresse IP d’un point d’exclamation. Si vous devez traiter plusieurs serveurs de messagerie internes, et/ou souhaitez autoriser plusieurs machines et/ou sous-réseaux à relayer via ce serveur (attention !), ajoutez-les simplement à ce paramètre au format CIDR et séparez les réseaux comme ceci :
postconf -e "mynetworks = 127.0.0.0/8, 222.222.222.222/24, 10.10.10.10/24"Ce qui précède permettra aux machines sur les réseaux 222.222.222.222/24, et 10.10.10.10/24 de relayer le courrier smtp via cette boîte. Le 127.0.0.0/8 est là pour permettre au serveur local d’envoyer, vous devez au moins mettre celui-ci. Vous pourriez également spécifier l’adresse IP d’un seul ordinateur. Si vous ne connaissez que votre masque de sous-réseau décimal pointé (c’est-à-dire 255.255.255.240) et devez le convertir en format CIDR, essayez le http://www.wildpackets.com/products/free_utilities/ipsubnetcalc/overview. (Entrez une adresse IP sur votre réseau, sélectionnez l’onglet des informations de sous-réseau, sélectionnez votre masque de sous-réseau, votre réseau est Subnet ID/Mask Bits.) Ou simplement jetez un œil à http://www.belchfire.net/webtools/cidr_conversion_table.html.
Si vous n’avez pas de réseaux ou d’ordinateurs qui relayeront via ce serveur, exécutez cette commande uniquement avec l’adresse 127.0.0.0/8.
2.2.5 message_size_limit
Taille maximale des e-mails que Postfix laissera entrer par la “porte d’entrée”.
postconf -e "message_size_limit = 10485760"Ce qui précède permet des e-mails jusqu’à 10 Mo, la valeur est en octets (1010241024). Les mails plus volumineux que cela peuvent éventuellement être contournés par le scanner antivirus (ClamAV). Vous pourriez augmenter cela si vous configurez également ClamAV pour scanner des fichiers de plus de 10 Mo. Si vous autorisez des messages de plus de 10 Mo, gardez un œil sur la RAM.
2.2.6 local_transport
Retournez un message d’erreur pour les tentatives de livraison locale.
postconf -e "local_transport = error:No local mail delivery"2.2.7 mydestination
Un mydestination vide indique à Postfix que cette machine n’est pas la destination finale.
postconf -e "mydestination = "2.2.8 local_recipient_maps
Un local_recipient_maps vide indique à Postfix qu’il n’y a pas de boîtes aux lettres locales.
postconf -e "local_recipient_maps = "2.2.9 virtual_alias_maps
Notre filtre anti-spam doit être capable de recevoir du courrier pour postmaster@yourIP. Apparemment, certaines choses s’attendent réellement à ce que cette capacité existe. Nous allons également autoriser le courrier à abuse@yourIP. Puisque nous n’autorisons pas la livraison de courrier local, le courrier adressé à l’adresse IP de notre filtre anti-spam sera rejeté avec un message d’erreur. La configuration de virtual_alias_maps permet aux e-mails adressés à ces deux comptes d’être transférés à une adresse interne. Assurez-vous que votre serveur Exchange est configuré pour recevoir des messages adressés à “root”, “postmaster” et “abuse”.
Configurez une référence au fichier virtuel :
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"Puis éditez le fichier virtuel :
vi /etc/postfix/virtualAjoutez ces deux lignes en haut du fichier virtuel :
postmaster [email protected]
abuse [email protected]Enregistrez et quittez le fichier, puis créez le fichier binaire que Postfix utilisera :
postmap /etc/postfix/virtual2.2.10 relayhost
/etc/postfix/relayhost indique à notre filtre anti-spam comment le courrier sortant doit être envoyé. relayhost contiendra l’IP ou le FQDN du serveur de messagerie que vous souhaitez utiliser pour envoyer des e-mails sortants. En d’autres termes, du courrier non local, du courrier destiné à des domaines autres que le nôtre. Ne pas confondre avec le fichier /etc/postfix/transport, le transport est utilisé pour acheminer le courrier entrant destiné à l’un de nos domaines locaux. Nous allons aborder le transport dans un instant.
Si relayhost est vide, ou non configuré, alors notre filtre anti-spam sera utilisé à cette fin.
Note : Les crochets [] sont requis dans cette commande.postconf -e "relayhost = [mymailserver.example.com]"En option, vous pouvez configurer votre filtre anti-spam comme votre serveur SMTP sortant, mais vous devez d’abord avoir votre enregistrement DNS inverse en place et bien sûr votre enregistrement “A” et votre enregistrement “MX” afin que d’autres serveurs sur Internet acceptent votre courrier. Lorsque vous reconfigurez vos clients et autres serveurs SMTP pour utiliser notre filtre anti-spam pour leur courrier sortant, ce courrier passera par le même processus de scan que votre courrier entrant (à moins que vous ne trouviez des ajustements astucieux pour l’empêcher). Si ceux-ci ne sont pas encore en place, il est très utile de configurer temporairement relayhost avec votre serveur de messagerie sortant actuel et fonctionnel.
De plus, assurez-vous que le relayhost que vous désignez est configuré pour accepter des e-mails de cette machine et QUE cette machine n’utilise PAS CETTE machine pour SON courrier sortant (pouvez-vous dire “boucle” ?).
2.2.11 relay_recipient_maps
Nous allons construire une table de chaque utilisateur dans chaque domaine pour lequel nous acceptons du courrier. Cette table sera utilisée pour rejeter le courrier adressé à des utilisateurs inexistants dans nos domaines. NE PANIQUEZ PAS ENCORE… Pour l’instant, nous allons seulement configurer la structure de la table. Si vous utilisez Exchange, il existe des HOWTO disponibles qui décrivent l’automatisation du processus de construction de la table relay_recipients. Il est très courant ces derniers temps que les spammeurs lancent des attaques par dictionnaire ; envoyant des milliers de messages à un domaine en utilisant des noms d’utilisateur fabriqués. Notre filtre anti-spam devrait traiter chacun de ces messages à moins que vous ne mettiez des utilisateurs valides dans la table relay_recipients. Ne sous-estimez pas l’importance de cela et assurez-vous que vous n’êtes pas le seul dans votre organisation à savoir comment apporter des modifications à ce fichier. Nous reviendrons à l’automatisation de cela après que votre filtre anti-spam soit fonctionnel. Si vous avez un nombre gérable d’utilisateurs, entrez-les manuellement.
Configurez une référence à un fichier que nous allons créer pour stocker les données :
postconf -e "relay_recipient_maps = hash:/etc/postfix/relay_recipients"Puis éditez relay_recipients :
vi /etc/postfix/relay_recipientsPour le moment, nous allons accepter le courrier pour tous les utilisateurs dans nos domaines, donc entrez chaque domaine pour lequel vous acceptez du courrier dans le format suivant :
@example.com OK
@example2.com OK
@example3.com OKPuis créez le fichier binaire que Postfix utilisera :
postmap /etc/postfix/relay_recipientsLes entrées ci-dessus sont temporaires. Ce sont des jokers qui permettent le courrier vers vos domaines. Vous DEVEZ supprimer les entrées ci-dessus à un moment donné dans un avenir proche et les remplacer par chacune des adresses e-mail valides de vos destinataires. Lorsque vous êtes prêt à entrer chaque utilisateur individuellement dans le fichier relay_recipients, vous devez d’abord supprimer (ou commenter) les données ci-dessus qui permettent le courrier à tous les utilisateurs du domaine, puis lister chaque utilisateur individuellement sous la forme :
[email protected] OK
[email protected] OK
[email protected] OKEn fait, dans ce fichier particulier, la valeur “OK” listée après chaque utilisateur n’est utilisée pour rien, mais quelque chose doit être là car une table de hachage nécessite une valeur après la clé. Notez qu’en éliminant [email protected] de ce fichier, vous pouvez empêcher les utilisateurs d’Internet d’envoyer du courrier à [email protected], mais ne faites pas cela si certains de vos propres serveurs ont besoin d’utiliser cette machine pour envoyer du courrier à root. Si vous utilisez Exchange, voici les HOWTO. Même si vous n’utilisez pas Exchange, j’ai trouvé les informations concernant les transferts de fichiers utiles. http://www2.origogeneris.com:4000/relay_recipients.html - http://www-personal.umich.edu/~malth/gaptuning/postfix/ - http://www.unixwiz.net/techtips/postfix-exchange-users.html - http://postfix.state-of-mind.de/patrick.koetter/mailrelay/ - http://doc.nettools.ru/Unix/Postfix&intserver/
2.2.12 transport_maps
Indique à Postfix où chercher un fichier de transport. Nous utilisons le fichier de transport pour indiquer à Postfix où transférer le courrier valide pour nos domaines. La configuration du transport est similaire à celle de relay_recipients.
Créez une référence à celui-ci dans main.cf :
postconf -e "transport_maps = hash:/etc/postfix/transport"Puis éditez transport :
vi /etc/postfix/transportAjoutez 1 nouvelle ligne pour chaque domaine pour lequel vous allez gérer le courrier, similaire à l’exemple ci-dessous. L’adresse IP est celle de quel que soit le serveur qui est la destination finale des messages adressés à nos domaines (notre serveur Exchange). Peu importe où vous placez ces éléments dans le fichier, mais j’aime les mettre en haut.
example1.com smtp:[10.10.10.100]
example2.com smtp:[10.10.10.101]
example3.com smtp:[10.10.10.102]INCLURE les crochets sur ces lignes !). Vous pouvez également utiliser le nom d’hôte FQDN au lieu d’une adresse IP (c’est-à-dire smtp:[exchange1.example.com]).
Maintenant, pour créer le fichier binaire que Postfix utilisera :
postmap /etc/postfix/transport2.2.13 relay_domains
Quels domaines de destination (et sous-domaines de ceux-ci) ce système relayera le courrier. Vous voulez lister ici UNIQUEMENT les domaines pour lesquels vous êtes responsable d’accepter du courrier. En plus de permettre au courrier d’être relayé vers ces domaines, ce paramètre implique également que nous ne relayons pas de courrier vers des domaines non listés ici et donc c’est un composant critique pour empêcher le filtre anti-spam de devenir un relais ouvert.
postconf -e "relay_domains = hash:/etc/postfix/relay_domains"Éditez relay_domains :
vi /etc/postfix/relay_domainsAjoutez 1 nouvelle ligne pour chaque domaine pour lequel vous allez gérer le courrier, similaire à l’exemple ci-dessous :
example1.com OK
example2.com OK
example3.com OKCe fichier a actuellement un format très similaire à relay_recipients, ne confondez pas les deux. Ce fichier ne peut pas avoir ‘@’ devant le nom de domaine. Je pensais juste le mentionner, certaines personnes très intelligentes ont été connues pour avoir fait cela…
Puis créez le fichier binaire que Postfix utilisera :
postmap /etc/postfix/relay_domainsNOTE : relay_recipients, relay_domains, et transport sont des fichiers avec lesquels vous allez devenir très intime. Chaque fois que vous devez ajouter des utilisateurs à un domaine, ajouter un domaine ou supprimer un domaine de votre liste, vous devez aller dans ces trois fichiers et les éditer. Après l'édition, exécutez un postmap sur chacun d'eux et redémarrez Postfix avec 'postfix reload'. Dans la dernière page, il y a une partie 'Maintenance' qui contient un README qui peut être copié dans votre filtre anti-spam comme référence rapide pour certaines tâches courantes.2.2.14 recipient_delimiter
Si votre serveur SMTP/POP3/IMAP actuel est configuré pour utiliser des extensions d’adresse (par exemple [email protected]), alors recipient_delimiter doit être défini pour correspondre au délimiteur que vous utilisez actuellement pour séparer le nom d’utilisateur de l’extension d’adresse. Cela n’a rien à voir avec la virgule que vous utilisez pour séparer plusieurs personnes à qui vous envoyez des e-mails ( [email protected], [email protected], [email protected]) en utilisant votre client de messagerie (MUA). Vous pourriez être familier avec cela si vous utilisez GMail. Si vous avez un compte GMail, vous pouvez lui envoyer des e-mails dans ce format, par exemple [email protected] et configurer un filtre dans GMail pour taguer tout avec le ‘testtag’ dans l’adresse à et ignorer la boîte de réception. Récemment, une utilisation courante de cette fonctionnalité est d’utiliser ces tags lorsque vous vous abonnez à un service Web et ensuite filtrer selon le tag. Quoi qu’il en soit, si vous l’avez, vous saurez que vous l’avez, si vous n’avez aucune idée de ce dont je parle, suivez les instructions “Je n’utilise pas de délimiteurs de destinataire”.
3 Paramètres typiques - Choisissez-en un.
- Je n’utilise pas de délimiteurs de destinataire :
postconf -e "recipient_delimiter = "- J’utilise actuellement le signe plus :
postconf -e "recipient_delimiter = +"- J’utilise actuellement le signe moins :
postconf -e "recipient_delimiter = -"2.2.15 Paramètres NAT/Proxy (Optionnel)
Si (et seulement si) l’adresse IP que vous présentez au monde n’est pas l’adresse IP de votre filtre anti-spam (vous êtes configuré pour fonctionner derrière un pare-feu NAT ou un serveur proxy), allez-y et ajoutez les deux lignes suivantes à main.cf, puis décommentez et configurez proxy_interfaces (60.50.40.30 représente l’adresse IP publique) :
# Spécifiez votre adresse EXTERNE NAT/proxy ici.
#proxy_interfaces = 60.50.40.30Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.