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 2821

Cela 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:60000

Les 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

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.