HOWTO setup ubuntu 18.04 sendmail + DKIM + SPF + DMARC ou comment j'ai réussi à entrer dans le bastion Gmail

Préface


Sur mon serveur, 2 domaines distincts tournent. Avant l’histoire du blocage de Roskomnadzor, nous avons collecté environ 2 000 visites par jour et le serveur de messagerie envoyait environ 200 lettres par jour à tous les services de messagerie courants, y compris Google et Yandex. Tout était super. Mais comme le dit la célèbre vidéo: «Tout était si bon jusqu'à l'arrivée de Navalny Roskomnadzor!

Maintenant que nous avons réussi à trouver un hébergeur dont les adresses IP ne tombent pas sous le blocage de la censure de l'État, un autre problème est survenu. Google Good Corporation a cessé de laisser notre facteur dépasser le seuil.

Le serveur Google MX lance mon courrier avec approximativement le message suivant: "Votre message semble non sollicité, disons au revoir ..."

Journal de connexion Google SMTP
050 <legale.legale@gmail.com>... Connecting to gmail-smtp-in.l.google.com. via esmtp... 050 220 mx.google.com ESMTP v6-v6si38552789wrc.432 - gsmtp 050 >>> EHLO sevenlight.ru 050 250-mx.google.com at your service, [2a02:c207:2018:3546::1] 050 250-SIZE 157286400 050 250-8BITMIME 050 250-STARTTLS 050 250-ENHANCEDSTATUSCODES 050 250-PIPELINING 050 250-CHUNKING 050 250 SMTPUTF8 050 >>> STARTTLS 050 220 2.0.0 Ready to start TLS 050 >>> EHLO sevenlight.ru 050 250-mx.google.com at your service, [2a02:c207:2018:3546::1] 050 250-SIZE 157286400 050 250-8BITMIME 050 250-ENHANCEDSTATUSCODES 050 250-PIPELINING 050 250-CHUNKING 050 250 SMTPUTF8 050 >>> MAIL From:<root@sevenlight.ru> SIZE=297 050 250 2.1.0 OK v6-v6si38552789wrc.432 - gsmtp 050 >>> RCPT To:<legale.legale@gmail.com> 050 >>> DATA 050 250 2.1.5 OK v6-v6si38552789wrc.432 - gsmtp 050 354 Go ahead v6-v6si38552789wrc.432 - gsmtp 050 >>> . 050 550-5.7.1 [2a02:c207:2018:3546::1 7] Our system has detected that this 050 550-5.7.1 message is likely unsolicited mail. To reduce the amount of spam sent 050 550-5.7.1 to Gmail, this message has been blocked. Please visit 050 550-5.7.1 https://support.google.com/mail/?p=UnsolicitedMessageError 050 550 5.7.1 for more information. v6-v6si38552789wrc.432 - gsmtp 


Avec cette commande, j'ai envoyé un message de test:

 echo "Subject: Hello baby!" | sendmail -v legale.legale@gmail.com 

Je n'écrirai pas sur mes danses avec un tambourin pour tenter de percer les filtres anti-spam. Je peux seulement dire que j'ai été transporté toute la nuit, mais je n'ai réussi que le lendemain. C'est pourquoi j'ai décidé d'écrire ce manuel.

INSTRUCTIONS DE CONFIGURATION SPF + DKIM SUR UBUNTU 18.04


La raideur de cette instruction est qu'elle fonctionne, contrairement à beaucoup d'autres. Je vous garantis que vous pouvez configurer au moins 2 domaines sur 1 serveur sans trop de difficultés.

1. Installez les packages nécessaires


 apt-get install sendmail opendkim -y 

2. Configurer opendkim


La configuration est ici: /etc/opendkim.conf

/etc/opendkim.conf
Redémarrage automatique Oui
UMask 002
Syslog oui
AutoRestartRate 10 / 1h
Canonicalisation détendue / simple
Refile ExternalIgnoreList: / etc / opendkim / TrustedHosts

Fichier interne des hôtes: / etc / opendkim / TrustedHosts
Refile KeyTable: / etc / opendkim / KeyTable
Refile SigningTable: / etc / opendkim / SigningTable

LogPourquoi Oui
Mode sv
PidFile /var/run/opendkim/opendkim.pid
SignatureAlgorithm rsa-sha256
Socket inet: 8891 @ localhost
SyslogSuccess Oui
TemporaryDirectory / var / tmp
UserID opendkim: opendkim

3. Configurer les clés et les règles de signature


Je décrirai la procédure de création de vos propres clés pour ceux qui souhaitent une autonomie complète. Personnellement, j'utilise le service Yandex.Direct Mail pour le domaine pdd.yandex.ru, j'ai donc les clés générées par Yandex.

 #   mkdir -p /etc/opendkim/keys/*****.ru #  cd /etc/opendkim/keys/******.ru #  #-s   -d      opendkim-genkey -s mail -d ******.ru #  2  mail.txt     mail.private   #    opendkim:opendkim chown opendkim:opendkim mail.* #     chmod 600 mail.private 

Ensuite, nous connectons notre clé secrète DKIM créée ou téléchargée à partir de Yandex.

Nous nous intéressons à ces trois lignes de la configuration opendkim:

 InternalHosts refile:/etc/opendkim/TrustedHosts KeyTable refile:/etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable 

Le premier /etc/opendkim/TrustedHosts contient des hôtes qui auront accès au serveur opendkim pour signer des e-mails.

/ etc / opendkim / TrustedHosts
127.0.0.1
localhost
######. ru
******. ru

Le deuxième fichier /etc/opendkim/KeyTable contient une table de clés privées et les entrées DKIM associées, qui sont les suivantes: [selector]._domainkey.[domain_name]

/ etc / opendkim / KeyTable
mail._domainkey.sevenlight.ru sevenlight.ru:mail:/etc/opendkim/keys/sevenlight.ru/mail.private
mail._domainkey.st-goods.ru st-goods.ru:mail:/etc/opendkim/keys/st-goods.ru/mail.private

Le troisième fichier /etc/opendkim/SigningTable contient un tableau de règles pour signer des lettres. Il indique les lettres et la clé à signer.

/ etc / opendkim / SigningTable
*@sevenlight.ru mail._domainkey.sevenlight.ru
*@st-goods.ru mail._domainkey.st-goods.ru

Nous créons ces fichiers, indiquant notre domaine et notre chemin d'accès au fichier clé. Ceci termine la configuration d'opendkim.

4. Configurer sendmail


La configuration de sendmail est aussi simple que possible. Nous avons juste besoin d'ajouter les lignes suivantes à la fin du fichier de configuration prototype /etc/mail/sendmail.mc :

 #    starttls include(`/etc/mail/tls/starttls.m4')dnl # sendmail    opendkim INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost')dnl 

Pour envoyer du courrier par défaut à partir du domaine correct, vous devez apporter une modification supplémentaire dans le fichier /etc/mail/sendmail.mc

Nous recherchons une ligne similaire à celle-ci: MASQUERADE_AS(`st-goods.ru')dnl Remplacez par le domaine souhaité. C'est ce domaine qui sera utilisé comme adresse de retour par défaut. Veuillez noter que les guillemets sont différents à proprement parler, le premier signe ` s'appelle gravis. Donc, pour une raison quelconque, il est obtenu dans une configuration sendmail.

Nous allons maintenant ajouter des entrées au fichier / etc / hosts. Ceci est nécessaire pour que sendmail passe les messages à travers le filtre. Il a été établi expérimentalement que si vous n'ajoutez pas d'entrées, tous les journaux restent vierges, sans afficher une seule erreur, mais les lettres ne sont pas signées.

 #ipv4 echo -e "127.0.0.1 st-goods.ru" >> /etc/hosts #ipv6 echo -e "::1 st-goods.ru" >> /etc/hosts 

Nous devons maintenant reconstruire sendmail avec les nouveaux paramètres.

 #  #    "" sendmailconfig #  opendkim  sendmail service opendkim restart && service sendmail restart 

Désormais, notre serveur sendmail est capable de transmettre les messages sortants via le serveur opendkim, qui ajoute une signature numérique et chiffre les en-têtes des lettres envoyées. Il reste à publier la clé publique de l'hôte afin que les en-têtes puissent être déchiffrés et assurez-vous que les en-têtes ne sont pas modifiés.

5. Paramètres d'enregistrement DKIM TXT sur le serveur DNS


La clé doit être suspendue sur le serveur DNS dans une chaîne de type TXT avec le contenu suivant:
hôte: mail._domainkey
valeur: v=DKIM1; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2wtGTw/5KPjtlIEh282JY7ovxZ/8eqveFn9ivhzpYJldl3fBEOKw v=DKIM1; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2wtGTw/5KPjtlIEh282JY7ovxZ/8eqveFn9ivhzpYJldl3fBEOKw

Explications:
p= c'est notre clé publique
v= définit le numéro de version de DKIM
t= définit les indicateurs; les indicateurs ne sont pas définis par défaut. Il y a 2 drapeaux «y» et «s».
y indique que DKIM est en mode test.
s signifie le mode où la partie droite de l'adresse e-mail après @ doit correspondre complètement au domaine spécifié dans le paramètre d = DKIM de la signature de la lettre.

L'hôte doit être spécifié comme suit: [selector]._domainkey
Nous avons un sélecteur de courrier, donc l'hôte sera comme ceci: mail._domainkey

La clé publique doit être /etc/opendkim/keys/st-goods.ru/mail.txt du fichier /etc/opendkim/keys/st-goods.ru/mail.txt

/etc/opendkim/keys/st-goods.ru
mail._domainkey IN TXT ("v = DKIM1; h = sha256; k = rsa;„
« P = MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsLFjSAqvfSrjvF0JfMkiSzqWRhXwwVPzW5OEtRFSoDVBwDxR6hMna1iESnUQ1OzbUQQPnDPbrFXkalDCAXigZqltTSAV + JQSyOwhi0b88WS3djb1IkA / qioCobjlhMFSatvcmz5kMkG8oeoHhVFQ / BE84PwDPTXRmcObDvg7meUmkYpdxeyr + tcG5ezuC + s15I00 + 6NSAaj0Tj»
«Y / Bl2e2TE / WG45wVShlQ85E8IpYixscd0qDJ9 / NbZrbWIfy8shujWVk5izNU4PqcWwW7 / H9uTkhAbMu0fgqT8W9Jv / GRVAireOCzMl13E9PVANt4o + ywqyGk38vSY8QdgJsZPDUQIDAQAB»); - Mail clé DKIM pour st-goods.ru

La clé va de p = à la dernière citation. Les guillemets eux-mêmes doivent être supprimés.

6. Configuration SPF


SPF (Sender Policy Frameword) est une autre technologie de protection contre le spam, je n'en parlerai pas. Seulement 2 mots pour comprendre l'essence de cette technologie. Dans l'enregistrement DNS d'un domaine, les adresses des serveurs qui ont le droit d'envoyer du courrier depuis ce domaine sont enregistrées de la même manière que la clé publique DKIM. Nous devons enregistrer les adresses IP de notre serveur dans cette entrée. Dans mon cas, le serveur Yandex est également ajouté à la liste.

Voici un exemple de mon article:
hôte: @
valeur: v=spf1 a mx include:_spf.yandex.net ip4:173.249.51.13 ip6:2a02:c207:2018:3546::1 ~all

La syntaxe est simple. Tout d'abord, la version spf est indiquée, puis après un espace avec ou sans plus, les adresses des serveurs qui ont le droit d'envoyer du courrier depuis ce domaine sont indiquées. J'ai des enregistrements a et mx, ce qui signifie que les serveurs des enregistrements DNS A et MX sont également inclus dans la liste des autorisés. Via include: l'adresse du serveur Yandex est spécifiée, puis les adresses ipv4 et ipv6 de mon serveur. ~ all signifie softfail "soft failure". C'est-à-dire toutes les adresses qui ne sont pas répertoriées dans autorisé peuvent toujours aller à la discrétion du serveur de réception. -tout cela signifierait un rejet dur.

7. Configuration DMARC


Le dernier clou pour pénétrer le bastion gmail est le DMARC. DMARC définit ce qu'il faut faire avec les e-mails qui échouent SPF ou DKIM.

Nous faisons tout exactement la même chose grâce à un enregistrement DNS TXT.
hôte: _dmarc
valeur: v=DMARC1; p=none v=DMARC1; p=none

Ici, nous établissons que si les lettres ne passent pas le SPF ou le DKIM, rien ne doit être fait. Vous pouvez mettre p = rejeter. Ces lettres seront alors rejetées.

Vérifier


Envoyez-vous une lettre. echo "Subject: Hello baby!" | sendmail -v legale.legale@gmail.com

Nous regardons les dernières entrées dans le journal de messagerie. tail -f /var/log/mail.log | grep dkim
Une ligne similaire à celle-ci devrait apparaître:

 Jun 11 22:07:55 sevenlight opendkim[6473]: w5BK7sl9008069: DKIM-Signature field added (s=mail, d=st-goods.ru) 

S'il y a une ligne, alors le serveur sendmail et opendkim ont travaillé ensemble et signé votre lettre. S'il n'y a pas une telle ligne, consultez la section «Problèmes possibles».

Voyons maintenant ce qui s'est passé dans la boîte aux lettres. Ouvrez la lettre et appuyez sur le bouton fléché du bas dans le coin supérieur droit de la lettre. Dans le menu déroulant, sélectionnez l'élément «Afficher l'original».

Voici ce que j'ai obtenu:

 Message ID <201806112007.w5BK7sUS008068@******.ru> Created on: 11 June 2018 at 22:07 (Delivered after 2 seconds) From: info@*****.ru To: legale.legale@gmail.com Subject:  №2221 -   ******.ru SPF: PASS with IP 2a02:c207:2018:3546:0:0:0:1 Learn more DKIM: 'PASS' with domain *****.ru Learn more DMARC: 'PASS' Learn more 

PROFIT $$$

Problèmes possibles


J'espère sincèrement qu'il ne sera pas nécessaire de lire cette section, mais la technique est une chose compliquée ... Parfois, il n'est pas clair qui travaille pour qui.

Tout d'abord, vérifiez si vous avez tout fait dans l'ordre exact spécifié dans les instructions.
Tout d'abord, vérifiez que le fichier / etc / hosts est correct. J'ai eu le plus de problèmes là-bas. Ensuite, vérifiez le journal système pour les erreurs dkim. Pendant que je faisais le tour, il m'est arrivé de rencontrer une situation où il était impossible de lire opendkim la clé secrète, bien que j'aie assigné l'utilisateur opendkim comme propriétaire du fichier. Ensuite, vous devriez examiner attentivement le journal d'exécution de la commande sendmailconfig. J'ai eu un cas où j'ai utilisé le guillemet simple habituel au lieu du gravier mis, et sendmailconfig l'a juré. Si tout le reste échoue, écrivez-moi et continuez d'essayer.

Source: https://habr.com/ru/post/fr415569/


All Articles