{"id":256,"date":"2015-02-27T16:16:12","date_gmt":"2015-02-27T15:16:12","guid":{"rendered":"http:\/\/www.alvaromarin.com\/?p=256"},"modified":"2015-02-27T16:51:16","modified_gmt":"2015-02-27T15:51:16","slug":"postfix-con-dkim-y-multiples-dominios","status":"publish","type":"post","link":"http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/","title":{"rendered":"Postfix con DKIM y m\u00faltiples dominios"},"content":{"rendered":"

Tras pruebas varias e integraciones con otros sistemas de la plataforma, ya estamos firmando, desde hace unos meses, correos salientes con DKIM<\/a> (RFC 5585<\/a>).<\/p>\n

\u00bfY qu\u00e9 es DKIM? Es una idea desarrollada a partir de DomainKeys e IdentifiedMail que
\ngarantiza que un mensaje procede de un determinado sitio. Es usado por grandes proveedores como Yahoo, Gmail, Hotmail…etc.<\/p>\n

DKIM usa claves p\u00fablicas\/privadas para certificar el origen de un email a trav\u00e9s de DNS. Se crean dos claves, la p\u00fablica se publica en un registro TXT del DNS del dominio cuyos mensajes se quieren firmar y la privada se usa para crear la firma digital de los mensajes a\u00f1adiendo el resultado en una cabecera del propio mensaje a enviar.<\/p>\n

El servidor destino, consultar\u00e1 la clave p\u00fablica y chequear\u00e1 que se corresponde con la clave que ha firmado el mensaje.<\/p>\n

<\/p>\n

En Postfix la puesta en marcha es sencilla. Hay varias opciones pero el paquete OpenDKIM<\/a> ofrece un milter que implementa DKIM. La instalaci\u00f3n en Debian es sencilla:<\/p>\n

apt-get install opendkim<\/em><\/p>\n

El archivo de configuraci\u00f3n queda en \/etc\/opendkim.conf<\/em>. En este punto, debemos saber si queremos firmar los mensajes (salida) o verificar la firma (entrada). En nuestro caso, vamos a firmar los mensajes as\u00ed que la opci\u00f3n Mode<\/em> deber\u00e1 estar configurado como s<\/em>, de signer<\/em> (la otra opci\u00f3n es v<\/em> de verifier<\/em>).<\/p>\n

Adem\u00e1s, veremos si queremos firmar solamente un dominio o si queremos firmar los correos de varios dominios, como es nuestro caso. Para ello, OpenDKIM soporta el uso de archivos externos para estos listados, con las directivas:<\/p>\n

KeyTable\t\t\/etc\/opendkim\/KeyTable
\nSigningTable \t\/etc\/opendkim\/SigningTable<\/em><\/p>\n

Pero necesitamos generar la clave p\u00fablica y privada, y para generarla, tenemos el comando:<\/p>\n

\/usr\/bin\/opendkim-genkey -D \/etc\/opendkim\/keys\/dominiogeneral.com\/ -d dominiogeneral.com -s domgen<\/em><\/p>\n

con lo que nos crear\u00e1 2 archivos en el directorio \/etc\/opendkim\/keys\/dominiogeneral.com\/<\/em>, con la clave privada y con la p\u00fablica, para el dominio indicado (aunque esto realmente no se usar\u00e1 ya que podemos usarla para varios dominios diferentes) y con el selector (un dominio puede firmar con varias claves as\u00ed que se usan selectores para diferenciarlas; debemos elegir uno para cada clave ya que ir\u00e1 indicado en la firma y asociado a la clave p\u00fablica en el DNS).<\/p>\n

En dicho directorio, estar\u00e1 por tanto un archivo con la clave privada (que mantendremos en privado) y otro con el registro DNS que debemos publicar en los dominios que queremos firmar con la clave:<\/p>\n

domgen._domainkey IN TXT \u00abv=DKIM1; k=rsa; p=MIGfMA0aCSrGSIb3DQEBAQUAAVGNADCBiQKBgQzut1LT3mNz2wv4bkZoW\/HKYs4g
\nM9Rlm3lasoAKOwOasd7wUN34rs0dwWl+OEnEKP7Zhz34k3hy8OYaWF125PQy2F8EqP
\n1234rz81234123kasdhkqh345jg23cx5X5qS64FO1234pil1j45h134uiky5h123unC
\nbmQIDAQAB\u00bb
\n<\/em><\/p>\n

Es ese el registro TXT que debemos a\u00f1adir al DNS.<\/p>\n

Hecho esto, deberemos poblar los archivos referenciados en KeyTable y SigningTable, que comentaba antes. El formato es tal que:<\/p>\n

\/etc\/opendkim\/SigningTable :
\ndom1.com domgen._domainkey.dom1.com
\ndom2.com domgen._domainkey.dom2.com
\ndom3.com domgen._domainkey.dom3.com
\n<\/em><\/p>\n

indicando el dominio a firmar y cu\u00e1l es el registro TXT publicado en el DNS, donde se indica el selector y la clave p\u00fablica. El registro TXT anterior se debe a\u00f1adir a todos los dominios que aparezcan en este archivo, l\u00f3gicamente.<\/p>\n

\/etc\/opendkim\/KeyTable
\ndomgen._domainkey.dom1.com dom1.com:domgen:\/etc\/opendkim\/keys\/dominiogeneral.com\/domgen.private
\ndomgen._domainkey.dom1.com dom2.com:domgen:\/etc\/opendkim\/keys\/dominiogeneral.com\/domgen.private
\ndomgen._domainkey.dom1.com dom3.com:domgen:\/etc\/opendkim\/keys\/dominiogeneral.com\/domgen.private<\/em><\/p>\n

indicando el nombre del registro TXT donde est\u00e1 la clave p\u00fablica, el dominio, el selector y la ruta a la clave privada con la cu\u00e1l firmar los mensajes. En este caso, usaremos la misma clave para todos los dominios (aunque podemos tener una clave p\u00fablica\/privada por dominio); esto es para facilitar la gesti\u00f3n de las claves y registros ya que realmente lo que interesa en DKIM (desde el punto de vista del ISP con miles de dominios) es ver que el mensaje est\u00e1 firmado, no que se comparta la clave con otros dominios.<\/p>\n

Mediante el uso de dichos archivos para los listados, aunque gestionemos la salida de correo de otros dominios, solo se firmar\u00e1n los indicados en dichos archivos, el resto ir\u00e1n sin firma.<\/p>\n

Hecho ya esto, aparte de modificar alguna otra directiva del archivo de configuraci\u00f3n, solo faltar\u00eda indicar a Postfix que use dicho milter<\/em> con la configuraci\u00f3n t\u00edpica en el main.cf<\/em>:<\/p>\n

# DKIM
\nmilter_protocol = 2
\nmilter_default_action = accept
\nsmtpd_milters = inet:127.0.0.1:8891
\nnon_smtpd_milters = inet:127.0.0.1:8891<\/em><\/p>\n

A partir de entonces, se empezar\u00e1 a firmar los mensajes de los dominios indicados en los archivos de configuraci\u00f3n y en los logs, aparecer\u00e1n l\u00edneas como:<\/p>\n

Feb 27 16:03:39 relay opendkim[27424]: 7028B182EC6: DKIM-Signature header added (s=domgen, d=dom1.com)<\/em><\/p>\n

indicando qu\u00e9 mensajes se van firmando. La cabecera generada en cada email de los dominios presentes en los archivos de OpenDKIM para su firmado, es algo como la siguiente:<\/p>\n

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed\/relaxed; d=dom1.com;
\n\ts=domgen; t=1416842492;
\n\tbh=wrcn8uVGZ28r7aV+qSPQ5naq\/kE+5fh0D4aLoOyTb8g=;
\n\th=Subject:From:To:From;
\n\tb=gOovLmVaruPnahXFtavoadaEWvch5wA\/2uWPRQaY7Z6oKzcTdT2VB\/IQaXGcLlJHo
\n\t wW30zyAa1H\/bhQ8se8IrfXCfZaBko2jVI5DYa22i7clQrkfafXQ7zKuXGrDR128RGR
\n\t q079zMIZzWtH8JswaJf0RxBGQGBsC5P+qDWRFDqg=<\/em><\/p>\n

Como se puede ver, la cabecera incluye el dominio \u00abd\u00bb y el selector \u00abs\u00bb, con lo que con ello, el servidor destino puede crear el registro TXT a consultar (domgen<\/strong>._domainkey.dom1.com<\/strong><\/em>) para recuperar la clave p\u00fablica. Con ella, se verificar\u00e1 que el contenido del campo \u00abb\u00bb, que es la firma digital, se ha firmado con la privada asociada. Si hay un error (principalmente porque la clave p\u00fablica no se corresponde con la privada que ha firmado), se generar\u00e1 un error de verificaci\u00f3n.
\nPor otra parte, con el cuerpo del mensaje y las cabeceras indicadas en \u00abh\u00bb, se genera un hash. Este hash debe coincidir con el campo \u00abbh\u00bb de la cabecera DKIM-Signature, sino, tambi\u00e9n se generar\u00e1 un error de verificaci\u00f3n (el mensaje habr\u00eda sido modificado).
\nEsto es, de forma muy resumida, el proceso de validaci\u00f3n que har\u00e1n los servidores remotos.<\/p>\n

La implantaci\u00f3n se est\u00e1 realizando de forma muy progresiva, as\u00ed que poco a poco, se van firmando m\u00e1s mensajes de m\u00e1s dominios. Gmail, Yahoo…etc comprueban DKIM en sus servidores de entrada y recomiendan su uso, as\u00ed que es algo importante a la hora de entregar mensajes a sus servidores.<\/p>\n

Ya que hacemos uso tanto de SPF (desde hace ya bastantes a\u00f1os<\/a>) como de DKIM, quiz\u00e1, el pr\u00f3ximo paso sea empezar a usar DMARC<\/a>, pero tiempo al tiempo.<\/p>\n","protected":false},"excerpt":{"rendered":"

Tras pruebas varias e integraciones con otros sistemas de la plataforma, ya estamos firmando, desde hace unos meses, correos salientes con DKIM (RFC 5585). \u00bfY qu\u00e9 es DKIM? Es una idea desarrollada a partir de DomainKeys e IdentifiedMail que garantiza … Sigue leyendo →<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[12,5],"tags":[],"yoast_head":"\nPostfix con DKIM y m\u00faltiples dominios - www.alvaromarin.com<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Postfix con DKIM y m\u00faltiples dominios - www.alvaromarin.com\" \/>\n<meta property=\"og:description\" content=\"Tras pruebas varias e integraciones con otros sistemas de la plataforma, ya estamos firmando, desde hace unos meses, correos salientes con DKIM (RFC 5585). \u00bfY qu\u00e9 es DKIM? Es una idea desarrollada a partir de DomainKeys e IdentifiedMail que garantiza … Sigue leyendo →\" \/>\n<meta property=\"og:url\" content=\"http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/\" \/>\n<meta property=\"og:site_name\" content=\"www.alvaromarin.com\" \/>\n<meta property=\"article:published_time\" content=\"2015-02-27T15:16:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-02-27T15:51:16+00:00\" \/>\n<meta name=\"author\" content=\"Alvaro Mar\u00edn Illera\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alvaro Mar\u00edn Illera\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/\",\"url\":\"http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/\",\"name\":\"Postfix con DKIM y m\u00faltiples dominios - www.alvaromarin.com\",\"isPartOf\":{\"@id\":\"http:\/\/www.alvaromarin.com\/#website\"},\"datePublished\":\"2015-02-27T15:16:12+00:00\",\"dateModified\":\"2015-02-27T15:51:16+00:00\",\"author\":{\"@id\":\"http:\/\/www.alvaromarin.com\/#\/schema\/person\/287057c6a545a612badd5caa00bfd0bf\"},\"breadcrumb\":{\"@id\":\"http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"http:\/\/www.alvaromarin.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Postfix con DKIM y m\u00faltiples dominios\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/www.alvaromarin.com\/#website\",\"url\":\"http:\/\/www.alvaromarin.com\/\",\"name\":\"www.alvaromarin.com\",\"description\":\"Blog sobre spam, sistemas antispam y correo electr\u00f3nico\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/www.alvaromarin.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"http:\/\/www.alvaromarin.com\/#\/schema\/person\/287057c6a545a612badd5caa00bfd0bf\",\"name\":\"Alvaro Mar\u00edn Illera\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"http:\/\/www.alvaromarin.com\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/1.gravatar.com\/avatar\/d260aa4421f4ceb816fe98ba240bec2b?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/1.gravatar.com\/avatar\/d260aa4421f4ceb816fe98ba240bec2b?s=96&d=mm&r=g\",\"caption\":\"Alvaro Mar\u00edn Illera\"},\"url\":\"http:\/\/www.alvaromarin.com\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Postfix con DKIM y m\u00faltiples dominios - www.alvaromarin.com","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/","og_locale":"es_ES","og_type":"article","og_title":"Postfix con DKIM y m\u00faltiples dominios - www.alvaromarin.com","og_description":"Tras pruebas varias e integraciones con otros sistemas de la plataforma, ya estamos firmando, desde hace unos meses, correos salientes con DKIM (RFC 5585). \u00bfY qu\u00e9 es DKIM? Es una idea desarrollada a partir de DomainKeys e IdentifiedMail que garantiza … Sigue leyendo →","og_url":"http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/","og_site_name":"www.alvaromarin.com","article_published_time":"2015-02-27T15:16:12+00:00","article_modified_time":"2015-02-27T15:51:16+00:00","author":"Alvaro Mar\u00edn Illera","twitter_misc":{"Escrito por":"Alvaro Mar\u00edn Illera","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/","url":"http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/","name":"Postfix con DKIM y m\u00faltiples dominios - www.alvaromarin.com","isPartOf":{"@id":"http:\/\/www.alvaromarin.com\/#website"},"datePublished":"2015-02-27T15:16:12+00:00","dateModified":"2015-02-27T15:51:16+00:00","author":{"@id":"http:\/\/www.alvaromarin.com\/#\/schema\/person\/287057c6a545a612badd5caa00bfd0bf"},"breadcrumb":{"@id":"http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/www.alvaromarin.com\/2015\/02\/27\/postfix-con-dkim-y-multiples-dominios\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"http:\/\/www.alvaromarin.com\/"},{"@type":"ListItem","position":2,"name":"Postfix con DKIM y m\u00faltiples dominios"}]},{"@type":"WebSite","@id":"http:\/\/www.alvaromarin.com\/#website","url":"http:\/\/www.alvaromarin.com\/","name":"www.alvaromarin.com","description":"Blog sobre spam, sistemas antispam y correo electr\u00f3nico","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/www.alvaromarin.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"es"},{"@type":"Person","@id":"http:\/\/www.alvaromarin.com\/#\/schema\/person\/287057c6a545a612badd5caa00bfd0bf","name":"Alvaro Mar\u00edn Illera","image":{"@type":"ImageObject","inLanguage":"es","@id":"http:\/\/www.alvaromarin.com\/#\/schema\/person\/image\/","url":"http:\/\/1.gravatar.com\/avatar\/d260aa4421f4ceb816fe98ba240bec2b?s=96&d=mm&r=g","contentUrl":"http:\/\/1.gravatar.com\/avatar\/d260aa4421f4ceb816fe98ba240bec2b?s=96&d=mm&r=g","caption":"Alvaro Mar\u00edn Illera"},"url":"http:\/\/www.alvaromarin.com\/author\/admin\/"}]}},"_links":{"self":[{"href":"http:\/\/www.alvaromarin.com\/wp-json\/wp\/v2\/posts\/256"}],"collection":[{"href":"http:\/\/www.alvaromarin.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.alvaromarin.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.alvaromarin.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.alvaromarin.com\/wp-json\/wp\/v2\/comments?post=256"}],"version-history":[{"count":13,"href":"http:\/\/www.alvaromarin.com\/wp-json\/wp\/v2\/posts\/256\/revisions"}],"predecessor-version":[{"id":271,"href":"http:\/\/www.alvaromarin.com\/wp-json\/wp\/v2\/posts\/256\/revisions\/271"}],"wp:attachment":[{"href":"http:\/\/www.alvaromarin.com\/wp-json\/wp\/v2\/media?parent=256"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.alvaromarin.com\/wp-json\/wp\/v2\/categories?post=256"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.alvaromarin.com\/wp-json\/wp\/v2\/tags?post=256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}