Courriel considéré comme spam

certains des mails que j’envoie à partir de mon serveur sont considérés comme spam.

Fait étrange, la dernière fois que j’ai écrit sur une adresse gmail : aucun souci. Aujourd’hui, un autre mail a été classé en spam.

Voici les configs de postfix et dovecot :

[code]## Dovecot configuration file
listen =*

If you’re in a hurry, see

“doveconf -n” command gives a clean output of the changed settings. Use it

instead of copy&pasting files when posting to the Dovecot mailing list.

‘#’ character and everything after it is treated as comments. Extra spaces

and tabs are ignored. If you want to use either of these explicitly, put the

value inside quotes, eg.: key = "# char and trailing whitespace "

Default values are shown for each setting, it’s not required to uncomment

those. These are exceptions to this though: No sections (e.g. namespace {})

or plugin settings are added by default, they’re listed only as examples.

Paths are also just examples with the real defaults being based on configure

options. The paths listed here are for configure --prefix=/usr

–sysconfdir=/etc --localstatedir=/var

Enable installed protocols

!include_try /usr/share/dovecot/protocols.d/*.protocol

A comma separated list of IPs or hosts where to listen in for connections.

“*” listens in all IPv4 interfaces, “::” listens in all IPv6 interfaces.

If you want to specify non-default ports or anything more complex,

edit conf.d/master.conf.

#listen = *, ::

Base directory where to store runtime data.

#base_dir = /var/run/dovecot/

Name of this instance. In multi-instance setup doveadm and other commands

can use -i <instance_name> to select which instance is used (an alternative

to -c <config_path>). The instance name is also added to Dovecot processes

in ps output.

#instance_name = dovecot

Greeting message for clients.

#login_greeting = Dovecot ready.

Space separated list of trusted network ranges. Connections from these

IPs are allowed to override their IP addresses and ports (for logging and

for authentication checks). disable_plaintext_auth is also ignored for

these networks. Typically you’d specify your IMAP proxy servers here.

#login_trusted_networks =

Sepace separated list of login access check sockets (e.g. tcpwrap)

#login_access_sockets =

With proxy_maybe=yes if proxy destination matches any of these IPs, don’t do

proxying. This isn’t necessary normally, but may be useful if the destination

IP is e.g. a load balancer’s IP.

#auth_proxy_self =

Show more verbose process titles (in ps). Currently shows user name and

IP address. Useful for seeing who are actually using the IMAP processes

(eg. shared mailboxes or if same uid is used for multiple accounts).

#verbose_proctitle = no

Should all processes be killed when Dovecot master process shuts down.

Setting this to “no” means that Dovecot can be upgraded without

forcing existing client connections to close (although that could also be

a problem if the upgrade is e.g. because of a security fix).

#shutdown_clients = yes

If non-zero, run mail commands via this many connections to doveadm server,

instead of running them directly in the same process.

#doveadm_worker_count = 0

UNIX socket or host:port used for connecting to doveadm server

#doveadm_socket_path = doveadm-server

Space separated list of environment variables that are preserved on Dovecot

startup and passed down to all of its child processes. You can also give

key=value pairs to always set specific settings.

#import_environment = TZ

Dictionary server settings

Dictionary can be used to store key=value lists. This is used by several

plugins. The dictionary can be accessed either directly or though a

dictionary server. The following dict block maps dictionary names to URIs

when the server is used. These can then be referenced using URIs in format


dict {
#quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
#expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext

Most of the actual configuration gets included below. The filenames are

first sorted by their ASCII value and parsed in that order. The 00-prefixes

in filenames are intended to make it easier to understand the ordering.

!include conf.d/*.conf

A config file can also tried to be included without giving an error if

it’s not found:

!include_try local.conf

mail_location = maildir:~/Maildir

protocols = imap

disable_plaintext_auth = yes
ssl = yes

service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
# Assuming the default Postfix user and group
user = postfix
group = postfix

[code]# See /usr/share/postfix/ for a commented, more complete version

Debian specific: Specifying a file name will cause the first

line of that file to be used as the name. The Debian default

is /etc/mailname.

#myorigin = /det/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

appending .domain is the MUA’s job.

append_dot_mydomain = no

Uncomment the next line to generate “delayed mail” warnings

#delay_warning_time = 4h

readme_directory = no

TLS parameters

smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for

information on enabling SSL in the smtp client.

myhostname =
mydomain =
myorigin = /etc/mailname
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost, localhost.$myhostname
relayhost =
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
#inet_protocols = all
inet_protocols = ipv4

smtpd_sasl_auth_enable = yes

Utiliser le service d’identification de Dovecot

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

Noter dans les en-tête des messages l’identifiant de l’utilisateur.

smtpd_sasl_authenticated_header = yes

smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_sasl_security_options = noanonymous

home_mailbox = Maildir/


Règles pour accepter ou refuser une connexion :

- on attend une seconde (pour piéger les zombies) ;

- on interdit la parallélisation là où il n’est pas sensé y en avoir.

smtpd_client_restrictions =
permit_mynetworks, permit_sasl_authenticated,
sleep 1, reject_unauth_pipelining

Règles pour accepter ou refuser un message, dès lors qu’on connaît l’adresse

de l’expéditeur :

- s’il vient d’un expéditeur inexistant de notre domaine, on le rejette ;

- si le domaine de l’expéditeur n’a pas d’IP ou de MX, on le refuse ;

- s’il vient d’un client sûr ou d’un client authentifié, on l’accepte ;

- si l’adresse de l’expéditeur n’est pas sous forme canonique, on le refuse.

smtpd_sender_restrictions =
reject_unlisted_sender, reject_unknown_sender_domain,
permit_mynetworks, permit_sasl_authenticated,

Règles pour accepter ou refuser un message, dès lors qu’on connaît le

destinataire (par la commande RCPT TO) :

- s’il est destiné à un expéditeur forgé chez nous, on le rejette ;

- s’il est destiné à un domaine forgé, on le rejette ;

- s’il vient d’un hôte sûr ou d’un client authentifié, on l’accepte ;

- si l’adresse de destination n’est pas sous forme canonique, on le refuse ;

- finalement, s’il n’est pas destiné à un domaine que l’on gère ou pour

lequel on relaie, on le refuse.

smtpd_recipient_restrictions =
reject_unlisted_recipient, reject_unknown_recipient_domain,
permit_mynetworks, permit_sasl_authenticated,

smtpd_client_restrictions = reject_rbl_client
mynetworks =

J’applique trois trucs qui me permettent de ne pas être classé comme indésirable pas gmail, yahoo, live et consort:

  • Avoir un reverse DNS cohérent
  • Ajouter une entrée SPF à ton DNS
  • Utiliser DKIM pour signer ses mails

Il peut être utile aussi de vérifier si ton serveur de mail n’est pas sur une blacklist

J’applique trois trucs qui me permettent de ne pas être classé comme indésirable pas gmail, yahoo, live et consort:[/quote]

Je rajouterai à ces belle bande de … dans le consort, SPAMHAUS, Spam Cannibal et les grands vainqueurs du racket UCE protect :imp:

J’applique un truc qui me permet de ne pas être classé comme indésirable pas gmail :
Je ne me sers pas de mon adresse Gmail.

Ca n’a rien à voir, le problème c’est surtout de faire en sorte que tes correspondants reçoivent bien tes mails, qu’ils ne soient pas considérés comme du spam.

Merci pour ces premières pistes!


  • Avoir un reverse DNS cohérent
  • Ajouter une entrée SPF à ton DNS
  • Utiliser DKIM pour signer ses mails[/quote]
    J’ai lu tout ça dans mes recherches. Mais à vrai dire je ne comprend pas ce que c’est…
    -reverse DNS cohérent : comment le vérifier?
  • Ajouter une entrée SPF au DNS : ça se fait dans la gestion des DNS? (je suis chez OVH). Un peu comme lorsqu’on ajoute un CNAME?
  • DKIM. C’est un logiciel? Je signe mes mails avec gpg.

Oui Ricardo, je n’utilise plus gmail, mais certains de mes corespondants si…

Pour SPF[]=spf

Pour DKIM : voir amavisd-new avec DKIM (sur le wiki Debian-fr)

ou avec opendkim[]=dkim

SPF, si tu es chez OVH, c’est très simple, il y a une entrée SPF dans les DNS.
Ça donne un truc comme ça:

Du coup, dans les entêtes des mails il y vérification de l’IP qui envoi:

Pour DKIM, j’ai fais un tuto ici: … ew_et_DKIM

Et la vérification gmail doit donner ça:

Authentication-Results:; spf=pass ( domain of designates as permitted sender); dkim=pass

Enfin le reverse…

[code]dig -x


;; ANSWER SECTION: 86399 IN PTR mail.yyyyyyyy.tld.

Tu dois obtenir le nom du serveur avec son IP.

Merci beaucoup!
Alors pour le SPF, il s’avère que comme l’a dit lol, OVH propose un menu où il suffit de cocher des otpions pour qu’il génère le champ SPF (ouf!)
Est-ce que le résultat vous semble bon? (ou comment le vérifier moi-même?) : IN TXT "v=spf1 a mx ~all"


Envoie un mail à gmail et vérifie le “pass” dans l’en-tête.


Envoie un mail à gmail et vérifie le “pass” dans l’en-tête.[/quote]

Authentication-Results:; spf=pass ( domain of designates as permitted sender) :023

Avec un bon reverse, tu devrais déjà moins finir en spam.
Si tu ajoutes une signature dkim, tu es tranquille.

Avec un bon reverse, tu devrais déjà moins finir en spam.
Si tu ajoutes une signature dkim, tu es tranquille.[/quote]
Merci encore!

Je galère un peu avec dkim là, mais ça va bien finir par marcher! Pourtant, opendkim et postfix sont biens configurés, je n’ai pas encore trouvé où est l’erreur.

Par contre, je vois mal en quoi ça protège vraiment du spam… Si j’avais voulu envoyer du spam j’aurais très bien pu faire les démarches que je suis en train de faire actuellement aussi! Ça aurait fait du spam signé, c’est tout…


Un spam signé ? ce serait pas très malin!
Le but du spammeur c’est de pas se faire prendre… :wink:

Tu dois avoir une entrée dans ton DNS. Le serveur qui reçoit compare la signature du mail avec l’entrée dans le DNS. Si elles coïncident, la mail est bien parti du bon serveur, sinon, il est soit rejeté, soit classé dans les spams.

Donc si c’est signé, c’est pas très compliqué de remonter à l’expéditeur… :115

D’accord, le spammeur est repéré, mais ça ne l’empêche pas de continuer à spammer, si?

Bon, je ne m’en sors pas avec dkim. Voici ce que j’ai fait :
Installation de opendkim et opendkim-tools.

mkdir -p /etc/dkim cd /etc/dkim opendkim-genkey -D /etc/dkim/ -d -s mail chown -R opendkim:opendkim /etc/dkim/
Dans /etc/opendkim.conf :

UserID opendkim:opendkim Domain KeyFile /etc/dkim/mail.private Selector mail
Dans /etc/default/opendkim SOCKET="inet:8891:localhost"

Dans /etc/postfix/

# DKIM milter_default_action = accept milter_protocol = 2 smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891

J’ai copié le contenu de /etc/dkim/mail.txt dans un nouveau champ DNS de type DKIM :

Et lorsque j’envoie un mail à , voici la réponse :

[code]—SPF Trace Log—
Start to check SPF record
Sender IP:

Parse Sender-IP
Query TEXT record from DNS server for:
[TXT]: v=spf1 a mx ~all
[TXT]: google-site-verification=z2z1bwHfUsWLeQqug8nLS2DMjdeJRc86L_W35Mm8uf4
[TXT]: k=rsa;
Parsing SPF record: v=spf1 a mx ~all

Mechanisms: v=spf1

Mechanisms: a
Testing mechanism a
Query A record from DNS server for:
Testing CIDR: source=;
a hit, Qualifier: +

DomainKey result: none (no signature)

DKIM result: permerror (no key)

Signed by:
Expected Body Hash: frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN/XKdLCPjaYaY=


il ne faut aucun retour à la ligne dans la clé, dans ton champ DNS TXT

C’est OVH qui les mets ces retours, ils n’y sont pas lors de la copie…

Ok. Il faut peut-être attendre qques minutes que les changements au niveau du DNS soient pris en compte.


Tu peux éditer ta zone en mode texte pour rectifier, sur un de mes dns ça donne ça:

Pour la signature avec postfix, je ne peux pas t’aider, je le fais avec amavisd-new (qui est déjà installé pour divers filtres).