Configuration Postfix · 5 min read · Nov 12, 2025
Comment lutter contre le spam en utilisant votre configuration Postfix
Comment lutter contre le spam en utilisant votre configuration Postfix
Dans ce guide, vous apprendrez comment ajuster le guide de messagerie Falko par défaut pour Postfix (+Auth SMTP + Quota), https://www.howtoforge.com/virtual_postfix_mysql_quota_courier, afin de mieux lutter contre le SPAM et de permettre un peu de compatibilité avec les anciens systèmes Qmail.
Alors, commençons…
Le guide HowtoForge est excellent pour tout, cependant, si vous avez un serveur de messagerie très occupé exécutant Spam Assasin sur des milliers de messages par minute, cela tue le CPU. La meilleure réponse est d’arrêter le courrier avant qu’il n’atteigne Spam Assasin avec une gamme de RBL (Realtime Blacklists) et RHBL (pareil mais différent), Greylistings et Helo Checks.
Tout d’abord, nous voulons changer les restrictions smtpd existantes et ajouter une multitude de nouvelles vérifications pour aider à réduire la quantité de courrier que le système accepte dans /etc/postfix/main.cf
### Vérifications pour supprimer les e-mails mal formés
smtpd_helo_required = yes
strict_rfc821_envelopes = yes
disable_vrfy_command = yes
unknown_address_reject_code = 554
unknown_hostname_reject_code = 554
unknown_client_reject_code = 554
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, regexp:/etc/postfix/helo.regexp, permit
### Lors de la modification de sender_checks, ce fichier doit être régénéré en utilisant postmap , pour générer une base de données Berkeley
smtpd_recipient_restrictions =
check_client_access hash:/etc/postfix/helo_client_exceptions
check_sender_access hash:/etc/postfix/sender_checks,
reject_invalid_hostname,
### Peut causer des problèmes avec Auth SMTP, donc soyez prudent !
reject_non_fqdn_hostname,
##################################
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_mynetworks,
reject_unauth_destination,
# Ajoutez des exceptions RBL ici, lors de la modification de rbl_client_exceptions, ce
fichier doit être régénéré en utilisant postmap , pour générer une
base de données Berkeley
check_client_access hash:/etc/postfix/rbl_client_exceptions,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rhsbl_sender dsn.rfc-ignorant.org,
check_policy_service inet:127.0.0.1:60000
permit Maintenant, pour expliquer, mais d’abord, nous devons créer quelques fichiers :
Le premier fichier que nous voulons créer est /etc/postfix/helo.regexp et cela contiendra :
/^subdomain\.host\.com$/ 550 N'utilisez pas mon propre nom d'hôte
/^xxx\.yyy\.zzz\.xxx$/ 550 N'utilisez pas ma propre adresse IP
/^\[xxx\.yyy\.zzz\.xxx\]$/ 550 N'utilisez pas ma propre adresse IP
/^[0-9.]+$/ 550 Votre logiciel n'est pas conforme à la RFC 2821
/^[0-9]+(\.[0-9]+){3}$/ 550 Votre logiciel n'est pas conforme à la RFC 2821Cela seul fera fuir les spammeurs essayant d’envoyer la commande helo et se faisant passer pour le serveur recevant le courrier par IP ou par nom d’hôte, ainsi que de rejeter certains des courriers qui ne respectent pas la conformité à la RFC 2821.
Ensuite, nous devons créer /etc/postfix/helo_client_exceptions :
#Ces adresses IP de client sont autorisées à contourner les vérifications fqdn
# Un commentaire pour identifier l'adresse IP ci-dessous
www.xxx.yyy.zzz OK Ce fichier est nécessaire au cas où un serveur de messagerie mal comporté ne peut pas envoyer le bon helo et que vous devez autoriser le courrier à être accepté de cette source. Dans mon expérience, des choses comme des dispositifs autonomes, des caméras de vidéosurveillance sont peu conformes aux normes, donc vous pourriez avoir besoin de faire une exception pour cela.
Avant que des modifications dans ce fichier ne deviennent utilisables, vous devez exécuter
postmap /etc/postfix/helo_client_exceptions
Cela créera un fichier appelé /etc/postfix/helo_client_exceptions.db
En descendant, nous avons /etc/postfix/sender_checks qui vous permet de contourner les diverses vérifications FQDN et d’autoriser un expéditeur particulier. Cela est particulièrement utile si une entreprise gère un réseau de messagerie interne tel que domain.com mais que le courrier fonctionne sur int.domain.com et qu’il n’y a pas de DNS configuré pour int.domain.com, cela est excellent pour la sécurité mais pas génial car le DNS externe ne connaît pas la structure interne et donc postfix rejettera int.domain.com.
[email protected] REJECT
[email protected] OK Encore une fois, ce fichier une fois modifié doit avoir un fichier Berkely DB créé et donc nous le créons en utilisant :
postmap /etc/postfix/sender_checks
Ensuite, nous avons nos vérifications RBL. Il existe de nombreux sites Web dédiés aux RBL, mais pour réduire la longueur de l’article, disons simplement que ces listes sont mises à jour en permanence et fournissent des IP et des noms d’hôtes que les spammeurs utilisent pour relayer le courrier. Chaque IP qui essaie d’envoyer du courrier à votre serveur de messagerie sera vérifiée par rapport à ces listes (4 utilisées ci-dessus) et si l’IP n’est pas répertoriée dans les RBL, le serveur de messagerie acceptera le courrier. Bien sûr, les serveurs se retrouvent sur ces listes tout le temps involontairement ou les listes prennent 24 heures pour supprimer l’IP blacklistée après une épidémie de spam, donc il est toujours préférable d’avoir encore une fois un moyen de contourner ces vérifications.
Pour ce faire, nous créons un fichier appelé /etc/postfix/rbl_client_exceptions :
## Un commentaire aléatoire
www.xxx.yyy.zzz OK Encore une fois, vous devez exécuter postmap pour générer le fichier de base de données Berkeley
postmap /etc/postfix/rbl_client_exceptions
La dernière ligne des restrictions smtpd est le filtre de greylisting. Je ne vais pas entrer dans les détails à ce sujet car un guide existe déjà sur howtoforge, https://www.howtoforge.com/greylisting_postfix_postgrey mais si vous ne souhaitez pas utiliser le greylisting, omettez simplement la ligne
check_policy_service inet:127.0.0.1:60000Les restrictions smtpd sont très faciles à suivre, jusqu’à ce qu’une des vérifications donne le feu vert pour que le message passe dans la file d’attente Postfix, la plupart des réponses ne sachant pas passent à moins qu’un NON explicite ne soit donné, le message descendra la liste des vérifications.
HÉRITAGE QMAIL
DJB (Dan Bernstein) a développé une alternative à SMTP appelée QMQP. On dit qu’elle est plus rapide avec moins de frais généraux. Donc, si vous remplacez vos anciens MTA Qmail par Postfix, vous devrez peut-être activer le support pour QMQP.
Nous faisons cela en ajoutant ce qui suit dans /etc/postfix/main.cf
qmqpd_authorized_clients = $mynetworks
qmqpd_error_delay = 5s
qmqpd_timeout = 300s De manière réaliste, vous pouvez vous authentifier contre n’importe quoi, mais j’ai décidé de m’authentifier contre mes réseaux. Après avoir ajouté ce qui précède dans main.cf, vous devez modifier davantage /etc/postfix/master.cf et vous assurer qu’il contient ce qui suit :
628 inet n - - - 100 qmqpd Maintenant, tout ce que vous devez faire est de redémarrer Postfix
/etc/init.d/postfix restart
Vous pouvez vérifier votre nouveau Postfix conscient de QMQP en tapant :
telnet localhost 628
Authentification par IP (Idéal pour le relais Smarthost dans les serveurs MS Exchange)
Ensuite, nous allons modifier un peu le guide pour rendre le paramètre de mes réseaux un peu plus facile que par des fichiers plats, à savoir /etc/postfix/main.cf
Créez le fichier suivant /etc/postfix/mysql-mynetworks.cf
user = mail_admin
password = password
dbname = mail
table = allowed_hosts
select_field = 'IP'
where_field = IP
hosts = 127.0.0.1
additional_conditions = and active='yes' Vous aurez besoin du SQL suivant à ce stade
CREATE TABLE allowed_hosts (active enum(‘yes’,’no’) NOT NULL default ‘1’,IP varchar(15) NOT NULL default ‘’,Client varchar(128) NOT NULL default ‘’,Comments text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Enfin, activons cela en changeant notre ligne mynetworks dans le main.cf de Postfix en :
mynetworks = 127.0.0.0/8, proxy:mysql:/etc/postfix/mysql-mynetworks.cf Enfin, redémarrez Postfix pour que les modifications prennent effet :
chmod o= /etc/postfix/mysql-mynetworks.cf
chgrp postfix /etc/postfix/mysql-mynetworks.cf
/etc/init.d/postfix restart
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.