Comment créer des alias dynamiques pour vos e-mails ?

Rediriger n'importe quel compte email de votre domaine vers votre compte mail personnel

Vous êtes-vous déjà trouvé (récemment) dans la situation où votre courriel personnel a été divulgué parce qu'un site web a été piraté ?

Ce ne serait pas cool d'avoir un email fwd.facebook@mydomain.com et de l'utiliser lors de l'inscription sur Facebook ?

Encore mieux si vous n'aviez pas à configurer un tel compte de courrier électronique sur votre client de messagerie ?

La solution que je vous présente ici vous permet d'utiliser n'importe quel email sous la forme fwd.xxx@domaine.com pour le transférer vers un seul compte email de manière transparente, sans aucune configuration préalable lors de la création d'un nouveau compte email.

C'est cool, simple et beaucoup plus utile, parce que maintenant, vous saurez quel site web vend votre adresse électronique au spammeur, quel site web a été piraté et ne l'a jamais dit, etc.

Ok, donnons la recette maintenant.

Ingrédients

  1. Vous avez besoin d'un nom de domaine à partir duquel vous pouvez contrôler la zone DNS. En général, vous voulez pouvoir ajouter ou définir la partie MX du domaine
  2. Vous avez besoin d'un serveur basé sur Linux (soit une instance cloud, soit un serveur dédié connecté directement à Internet)
  3. Les instructions ci-dessous concernent une distribution debian basée sur Stretch (ça devrait probablement fonctionner aussi bien pour Ubuntu), et il faudra procéder à quelques ajustements pour les autres distributions en ce qui concerne le nom des paquets

Ce que nous allons faire

Nous mettrons en place un serveur SMTP de courrier électronique Haraka qui sera chargé d'accepter uniquement le courrier électronique pour votre domaine, en utilisant un format spécifique pour la partie utilisateur du courrier électronique, et de le transmettre à vos courriers électroniques personnels. Ensuite, nous mettrons à jour les enregistrements DNS afin que d'autres puissent vous envoyer des courriels sur le nouveau serveur de votre domaine Enfin, nous veillerons à ce que ce serveur de messagerie ne soit pas un relais.

Conventions utilisées dans ce tutoriel

  • L'IP est votre adresse IP publique. Si c'est IPv4, elle est au format a.b.c.d (par exemple : 134.23.24.54), si c'est IPv6, elle est au format [abc:def::234].
  • domaine.com est votre nom de domaine. Je suppose que vous avez déjà des règles DNS qui relient votre domaine à l'adresse IP de votre serveur (vous avez donc une règle "domaine.com A IN IP" dans votre zone). En règle générale, si vous faites un "ping domaine.com" depuis n'importe où, il devrait répondre avec votre IP.
  • votre@email votre adresse électronique personnelle (privée)
  • /home/you À remplacer par le chemin vers votre répertoire home
  • Les commandes commençant par "$" doivent être tapées en tant qu'utilisateur normal, et les commandes commençant par "#" doivent être tapées en tant que root. Vous n'avez pas besoin de taper le dollar ou le signe dièse. Veuillez noter que vous devez être très prudent avec les commandes exécutées en tant que root (vérifiez-les avant de les valider)

Commençons !

Installation préalable

Haraka a besoin du nodeJS pour son noyau. Alors installons-le d'abord :

$ sudo su
# curl -sL https://deb.nodesource.com/setup_10.x | bash -
# apt-get install -y nodejs gcc g++ make swaks

Ensuite, parce que vous pourriez avoir des problèmes de versionnement à l'avenir, c'est une bonne idée de charger un gestionnaire de versionnement de nodeJS :

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
$ export NVM_DIR="$HOME/.nvm"
$ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
$ [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

Nous avons besoin de la version LTS de nodejs:

$ nvm install v10.15.0

Puis installons Haraka (attention à la majuscule):

$ npm install -g Haraka

Cela devrait donner un avertissement mais pas d'erreurs. Assurez-vous que tout fonctionne en tapant "$ haraka -h".

Cela devrait donner cette réponse :

$ haraka -h
Haraka.js — A Node.js Email Server project
Usage: haraka [options] [path]
Options:
    -v, --version       Outputs version number
    -h, --help          Outputs this help message
    -h NAME             Shows help for NAME
    -c, --configs       Path to your config directory
    -i, --install       Copies the default configs to a specified dir
    -l, --list          List the plugins bundled with Haraka
    -p, --plugin        Generate a new plugin with the given name
    -f, --force         Force overwriting of old files
    --qlist             List the outbound queue
    --qstat             Get statistics on the outbound queue
    --qunstick          Unstick (force delivery) for a given domain
    -o, --order         Show all registered plugins and their run order
    -t PLUGIN           Plugin test mode
    --------------- PLUGIN TEST MODE OPTIONS (all optional) --------------
    --ip IP             IP address to use
    --helo HELO         HELO to use
    --ehlo EHLO         EHLO to use
    --envfrom FROM      MAIL FROM to use
    --envfrom TO        RCPT TO(s) to use
    --message FILE      Message file to use
    --dump-mime         Dump the MIME structure and body text
    --dump-stream       Dump the MessageStream to stdout
    --skip-deny         Continue running hooks after DENY/DENYSOFT
    --set-relay         Set connection.relaying

Ensuite, nous devons l'installer définitivement pour qu'il puisse être exécuté en tant que root (ne vous inquiétez pas, il se dégradera pour devenir un utilisateur non privilégié par la suite).

$ sudo ln -sf /home/you/.nvm/versions/node/v10.15.0/bin/haraka /usr/bin/haraka
$ sudo mkdir /var/lib/haraka
$ sudo haraka -i /var/lib/haraka

La configuration et la file d'attente de Haraka seront stockées dans /var/lib/haraka et fonctionneront en tant qu'utilisateur non privilégié smtp. Créons un tel utilisateur et un tel groupe :

$ sudo addgroup smtp
$ sudo adduser --system --no-create-home --disabled-password --disabled-login smtp --ingroup smtp

Ensuite, nous aurons besoin d'un plugin spécifique ici pour la transmission appelé rcpt_to.alias_forword (oui, le nom est faux) :

$ cd /home/you/.nvm/versions/node/v10.15.0/lib/node_modules/Haraka/plugins
$ wget https://raw.githubusercontent.com/guoyiang/haraka-alias-forward/master/plugins/rcpt_to.alias_forword.js
$ cd ../config
$ wget https://raw.githubusercontent.com/guoyiang/haraka-alias-forward/master/config/rcpt_to.alias_forword

Configurer le serveur de messagerie

Contrairement aux autres serveurs de courrier électronique (avec ces termes complexes comme MTA, MDA, MSA, LDA, etc...), ce serveur n'est pas chargé de conserver (mettre en file d'attente) les courriers électroniques. Vous ne vous souciez pas du filtrage du spam ici, ni de l'antivirus, etc. Ce travail sera effectué par votre fournisseur de messagerie habituel.

En général, l'architecture de Haraka est basée sur des plugins. Pour chaque plugin sélectionné, vous devez fournir une configuration. Dans cet exemple, je fonctionne avec l'ensemble minimum de plugins pour la tâche (vous êtes libre d'en ajouter d'autres plus tard, mais commencez simple, testez puis améliorez, et non l'inverse).

Les plugins que nous utilisons sont les suivants (tapez les commandes ci-dessous) :

$ sudo mv /var/lib/haraka/config/plugins /var/lib/haraka/config/plugins.old
$ sudo su
# echo -e "syslog\ndnsbl\nhelo.checks\nrcpt_to.alias_forword\ndata.headers\nqueue/discard\nlimit" /var/lib/haraka/config/plugins
# nano /var/lib/haraka/config/rcpt_to.alias_forword 

Cette dernière commande devrait avoir ouvert un éditeur, où vous entrerez ceci (en remplaçant domain par votre nom de domaine et your@email par votre e-mail personnel :

{
    "accept_when_match" : true,
    "discard_income_mail" : true,
    "alias": {
          "domain": [
            {
                "local_name": "fwd.*",
                "forward_to": "your@email"
            }]
    }
}

Si vous souhaitez également accepter le courrier normal, vous pouvez ajouter des règles sans joker dans la section "domaine" comme ceci :

{
    "local_name" : "info",
    "forward_to": "your@email"
} 

l acceptera le domaine info et le transmettra à votre courrier électronique, ainsi que le domaine info-quelque_chose, mais pas le domaine quelque_chose.

Configurez le serveur avec $ sudo nano /var/lib/haraka/smtp.ini et entrez ceci (en remplaçant IP par l'adresse IP de votre serveur) :

listen=IP:25,IP:587,[IPv6]:25,[IPv6]:587
public_ip=IP

user=smtp
group=smtp

daemonize=true
daemon_log_file=/var/log/haraka.log
daemon_pid_file=/var/run/haraka.pid

spool_dir=/var/spool/haraka
spool_after=524288

Puis testez que le serveur fonctionne:

$ sudo kill `cat /var/run/haraka.pid`; sudo rm /var/run/haraka.pid; sudo haraka -c /var/lib/haraka

Si le serveur fonctionne, vous ne devriez pas recevoir de message disant "serveur en panne". Veuillez noter que la configuration ci-dessus écoute sur le port TLS (sécurisé). Dans ce tutoriel, je n'explique pas comment obtenir un certificat pour votre domaine et comment faire fonctionner le plugin TLS. Si Haraka se plaint, supprimez le port 587 de la configuration ci-dessus. Ce sera une bonne idée de configurer TLS plus tard, car au moins pour un man-in-the-middle, le courrier électronique transite chiffré sur l'internet

Parler de votre nouveau serveur de messagerie aux autres

Nous devons maintenant mettre en place l'enregistrement MX dans votre zone DNS. En général, lorsque quelqu'un veut envoyer un courrier à @some.com, il interroge l'enregistrement DNS en tapant MX du domaine some.com. Il sera redirigé vers une adresse de serveur et se connectera ensuite à cette adresse et au port 25 (SMTP) ou 587 (ESMTP) pour livrer le courrier.

De notre côté, nous devrons simplement indiquer qu'un serveur SMTP écoute sur notre serveur en ajoutant un enregistrement DNS. A condition que vous ayez déjà un *domain*. 3600 IN A *IP* le numéro n'est pas si important, vous devrez l'ajouter (en remplaçant domaine par votre nom de domaine, attention au dernier point qui est requis) :

domain. 3600    IN  MX  10 domain.

Si je parle chinois ici, vous devrez vous rendre sur le site de votre registrar, c'est généralement là que vous pouvez modifier l'enregistrement de la zone DNS de votre domaine. Par exemple, si j'ai le domaine "bob.com" sur mon serveur situé à 1.1.1.1, je devrais obtenir l'enregistrement suivant :

bob.com. 3600 IN A 1.1.1.1
bob.com. 3600 IN MX 10 bob.com.

Test vous pouvez envoyer un courriel maintenant

Maintenant que le serveur est démarré et que la zone de domaine est prête, il est temps de tester. Essayez d'envoyer un courrier électronique soit par la ligne de commande (via swaks), soit par votre programme de courrier électronique à bob@domain. Vous devriez recevoir un avis de rejet (si ce n'est pas le cas, vérifiez la configuration ci-dessus)

Essayez ensuite d'envoyer un courrier à fwd.test@domain et, comme par magie, il devrait apparaître dans votre boîte aux lettres personnelle quelques secondes plus tard.

Si tout fonctionne correctement, nous devrons finaliser l'installation.

Finalisation

Tout d'abord, nous ne permettrons à l'utilisateur smtp que de lire/écrire dans le dossier de travail haraka et de créer un service systemd afin que le serveur de messagerie soit démarré au démarrage. Utilisez votre éditeur préféré pour créer le fichier /lib/systemd/system/haraka.service en tant que root qui doit contenir :

[Unit]
Description=Haraka MTA
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/var/run/haraka.pid
ExecStart=/usr/bin/haraka -c /var/lib/haraka
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Puis lancez ces commandes:

$ sudo chown smtp:smtp -R /var/lib/haraka
$ sudo chmod 0660 -R /var/lib/haraka
$ sudo systemctl enable haraka
$ sudo kill `cat /var/run/haraka.pid`; sudo rm /var/run/haraka.pid
$ sudo systemctl start haraka

Conclusion

Si vous utilisez un gestionnaire de mots de passe (vous devriez), maintenant, chaque fois que vous naviguerez et que vous aurez besoin de créer un compte sur un site web, vous donnerez l'adresse électronique suivante fwd.websitename@domain et un mot de passe généré que vous enregistrerez dans votre gestionnaire de mots de passe.

Veuillez noter cependant que vous ne pouvez pas répondre à ces e-mails (à moins que vous ne créiez l'identité dans votre client de messagerie, mais c'est un peu pénible), donc ceci est principalement utilisé pour les sites web qui ne s'attendent jamais à recevoir des e-mails comme les site web d'achat, newsletter, etc...

Ensuite, chaque fois que vous recevrez du spam, vous verrez dans l'en-tête quel site a vendu votre contact ou s'est fait pirater. C'est ensuite à vous de le répliquer ;-)

Mise à jour : Veuillez consulter les étapes mises à jour requises pour garantir la livraison des mails à 100% avec les nouvelles politiques des serveurs SMTP en 2020.

Article précédent Article suivant