index.html 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758
  1. <!DOCTYPE html>
  2. <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
  3. <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
  4. <head>
  5. <meta charset="utf-8">
  6. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  7. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  8. <title>Ajout des enregistrements SPF et DKIM au fichier de zone DNS - The Yojik Server Installation Guide</title>
  9. <link rel="shortcut icon" href="../img/favicon.ico">
  10. <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
  11. <link rel="stylesheet" href="../css/theme.css" type="text/css" />
  12. <link rel="stylesheet" href="../css/theme_extra.css" type="text/css" />
  13. <link rel="stylesheet" href="../css/highlight.css">
  14. <script>
  15. // Current page data
  16. var mkdocs_page_name = "Ajout des enregistrements SPF et DKIM au fichier de zone DNS";
  17. var mkdocs_page_input_path = "12-douze.md";
  18. var mkdocs_page_url = "/12-douze/";
  19. </script>
  20. <script src="../js/jquery-2.1.1.min.js"></script>
  21. <script src="../js/modernizr-2.8.3.min.js"></script>
  22. <script type="text/javascript" src="../js/highlight.pack.js"></script>
  23. <script src="../js/theme.js"></script>
  24. </head>
  25. <body class="wy-body-for-nav" role="document">
  26. <div class="wy-grid-for-nav">
  27. <nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
  28. <div class="wy-side-nav-search">
  29. <a href=".." class="icon icon-home"> The Yojik Server Installation Guide</a>
  30. <div role="search">
  31. <form id ="rtd-search-form" class="wy-form" action="../search.html" method="get">
  32. <input type="text" name="q" placeholder="Search docs" />
  33. </form>
  34. </div>
  35. </div>
  36. <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
  37. <ul class="current">
  38. <li>
  39. <li class="toctree-l1 ">
  40. <a class="" href="..">Home</a>
  41. </li>
  42. <li>
  43. <li>
  44. <li class="toctree-l1 ">
  45. <a class="" href="../1-un/">Installation d'un serveur Debian/Stretch sécurisé</a>
  46. </li>
  47. <li>
  48. <li>
  49. <li class="toctree-l1 ">
  50. <a class="" href="../2-deux/">Premières étapes de sécurisation du serveur</a>
  51. </li>
  52. <li>
  53. <li>
  54. <li class="toctree-l1 ">
  55. <a class="" href="../3-trois/">Configuration du réseau</a>
  56. </li>
  57. <li>
  58. <li>
  59. <li class="toctree-l1 ">
  60. <a class="" href="../4-quatre/">Installation d'un serveur de temps</a>
  61. </li>
  62. <li>
  63. <li>
  64. <li class="toctree-l1 ">
  65. <a class="" href="../5-cinq/">Installation d'un pare-feu</a>
  66. </li>
  67. <li>
  68. <li>
  69. <li class="toctree-l1 ">
  70. <a class="" href="../6-six/">Contrer les attaques de brute-force avec fail2ban</a>
  71. </li>
  72. <li>
  73. <li>
  74. <li class="toctree-l1 ">
  75. <a class="" href="../7-sept/">Installation d'un serveur de courrier basique</a>
  76. </li>
  77. <li>
  78. <li>
  79. <li class="toctree-l1 ">
  80. <a class="" href="../8-huit/">Installation du serveur DNS</a>
  81. </li>
  82. <li>
  83. <li>
  84. <li class="toctree-l1 ">
  85. <a class="" href="../9-neuf/">Installation d'un serveur web</a>
  86. </li>
  87. <li>
  88. <li>
  89. <li class="toctree-l1 ">
  90. <a class="" href="../10-dix/">Installation de dovecot et de l'authentification</a>
  91. </li>
  92. <li>
  93. <li>
  94. <li class="toctree-l1 ">
  95. <a class="" href="../11-onze/">Installation des certificats letsencrypt</a>
  96. </li>
  97. <li>
  98. <li>
  99. <li class="toctree-l1 current">
  100. <a class="current" href="./">Ajout des enregistrements SPF et DKIM au fichier de zone DNS</a>
  101. <ul>
  102. <li class="toctree-l3"><a href="#ajout-des-enregistrements-spf-au-fichier-de-zone-dns">Ajout des enregistrements spf au fichier de zone DNS</a></li>
  103. <li><a class="toctree-l4" href="#installation-des-logiciels-necessaires">Installation des logiciels nécessaires</a></li>
  104. <li><a class="toctree-l4" href="#doc-debian">Doc Debian</a></li>
  105. <li><a class="toctree-l4" href="#configuration-de-postfix">Configuration de postfix</a></li>
  106. <li class="toctree-l3"><a href="#installation-de-dkim">Installation de DKIM</a></li>
  107. <li><a class="toctree-l4" href="#author-domain-signing-practices-adsppermalink">Author Domain Signing Practices (ADSP)Permalink</a></li>
  108. <li><a class="toctree-l4" href="#dmarc">DMARC</a></li>
  109. </ul>
  110. </li>
  111. <li>
  112. <li>
  113. <li class="toctree-l1 ">
  114. <a class="" href="../17-dixsept/">Installation de programmes de surveillance du serveur</a>
  115. </li>
  116. <li>
  117. <li>
  118. <li class="toctree-l1 ">
  119. <a class="" href="../18-dixhuit/">Installation d'un webmail</a>
  120. </li>
  121. <li>
  122. <li>
  123. <li class="toctree-l1 ">
  124. <a class="" href="../19-dixneuf/">Installation de git et de gogs</a>
  125. </li>
  126. <li>
  127. </ul>
  128. </div>
  129. &nbsp;
  130. </nav>
  131. <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
  132. <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
  133. <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
  134. <a href="..">The Yojik Server Installation Guide</a>
  135. </nav>
  136. <div class="wy-nav-content">
  137. <div class="rst-content">
  138. <div role="navigation" aria-label="breadcrumbs navigation">
  139. <ul class="wy-breadcrumbs">
  140. <li><a href="..">Docs</a> &raquo;</li>
  141. <li>Ajout des enregistrements SPF et DKIM au fichier de zone DNS</li>
  142. <li class="wy-breadcrumbs-aside">
  143. </li>
  144. </ul>
  145. <hr/>
  146. </div>
  147. <div role="main">
  148. <div class="section">
  149. <p></p>
  150. <h1 id="ajout-des-enregistrements-spf-au-fichier-de-zone-dns">Ajout des enregistrements <strong>spf</strong> au fichier de zone DNS</h1>
  151. <p>Nous allons maintenant ajouter un enregistrement <strong>spf</strong> à notre configuration. SPF est un enregistrement qui déclare quelle machine est responsable et autorisée à envoyer des mails pour notre domaine. Cela permet d'éviter que nos mails soient considérés comme du <strong>spam</strong>.</p>
  152. <p>La syntaxe de la ligne à ajouter est assez simple. Il existe des générateurs de ligne SPF, comme https://www.spfwizard.net/ ou https://mxtoolbox.com/SPFRecordGenerator.aspx.</p>
  153. <p>Le site http://www.openspf.org/ contient tout ce qu'il faut savoir à propos de SPF, syntaxe, paramètres etc ...</p>
  154. <p>Pour mon serveur, j'ai choisi une politique stricte de rejet des mails qui ne viennent pas d'uns source autorisée.</p>
  155. <p>Voici la ligne à rajouter au fichier de zone. C'est le paramètre "-all" qui détermine la politique (de rejet ici). Nous aurions pu mettre <strong>~all</strong> pour une politique moins stricte.</p>
  156. <pre><code class="shell">; spf
  157. yojik.net. IN TXT &quot;v=spf1 a mx mx:adara.yojik.net a:adara.yojik.net -all&quot;
  158. yojik.net. IN SPF &quot;v=spf1 a mx mx:adara.yojik.net a:adara.yojik.net -all&quot;
  159. </code></pre>
  160. <p>On recharge bind pour la prise en compte des modifications:</p>
  161. <blockquote>
  162. <p>service bind9 restart</p>
  163. </blockquote>
  164. <p>Il nous reste à configurer postfix pour prendre en compte cet enregistrement et effectuer les validations.</p>
  165. <h2 id="installation-des-logiciels-necessaires">Installation des logiciels nécessaires</h2>
  166. <pre><code class="shell">root@aijan:/etc/bind# apt-get install postfix-policyd-spf-python
  167. Lecture des listes de paquets... Fait
  168. Construction de l'arbre des dépendances
  169. Lecture des informations d'état... Fait
  170. The following additional packages will be installed:
  171. python3-authres python3-dns python3-spf
  172. Paquets suggérés :
  173. python3-yaml
  174. Les NOUVEAUX paquets suivants seront installés :
  175. postfix-policyd-spf-python python3-authres python3-dns python3-spf
  176. 0 mis à jour, 4 nouvellement installés, 0 à enlever et 12 non mis à jour.
  177. Il est nécessaire de prendre 153 ko dans les archives.
  178. Après cette opération, 494 ko d'espace disque supplémentaires seront utilisés.
  179. Souhaitez-vous continuer ? [O/n] o
  180. Réception de:1 http://deb.debian.org/debian stretch/main amd64 python3-dns all 3.1.1-1 [27,5 kB]
  181. Réception de:2 http://deb.debian.org/debian stretch/main amd64 python3-authres all 0.900-1 [17,5 kB]
  182. Réception de:3 http://deb.debian.org/debian stretch/main amd64 python3-spf all 2.0.12t-3 [64,1 kB]
  183. Réception de:4 http://deb.debian.org/debian stretch/main amd64 postfix-policyd-spf-python all 2.0.1-1 [43,8 kB]
  184. 153 ko réceptionnés en 0s (1 533 ko/s)
  185. Sélection du paquet python3-dns précédemment désélectionné.
  186. (Lecture de la base de données... 40435 fichiers et répertoires déjà installés.)
  187. Préparation du dépaquetage de .../python3-dns_3.1.1-1_all.deb ...
  188. Dépaquetage de python3-dns (3.1.1-1) ...
  189. Sélection du paquet python3-authres précédemment désélectionné.
  190. Préparation du dépaquetage de .../python3-authres_0.900-1_all.deb ...
  191. Dépaquetage de python3-authres (0.900-1) ...
  192. Sélection du paquet python3-spf précédemment désélectionné.
  193. Préparation du dépaquetage de .../python3-spf_2.0.12t-3_all.deb ...
  194. Dépaquetage de python3-spf (2.0.12t-3) ...
  195. Sélection du paquet postfix-policyd-spf-python précédemment désélectionné.
  196. Préparation du dépaquetage de .../postfix-policyd-spf-python_2.0.1-1_all.deb ...
  197. Dépaquetage de postfix-policyd-spf-python (2.0.1-1) ...
  198. Paramétrage de python3-authres (0.900-1) ...
  199. Paramétrage de python3-dns (3.1.1-1) ...
  200. Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
  201. Paramétrage de python3-spf (2.0.12t-3) ...
  202. Paramétrage de postfix-policyd-spf-python (2.0.1-1) ...
  203. root@aijan:/etc/bind#
  204. </code></pre>
  205. <h2 id="doc-debian">Doc Debian</h2>
  206. <p>This package must be integrated with Postfix to be effective:</p>
  207. <ol>
  208. <li>
  209. <p>Add the following to /etc/postfix/master.cf:</p>
  210. <pre><code>policyd-spf unix - n n - 0 spawn
  211. user=policyd-spf argv=/usr/bin/policyd-spf
  212. </code></pre>
  213. </li>
  214. <li>
  215. <p>Configure the Postfix policy service in /etc/postfix/main.cf:</p>
  216. <pre><code>smtpd_recipient_restrictions =
  217. ...
  218. reject_unauth_destination
  219. check_policy_service unix:private/policyd-spf
  220. ...
  221. policyd-spf_time_limit = 3600
  222. </code></pre>
  223. <p>NOTE: Specify check_policy_service AFTER reject_unauth_destination or
  224. else your system can become an open relay.</p>
  225. </li>
  226. <li>
  227. <p>Reload Postfix.</p>
  228. </li>
  229. </ol>
  230. <h2 id="configuration-de-postfix">Configuration de postfix</h2>
  231. <p>Dans le fichier /etc/postfix/master.cf, il faut rajouter le service suivant:</p>
  232. <p>policyd-spf unix - n n - 0 spawn
  233. user=policyd-spf argv=/usr/bin/policyd-spf</p>
  234. <h3 id="test">Test</h3>
  235. <p>Je teste ma configuration sur les sites:</p>
  236. <blockquote>
  237. <p><a href="https://mxtoolbox.com/">Mxtoolbox</a>
  238. <a href="https://kitterman.com/spf/validate.html">Kitterman</a>
  239. <a href="https://www.mail-tester.com/spf-dkim-check">Mail-tester</a></p>
  240. </blockquote>
  241. <p>Les tests ne fonctionnent pas ... en fait, cela vient de la config IPV6 du serveur. La configuration automatique avec privext 2 donne plusieurs adresses IPV6 à la machine (avec le même préfixe, bien sûr). Mais l'adresse de la machine ne correspond plus à l'adresse de la machine déclarée dans bind. Et SPF ne peut plus fonctionner.</p>
  242. <p>La solution a été de configurer manuellement l'adresse IPV6 dans /etc/network/interfaces de la façon suivante:</p>
  243. <pre><code class="shell">iface enp2s0 inet6 static
  244. address 2a01:e0a:54:c220:3aea:a7ff:fea6:cf93
  245. netmask 64
  246. gateway 2a01:e0a:54:c220:OOOO:0000:000:0001
  247. </code></pre>
  248. <p>On va aussi modifier la configuration de Postfix pour permettre l'envoi de messages de l'extérieur de la machine (uniquement les utilisateurs enregistrés, bien sûr).</p>
  249. <p>J'ai modifié /etc/postfix/main.cf de la façon suivante: j'ai ajouté ceci au fichier:</p>
  250. <pre><code class="shell">smtpd_recipient_restrictions =
  251. permit_sasl_authenticated,
  252. permit_mynetworks,
  253. reject_unauth_destination,
  254. check_policy_service unix:private/policyd-spf
  255. </code></pre>
  256. <p>et commenté les lignes correspondantes dans la section submission et smtps du fichier /etc/postfix/master.cf:</p>
  257. <pre><code class="shell"># -o smtpd_sender_restrictions=$mua_sender_restrictions
  258. </code></pre>
  259. <p>J'ai simplement transféré les restrictions <strong>smtpd_sender_restrictions</strong> qui étaient dans main.cf dans master.cf.</p>
  260. <p>Après modifications, tout marche comme il faut, vérification SPF comprise.</p>
  261. <pre><code class="shell">root@aijan:/home/ericadmin# tail -f /var/log/mail.log
  262. May 28 11:58:06 aijan dovecot: imap-login: Login: user=&lt;ericadmin&gt;, method=PLAIN, rip=192.168.111.150, lip=192.168.111.240, mpid=1901, TLS, session=&lt;I0V6J0FtWODAqG+W&gt;
  263. May 28 11:58:26 aijan postfix/smtpd[1902]: connect from adara.yojik.eu[91.121.72.10]
  264. May 28 11:58:26 aijan policyd-spf[1907]: prepend Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=91.121.72.10; helo=adara.yojik.eu; envelope-from=eric@yojik.eu; receiver=&lt;UNKNOWN&gt;
  265. May 28 11:58:26 aijan postfix/smtpd[1902]: C701DD004F2: client=adara.yojik.eu[91.121.72.10]
  266. May 28 11:58:26 aijan postfix/cleanup[1908]: C701DD004F2: message-id=&lt;4c621385-3822-cb78-9c1d-7e9f43c3fc52@yojik.eu&gt;
  267. May 28 11:58:26 aijan postfix/qmgr[867]: C701DD004F2: from=&lt;eric@yojik.eu&gt;, size=1414, nrcpt=1 (queue active)
  268. May 28 11:58:26 aijan postfix/smtpd[1902]: disconnect from adara.yojik.eu[91.121.72.10] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7
  269. May 28 11:58:26 aijan postfix/local[1909]: C701DD004F2: to=&lt;ericadmin@yojik.net&gt;, relay=local, delay=0.23, delays=0.21/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir)
  270. May 28 11:58:26 aijan postfix/qmgr[867]: C701DD004F2: removed
  271. May 28 11:59:00 aijan dovecot: imap-login: Login: user=&lt;ericadmin&gt;, method=PLAIN, rip=192.168.111.150, lip=192.168.111.240, mpid=1915, TLS, session=&lt;FoqwKkFtduDAqG+W&gt;
  272. </code></pre>
  273. <p>La ligne <strong>May 28 11:43:12 aijan policyd-spf[1830]: prepend Received-SPF: Pass (mailfrom) identity=mailfrom; </strong> montre que notre contrôle SPF fonctionne comme il faut.</p>
  274. <h1 id="installation-de-dkim">Installation de DKIM</h1>
  275. <p>DKIM (DomainKeys Identified Mail) est un système qui vous permet d'ajouter aux entêtes de vos émails une signature qui vous identifie et qui permet aux autres serveurs mails de la vérifier. L'entête peut être configuré pour garantir que le mail n'a pas été modifié après signature (on peut générer une clef qui signe tout ou partie du message, selon configuration)</p>
  276. <p>L'installation et la configuration de DKIM nécessite 3 étapes:</p>
  277. <ol>
  278. <li>Configuration de DKIM</li>
  279. </ol>
  280. <p>Nous commençons par l'installation de opendkim.</p>
  281. <p><code>shell
  282. root@aijan:/home/ericadmin# apt install opendkim
  283. Lecture des listes de paquets... Fait
  284. Construction de l'arbre des dépendances
  285. Lecture des informations d'état... Fait
  286. The following additional packages will be installed:
  287. dns-root-data liblua5.1-0 libmemcached11 libmemcachedutil2 libmilter1.0.1 libopendbx1 libopendbx1-sqlite3 libopendkim11 librbl1 libunbound2 libvbr2
  288. Paquets suggérés :
  289. ... etc ...</code></p>
  290. <p>Une fois installé, nous allons configurer opendkim: cela se fait dans le fichier /etc/opendkim.conf</p>
  291. <p>Création des répertoires:</p>
  292. <blockquote>
  293. <p>mkdir -p /etc/opendkim/keys/yojik.net/</p>
  294. </blockquote>
  295. <p>Permissions:</p>
  296. <blockquote>
  297. <p>chmod u=rw,go=r /etc/opendkim.conf
  298. chown -R opendkim:opendkim /etc/opendkim
  299. chmod go-rw /etc/opendkim/keys</p>
  300. </blockquote>
  301. <p>Un fichier opendkim.conf entièrement commenté est disponible dans /usr/share/doc/opendkim/examples.
  302. Voici notre fichier de configuration; adaptez-le en fonction de votre domaine, bien sûr:</p>
  303. <p>```shell
  304. # This is a basic configuration that can easily be adapted to suit a standard
  305. # installation. For more advanced options, see opendkim.conf(5) and/or
  306. # /usr/share/doc/opendkim/examples/opendkim.conf.sample.</p>
  307. <p># Log to syslog
  308. Syslog yes
  309. # Required to use local socket with MTAs that access the socket as a non-
  310. # privileged user (e.g. Postfix)
  311. ## UMask 002</p>
  312. <p># Sign for example.com with key in /etc/mail/dkim.key using
  313. # selector '2007' (e.g. 2007._domainkey.example.com)
  314. Domain yojik.net
  315. KeyFile /etc/opendkim/keys/yojik.net/yojik.private
  316. Selector yojik</p>
  317. <p># Commonly-used options; the commented-out versions show the defaults.
  318. #Canonicalization simple
  319. #Mode sv
  320. #SubDomains no
  321. #ADSPAction continue</p>
  322. <p># Always oversign From (sign using actual From and a null From to prevent
  323. # malicious signatures header fields (From and/or others) between the signer
  324. # and the verifier. From is oversigned by default in the Debian pacakge
  325. # because it is often the identity key used by reputation systems and thus
  326. # somewhat security sensitive.
  327. OversignHeaders From</p>
  328. <p># List domains to use for RFC 6541 DKIM Authorized Third-Party Signatures
  329. # (ATPS) (experimental)</p>
  330. <p>#ATPSDomains example.com</p>
  331. <p>AutoRestart Yes
  332. AutoRestartRate 10/1h
  333. UMask 002
  334. Syslog yes
  335. SyslogSuccess Yes
  336. LogWhy Yes
  337. Canonicalization relaxed/simple</p>
  338. <p>ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
  339. InternalHosts refile:/etc/opendkim/TrustedHosts
  340. KeyTable refile:/etc/opendkim/KeyTable
  341. SigningTable refile:/etc/opendkim/SigningTable</p>
  342. <p>Mode sv
  343. PidFile /var/run/opendkim/opendkim.pid
  344. SignatureAlgorithm rsa-sha256</p>
  345. <p>UserID opendkim:opendkim</p>
  346. <p>Socket inet:12301@localhost
  347. ```</p>
  348. <p>Postix accédera à opendkim à travers le port 12301.
  349. Il nous reste 3 fichiers à configurer/créer, ainsi que générer les clefs privées et publiques.</p>
  350. <ol>
  351. <li>/etc/opendkim/SigningTable
  352. Ce fichier ne contient qu'une seule ligne:
  353. &gt; *@yojik.net yojik._domainkey.yojik.net</li>
  354. <li>/etc/opendkim/KeyTable
  355. Ce fichier ne contient qu'une seule ligne:
  356. &gt; yojik._domainkey.yojik.net yojik.net:yojik:/etc/opendkim/keys/yojik.net/yojik.private</li>
  357. <li>/etc/opendkim/TrustedHosts
  358. &gt; 127.0.0.1
  359. &gt; ::1
  360. &gt; localhost
  361. &gt;
  362. &gt; yojik.net
  363. Ne pas modifier les 3 premières lignes qui sont nécessaires à opendkim ...</li>
  364. <li>
  365. <p>Création des clefs publiques et privées
  366. &gt; cd /etc/opendkim/keys/yojik.net/
  367. &gt; opendkim-genkey -b 2048 -h rsa-sha256 -r -s yojik -d yojik.net -v
  368. Un erreur apparaît: il nous faut installer opendkim-tools:
  369. &gt; apt install opendkim-tools
  370. 2 fichiers sont crées: la clef publique et la clef privée. Nous allons renommer ces 2 clefs.
  371. &gt; mv mv 201805.private yojik.private
  372. &gt; mv 201805.txt yojik.txt
  373. Note du 9 décembre 2018: les fichiers sont crées avec les noms corrects; pas besoin de les renommer.
  374. On réapplique la modification des permissions:</p>
  375. <p><code>root@aijan:/etc/opendkim/keys# cd /etc
  376. root@aijan:/etc# chown -R opendkim:opendkim /etc/opendkim
  377. root@aijan:/etc# chmod -R go-rw /etc/opendkim/keys
  378. root@aijan:/etc#</code></p>
  379. <p>On relance opendkim pour voir s'il y a des erreurs:</p>
  380. <blockquote>
  381. <p>systemctl restart opendkim</p>
  382. </blockquote>
  383. <p>On lance:</p>
  384. <blockquote>
  385. <p>netstat -tlnp
  386. et on voit la ligne:
  387. tcp 0 0 127.0.0.1:12301 0.0.0.0:* LISTEN 2395/opendkim
  388. C'est bon .. le service est en place.</p>
  389. </blockquote>
  390. </li>
  391. <li>
  392. <p>Ajout de DKIM à Postix
  393. On va rajouter la gestion de DKIM à Postfix dans le fichier /etc/postfix/main.cf
  394. On ajoute les lignes suivantes:</p>
  395. <blockquote>
  396. <p>milter_default_action = accept
  397. milter_protocol = 2
  398. smtpd_milters = inet:localhost:12301
  399. non_smtpd_milters = inet:localhost:12301 </p>
  400. </blockquote>
  401. </li>
  402. </ol>
  403. <p>On relance Postfix par:</p>
  404. <blockquote>
  405. <p>service postfix restart</p>
  406. </blockquote>
  407. <ol>
  408. <li>
  409. <p>Ajout d'un enregistrement DNS
  410. On ajoute la partie entre double-quotes du fichier /etc/opendkim/keys/yojik.net/yojik.txt à la ligne suivante:
  411. Attention à la syntaxe: ne pas oublier le "." derrière yojik.net!</p>
  412. <blockquote>
  413. <p>yojik._domainkey.yojik.net.&lt;&gt;IN&lt;-&gt;TXT&lt;&gt;( "v=DKIM1; h=rsa-sha256; k=rsa; s=email; p=;")
  414. Ajouter la clef derrière p= (supprimer les doubles quotes du début, milieu et fin de clef: ex:
  415. "ljjoj" "dfjj")</p>
  416. </blockquote>
  417. <p>Test:</p>
  418. <blockquote>
  419. <p>opendkim-testkey -d yojik.net -s yojik</p>
  420. </blockquote>
  421. </li>
  422. </ol>
  423. <p>Si votre clef est de longueur 2048, il va falloir la découper ... et utiliser le format "multi-lignes" comme ce qui suit:</p>
  424. <pre><code class="shell"> ; multi-line format
  425. name._domainkey IN TXT (&quot;v=DKIM1&quot;
  426. &quot;p=MIGfMA0G ... &quot;
  427. &quot;oGeLnQg ... &quot;
  428. &quot;tdC2UzJ1lW ... &quot;
  429. &quot;MmPSPDdQPNUYckcQ2QIDAQAB&quot;)
  430. </code></pre>
  431. <pre><code>Une chose à vérifier: le point "." à la fin du nom de domaine (première partie de la ligne). Les messages d'erreur style "erreur de syntaxe" n'aident pas beaucoup ...
  432. Cette fois-ci, tout est bon. J'ai adopté une technique pour coller ma clef dans l'enregistrement dns: je fais un:
  433. &gt; cat fichier_de_zone fichier_de_clef &gt; fichier_de_zone.new
  434. J'édite le fichier (les retours-chariot etc ...) et je remplace le fichier original (que je sauve d'abord) en incrémentant le numero de série dans le fichier.
  435. </code></pre>
  436. <ol>
  437. <li>
  438. <p>Test
  439. On envoie un message pour voir s'il est bien signé.
  440. Je redémarre le serveur et j'envoie un message.</p>
  441. <p>Voilà les résultats:</p>
  442. <blockquote>
  443. <p>ARC-Authentication-Results: i=1; mx.google.com;
  444. dkim=pass header.i=@yojik.net header.s=yojik header.b=CE0b13ii;
  445. spf=pass (google.com: domain of ericadmin@yojik.net designates 82.64.48.5 as permitted sender) &gt; smtp.mailfrom=ericadmin@yojik.net
  446. Received-SPF: pass (google.com: domain of ericadmin@yojik.net designates 82.64.48.5 as permitted sender) &gt; client-ip=82.64.48.5;
  447. Authentication-Results: mx.google.com;
  448. dkim=pass header.i=@yojik.net header.s=yojik header.b=CE0b13ii;
  449. spf=pass (google.com: domain of ericadmin@yojik.net designates 82.64.48.5 as permitted sender) &gt; smtp.mailfrom=ericadmin@yojik.net
  450. Received: from [192.168.111.150] (unknown [192.168.111.150])
  451. by aijan.yojik.net (Postfix) with ESMTPSA id AFB9ED004F3
  452. for <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#101;&#114;&#105;&#99;&#111;&#117;&#110;&#101;&#116;&#50;&#54;&#50;&#48;&#48;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">&#101;&#114;&#105;&#99;&#111;&#117;&#110;&#101;&#116;&#50;&#54;&#50;&#48;&#48;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;</a>; Thu, 31 May 2018 12:09:41 +0200 (CEST)
  453. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=yojik.net; s=yojik;
  454. t=1527761381; bh=ay9Odp/rKTenfDlpDmHqBM+YFfCITM3u/keXU6iwx20=;
  455. h=To:From:Subject:Date:From;
  456. b=CE0b13iiZgEQgrd7EngBovulGeU6QnSU/cKzia42u9s9B+S/dxUsm1u7JRjBrTLLg
  457. /c/uW05pdE5QS+9y3dvZtji0hogr0H87nRpZE7QBZaFLpVWGpUTukRsJ47JskO+Cwi
  458. 4cRYjeyUOLTY8Gc8uQaiS79CDko8E107fsfoUGV8=</p>
  459. </blockquote>
  460. <p>Tout est bon ....</p>
  461. <p><strong>IL est recommandé de changer les clefs DKIM tous les mois!</strong></p>
  462. </li>
  463. </ol>
  464. <h2 id="author-domain-signing-practices-adsppermalink">Author Domain Signing Practices (ADSP)Permalink</h2>
  465. <p>Nous allons rajouter un enregistrement DNS qui va indiquer que tous les émails issus par yojik.net doivent être signés par DKIM. C'est une sécurité supplémentaire.
  466. La syntaxe est assez simple:</p>
  467. <blockquote>
  468. <p>_adsp._domainkey.yojik.net. IN TXT "dkim=all"
  469. Le paramètre dkim accepte d'autres valeurs moins strictes, mais j'ai choisi la plus stricte.
  470. Ne pas oublier d'incrémenter le numéro de série du fichier de zone après modification.
  471. Rechargez bind.
  472. service bind9 restart (ou reload)</p>
  473. </blockquote>
  474. <p>Tout est OK.</p>
  475. <p>Note: ADSP et Dmarc remplissent le même rôle. Après consultation d'experts, ADSP est "obsolète". Nous allons donc enlever ce service (commenter la ligne DNS) et configurer DMARC.</p>
  476. <h2 id="dmarc">DMARC</h2>
  477. <p>Dmarc (Domain Message Authentication, Reporting &amp; Conformance) indique les politiques d'envoi des messages issus du domaine concerné (grâce à DKIM et SPF), indique quelle politique utiliser si les conditions ne sont pas respectées (validations SPF ou DKIM , et peut éventuellement demander un rapport en cas d'échec de livraison du message.</p>
  478. <p>La mise en place de DMARC nécessite de configurer/installer opendmarc, de mettre en place l'enregistrement TXT dans le fichier de zone DNS et de configurer le <strong>hook</strong> dans Postfix.</p>
  479. <h3 id="installation-de-opendmarc">Installation de Opendmarc</h3>
  480. <pre><code>root@aijan:/home/ericadmin# apt install opendmarc
  481. Lecture des listes de paquets... Fait
  482. Construction de l'arbre des dépendances
  483. Lecture des informations d'état... Fait
  484. The following additional packages will be installed:
  485. libdbd-mysql-perl libdbi-perl libencode-locale-perl libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libopendbx1-mysql libopendmarc2
  486. libspf2-2 libtimedate-perl liburi-perl publicsuffix
  487. ...
  488. Paramétrage de libdbd-mysql-perl (4.041-2) ...
  489. Paramétrage de opendmarc (1.3.2-2+deb9u1) ...
  490. Traitement des actions différées (« triggers ») pour libc-bin (2.24-11+deb9u3) ...
  491. Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u3) ...
  492. </code></pre>
  493. <p>Voilà, opendmarc est installé. Passons à sa configuration.</p>
  494. <h3 id="configuration-de-opendmarc">Configuration de Opendmarc</h3>
  495. <p>2 fichiers sont à configurer.
  496. La configuration se fait dans /etc/opendmarc.conf et dans /etc/default/opendmarc:
  497. Comme d'habitude, faite une copie de sauvegarde du fichier d'origine avant modification.</p>
  498. <p><strong>Fichier /etc/opendmarc.conf</strong>:</p>
  499. <pre><code class="shell"># This is a basic configuration that can easily be adapted to suit a standard
  500. # installation. For more advanced options, see opendkim.conf(5) and/or
  501. # /usr/share/doc/opendmarc/examples/opendmarc.conf.sample.
  502. ## AuthservID (string)
  503. ## &lt;--&gt;defaults to MTA name
  504. #
  505. # AuthservID name
  506. ## FailureReports { true | false }
  507. ## &lt;--&gt;default &quot;false&quot;
  508. ##
  509. # FailureReports false
  510. PidFile /var/run/opendmarc/opendmarc.pid
  511. ## RejectFailures { true | false }
  512. ## &lt;--&gt;default &quot;false&quot;
  513. ##
  514. RejectFailures false
  515. ## Socket socketspec
  516. ## &lt;--&gt;default (none)
  517. ##
  518. ## Specifies the socket that should be established by the filter to receive
  519. ## connections from sendmail(8) in order to provide service. socketspec is
  520. ## in one of two forms: local:path, which creates a UNIX domain socket at
  521. ## the specified path, or inet:port[@host] or inet6:port[@host] which creates
  522. ## a TCP socket on the specified port for the appropriate protocol family.
  523. ## If the host is not given as either a hostname or an IP address, the
  524. ## socket will be listening on all interfaces. This option is mandatory
  525. ## either in the configuration file or on the command line. If an IP
  526. ## address is used, it must be enclosed in square brackets.
  527. #
  528. # Socket local:/var/run/opendmarc/opendmarc.sock
  529. Socket inet:54444@localhost
  530. ## Syslog { true | false }
  531. ## &lt;--&gt;default &quot;false&quot;
  532. ##
  533. ## Log via calls to syslog(3) any interesting activity.
  534. #
  535. Syslog true
  536. ## SyslogFacility facility-name
  537. ## &lt;--&gt;default &quot;mail&quot;
  538. ##
  539. ## Log via calls to syslog(3) using the named facility. The facility names
  540. ## are the same as the ones allowed in syslog.conf(5).
  541. #
  542. # SyslogFacility mail
  543. ## TrustedAuthservIDs string
  544. ## &lt;--&gt;default HOSTNAME
  545. ##
  546. ## Specifies one or more &quot;authserv-id&quot; values to trust as relaying true
  547. ## upstream DKIM and SPF results. The default is to use the name of
  548. ## the MTA processing the message. To specify a list, separate each entry
  549. ## with a comma. The key word &quot;HOSTNAME&quot; will be replaced by the name of
  550. ## the host running the filter as reported by the gethostname(3) function.
  551. #
  552. # TrustedAuthservIDs HOSTNAME
  553. ## UMask mask
  554. ## &lt;--&gt;default (none)
  555. ##
  556. ## Requests a specific permissions mask to be used for file creation. This
  557. ## only really applies to creation of the socket when Socket specifies a
  558. ## UNIX domain socket, and to the HistoryFile and PidFile (if any); temporary
  559. ## files are normally created by the mkstemp(3) function that enforces a
  560. ## specific file mode on creation regardless of the process umask. See
  561. ## umask(2) for more information.
  562. #
  563. UMask 0002
  564. ## UserID user[:group]
  565. ## &lt;--&gt;default (none)
  566. ##
  567. ## Attempts to become the specified userid before starting operations.
  568. ## The process will be assigned all of the groups and primary group ID of
  569. ## the named userid unless an alternate group is specified.
  570. #
  571. UserID opendmarc
  572. ## Path to system copy of PSL (needed to determine organizational domain)
  573. #
  574. PublicSuffixList /usr/share/publicsuffix/
  575. IgnoreHosts /etc/opendmarc/ignore.hosts
  576. HistoryFile /var/run/opendmarc/opendmarc.dat
  577. #for testing:
  578. SoftwareHeader true
  579. </code></pre>
  580. <p>On crée le répertoire suivant: /etc/opendmarc et on crée un fichier qui va contenir la liste des machines auxquelles vous avez confiance.</p>
  581. <pre><code>root@aijan:/etc# mkdir /etc/opendmarc
  582. </code></pre>
  583. <p>On crée le fichier <strong>/etc/opendmarc/ignore.hosts</strong> avec le contenu suivant (le fichier ignore.hosts a été déclaré dans le fichier /etc/opendmarc.conf):</p>
  584. <blockquote>
  585. <p>localhost
  586. 192.168.111.0/24</p>
  587. </blockquote>
  588. <p>Les mails envoyés par les machines listées dans ce fichier ne seront pas testés. Ici, le serveur de mail lui-même et les machines du réseau local familial.</p>
  589. <p>On ajoute la ligne suivante à /etc/default/opendmarc:</p>
  590. <blockquote>
  591. <p>SOCKET=inet:54444@localhost</p>
  592. </blockquote>
  593. <p>Notre daemon écoutera sur le port 54444. On relance opendmarc par la commande suivante:</p>
  594. <blockquote>
  595. <p>service opendmarc restart</p>
  596. </blockquote>
  597. <p>Mise en place du hook dans postfix:
  598. Nous modifierons les 2 lignes suivantes dans le fichier: /etc/postfix/main.cf:</p>
  599. <blockquote>
  600. <p>smtpd_milters = inet:localhost:12301,inet:localhost:54444
  601. non_smtpd_milters = inet:localhost:12301,inet:localhost:54444</p>
  602. </blockquote>
  603. <p>On recharge postfix (comme d'habitude ...)
  604. Configuration de l'enregistrement DNS dans le fichier de zone (ne pas oublier d'incrémenter le compteur!):</p>
  605. <blockquote>
  606. <p>_dmarc.yojik.net. TXT ( "v=DMARC1; p=none; sp=reject; pct=10; adkim=r;aspf=r;fo=1;ri=86400;rua=mailto:ericadmin@yojik.net")</p>
  607. </blockquote>
  608. <p>Test d'envoi de messages:</p>
  609. <blockquote>
  610. <p>Authentication-Results: aijan.yojik.net; dmarc=pass </p>
  611. </blockquote>
  612. <p>Ça fonctionne :)</p>
  613. <pre><code>
  614. </code></pre>
  615. </div>
  616. </div>
  617. <footer>
  618. <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
  619. <a href="../17-dixsept/" class="btn btn-neutral float-right" title="Installation de programmes de surveillance du serveur">Next <span class="icon icon-circle-arrow-right"></span></a>
  620. <a href="../11-onze/" class="btn btn-neutral" title="Installation des certificats letsencrypt"><span class="icon icon-circle-arrow-left"></span> Previous</a>
  621. </div>
  622. <hr/>
  623. <div role="contentinfo">
  624. <!-- Copyright etc -->
  625. </div>
  626. Built with <a href="http://www.mkdocs.org">MkDocs</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
  627. </footer>
  628. </div>
  629. </div>
  630. </section>
  631. </div>
  632. <div class="rst-versions" role="note" style="cursor: pointer">
  633. <span class="rst-current-version" data-toggle="rst-current-version">
  634. <span><a href="../11-onze/" style="color: #fcfcfc;">&laquo; Previous</a></span>
  635. <span style="margin-left: 15px"><a href="../17-dixsept/" style="color: #fcfcfc">Next &raquo;</a></span>
  636. </span>
  637. </div>
  638. </body>
  639. </html>