Serveur email · 8 min read · Oct 23, 2025

Configuration d'un serveur de messagerie domestique à l'abri des spams (la méthode quelque peu alternative) (Debian Squeeze)

Configuration d’un serveur de messagerie domestique à l’abri des spams (la méthode quelque peu alternative) (Debian Squeeze)

Introduction

Le spam par e-mail est un énorme problème. J’ai trouvé pour moi une solution assez simple, cependant il faudra un certain temps pour “migrer” complètement vers celle-ci.

La solution consiste à créer une adresse e-mail unique chaque fois que je dois donner une adresse e-mail à quelqu’un d’autre ou à un site web pour m’inscrire. Si je veux un compte sur Twitter, j’utiliserais “[email protected]”. Pour les services basés sur le web, j’utilise le nom de domaine complet y compris le sous-domaine (www) à gauche du @ (certains sites mal conçus ne reconnaissent pas le www. comme une adresse e-mail valide, pour ceux-là je le laisse de côté).

Pour les personnes, j’utilise un format comme celui-ci : “[email protected]”. Vous pourriez également utiliser “[email protected]”. La bonne chose est que le côté gauche du @ pour les adresses e-mail est presque “illimité”.

Parce que je génère des adresses e-mail uniques pour chaque contact, je peux facilement découvrir où mon adresse e-mail a été divulguée et ensuite je peux facilement la supprimer.

Ce guide mettra en place un serveur de messagerie entièrement fonctionnel avec des scripts appropriés pour faciliter la gestion des e-mails. Il inclut également la partie configuration DNS - même si vous êtes sur une adresse dynamique - par exemple si vous souhaitez exécuter votre propre petit serveur de messagerie depuis chez vous.

Résumé

Dans ce guide, j’utilise Debian Squeeze comme serveur. Pour d’autres distributions Linux, vous devrez apporter les modifications nécessaires vous-même.

Un bref résumé de ce qui est fait dans ce guide est le suivant :

  • Obtention d’un nom de domaine
  • Gestion d’une IP dynamique - si nécessaire
  • Gestion du DNS et du routage
  • Configuration de Postfix
  • Configuration de Procmail
  • Configuration de Dovecot
  • Configuration d’un serveur web pour la gestion des adresses e-mail
  • Configuration de Thunderbird avec un addon

Crédits

Dans ce guide, je m’appuie également sur quelques autres guides ici - en particulier concernant la configuration de BIND et du serveur de messagerie. Pour ceux-ci, j’ai copié plus ou moins à partir des guides de Falko sur le serveur Debian parfait. De plus, la section sur le relais de messagerie a été empruntée à un guide ici par sjau. Sans ceux-ci, je n’aurais probablement pas pu mettre cela en place.

Obtention d’un nom de domaine

Avant de pouvoir commencer à exécuter votre propre serveur de messagerie, vous avez besoin d’un nom de domaine pour lequel vous pouvez également définir des enregistrements MX. Je ne veux faire aucune suggestion car il existe des tonnes et des tonnes de registraires de domaines là-bas. L’un des moins chers que je connaisse est GoDaddy.

Je n’utilise pas GoDaddy moi-même mais autant que j’ai entendu dire qu’ils fournissent un service solide.

Gestion des IP dynamiques

Un autre défi auquel il faut faire face est de savoir comment gérer les choses sur une adresse IP dynamique. Si vous n’avez pas de boîte dédiée louée quelque part mais utilisez votre connexion Internet domestique, alors très probablement vous n’avez pas d’IP statique.

Sur le web, il est essentiel d’avoir une IP statique afin que les autres sachent toujours où vous joindre. Cependant, il existe des services qui vous aident avec cela.

L’un des services que j’utilise est EveryDNS. Ils me permettent d’héberger le DNS pour le nom de domaine.

À l’heure actuelle, ils offrent encore le service gratuitement. Bien qu’ils aient été rachetés en 2010, la promesse était que les anciens clients qui ont fait des dons peuvent également utiliser le système gratuitement à l’avenir. Sur leur page web, ils ne mentionnent encore rien sur le fait que les nouveaux clients doivent payer - mais je ne sais pas avec certitude.

La raison pour laquelle j’utilise EveryDNS est qu’ils offrent également un petit script Perl qui peut être utilisé pour mettre à jour le DNS. C’est essentiel car votre IP change au fil du temps si vous n’avez pas d’adresse IP statique. Vous pouvez obtenir le script Perl ici.

Lorsque vous avez un nom de domaine, allez d’abord sur What Is My IP. Cela vous montrera votre adresse IP publique actuelle. Ensuite, créez un compte chez EveryDNS et faites au moins les entrées suivantes où MYDOMAIN.COM serait votre nom de domaine :

(1) Créez un enregistrement de type “A”, défini comme nom de domaine entièrement qualifié “MYDOMAIN.COM” et définissez comme valeur votre adresse IP publique.

(2) Créez un enregistrement de type “CNAME”, défini comme nom de domaine entièrement qualifié “*.MYDOMAIN.COM” et définissez comme “MYDOMAIN.COM”.

(3) Créez un enregistrement de type “MX”, défini comme nom de domaine entièrement qualifié “MYDOMAIN.COM”, défini comme valeur “MYDOMAIN.COM” et défini comme “Valeur MX” “10”.

Ce que nous venons de faire est de configurer le DNS pour le domaine. Le domaine principal se trouve à votre adresse IP (enregistrement A), tous les autres domaines se trouvent également là (le * dans l’enregistrement CNAME pointant vers le domaine principal) et nous exploitons également un serveur de messagerie là-bas (enregistrement MX).

Utilisateur root

Les choses suivantes sont effectuées en tant qu’utilisateur root - sauf indication contraire.

Mise à jour de l’IP dynamique

Comme dit précédemment, si vous n’avez pas d’adresse IP statique, vous devrez mettre à jour régulièrement les informations DNS.

(1) Obtenez le script Perl et rendez-le exécutable

cd /root  
wget http://www.everydns.net/eDNS.pl  
chmod 0755 eDNS.pl

(2) Créez un script bash qui appelle le script Perl (il existe d’autres moyens mais j’ai trouvé que c’était le plus simple) :

touch eDNS.sh  
echo "#!/bin/bash" > eDNS.sh  
echo "perl /root/eDNS.pl -u USERNAME -p PASSWORD -d MYDOMAIN.COM" >> eDNS.sh

Remplacez USERNAME et PASSWORD par vos identifiants de connexion EveryDNS.

(3) Configurez un cron pour l’exécuter régulièrement

J’aime travailler avec un fichier cron.txt qui contient tous les cron. Je pense que c’est beaucoup plus simple de le maintenir comme ça.

Tout d’abord, vous devez vérifier s’il y a déjà une entrée cron :

crontab -l

S’il n’y a pas encore d’entrée cron, exécutez simplement les commandes suivantes :

touch cron.txt  
chmod 0700 cron.txt  
echo "*/5 * * * * /root/eDNS.sh >/dev/null 2>&1" > cron.txt

S’il y a déjà des entrées cron, copiez-les, créez un fichier cron.txt et insérez-les et ajoutez également la commande suivante :

*/5 * * * * /root/eDNS.sh >/dev/null 2>&1 

Maintenant, nous chargeons le cron.txt en tant que cron :

crontab cron.txt

Et nous vérifions s’il a été ajouté correctement :

crontab -l

LAN/Routage/BIND

Le prochain problème auquel nous faisons face est de savoir comment résoudre le domaine dans votre LAN. Si votre serveur de messagerie est derrière un routeur, il aura probablement une IP locale comme 192.168.0.x ou 10.0.0.x.

Si vous êtes derrière un routeur, vous devrez rediriger les ports suivants vers votre serveur : 25, 80, 143, 443, 991. D’autres ports peuvent être nécessaires comme 587.

Nous faisons également face au problème de savoir comment résoudre le nom de domaine depuis l’intérieur du LAN. De l’extérieur du LAN, vous avez l’entrée DNS qui devrait pointer vers votre adresse IP actuelle. Cependant, lorsque vous êtes à l’intérieur du LAN et que vous effectuez une requête DNS, elle ne renverra que votre IP publique et échouera généralement alors.

Il existe plusieurs solutions à ce problème - si le problème existe même.

Une façon serait d’utiliser dnsmasq dans les routeurs (par exemple dd-wrt ou tomato-wrt). Cependant, comme je ne peux pas garantir que cela fonctionne, la seule autre option que je vois est de configurer un serveur DNS complet sur votre serveur de messagerie.

Dans ce tutoriel, j’utiliserai un BIND9 chrooté car c’est celui avec lequel je suis le plus familier. Pour d’autres serveurs DNS, vous trouverez beaucoup de documentation en ligne.

(1) Installez le logiciel et arrêtez-le

apt-get install bind9  
/etc/init.d/bind9 stop

(2) Modifiez la configuration /etc/default/bind9 afin que la ligne des options soit comme suit :

OPTIONS="-u bind  -t /var/lib/named" 

(3) Créez les répertoires nécessaires sous /var/lib :

mkdir -p /var/lib/named/etc  
mkdir /var/lib/named/dev  
mkdir -p /var/lib/named/var/cache/bind  
mkdir -p /var/lib/named/var/run/bind/run

(4) Déplacez ensuite le répertoire de configuration de /etc vers /var/lib/named/etc :

mv /etc/bind /var/lib/named/etc

(5) Créez un lien symbolique vers le nouveau répertoire de configuration depuis l’ancienne location (pour éviter des problèmes lorsque BIND sera mis à jour à l’avenir) :

ln -s /var/lib/named/etc/bind /etc/bind

(6) Créez des périphériques null et aléatoires, et corrigez les permissions des répertoires :

mknod /var/lib/named/dev/null c 1 3  
mknod /var/lib/named/dev/random c 1 8  
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random  
chown -R bind:bind /var/lib/named/var/*  
chown -R bind:bind /var/lib/named/etc/bind

(7) Éditez le fichier /etc/rsyslog.d/bind-chroot.conf et ajoutez

$AddUnixListenSocket /var/lib/named/dev/log 

(8) Redémarrez les services

/etc/init.d/rsyslog restart  
/etc/init.d/bind9 start

et vérifiez /var/log/syslog pour les erreurs.

Maintenant, nous avons configuré BIND9 dans un environnement chrooté. La prochaine chose à faire est d’ajouter un fichier de zone pour votre domaine.

(9) Éditez /etc/bind/named.conf.local et ajoutez

zone "MYDOMAIN.COM" IN {
        type master;
        file "/etc/bind/zones/MYDOMAIN.COM.db";
        allow-update { none; };
};

(10) Créez le dossier de zone et le fichier de zone

mkdir /etc/bind/zones  
touch /etc/bind/zones/MYDOMAIN.COM.db  
chown -R bind:bind /etc/bind/zones/MYDOMAIN.COM.db

(11) Ajoutez vos informations de fichier de zone à MYDOMAIN.COM.db

$TTL    86400
@               IN SOA  @ MYDOMAIN.COM. (
                                        1              ; serial
                                        2600              ; refresh
                                        15M             ; retry
                                        3600              ; expiry
                                        360 )            ; minimum
@               IN NS           ns.MYDOMAIN.COM.
ns              IN A            LOCALIP
www             IN A            LOCALIP
MYDOMAIN.COM.             IN A            LOCALIP
MYDOMAIN.COM.     IN MX   10      LOCALIP

Bien sûr, remplacez MYDOMAIN.COM par votre nom de domaine réel et LOCALIP par votre adresse IP locale statique. Fondamentalement, nous disons ici que le serveur de noms pour ce domaine est hébergé sur “ns.MYDOMAIN.COM” et “ns.MYDOMAIN.COM” se trouve à l’adresse IP locale statique.

(12) Redémarrez BIND9

/etc/init.d/bind9 restart

(13) Changez la résolution NS du routeur

Alors que BIND9 est maintenant configuré, il reste une dernière chose à faire. Sur votre routeur, vous devez changer l’ordre de résolution du serveur de noms. Le premier serveur de noms doit maintenant être votre “serveur de messagerie” avec l’adresse IP locale statique correspondante. Sinon, toute la configuration de BIND9 n’aurait servi à rien. En tant que deuxième serveur de noms, entrez la valeur de ce qui était déjà là comme premier. Selon votre routeur, cela peut être un peu plus compliqué.

Share: X/Twitter LinkedIn

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

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