Portál AbcLinuxu, 26. dubna 2024 01:02

DKIM – podepisujeme e-maily na serveru

15. 5. 2009 | František Kučera
Články - DKIM – podepisujeme e-maily na serveru  

Elektronická pošta stojí na protokolu SMTP, který pochází z osmdesátých let, a její uživatelé dnes často trpí spamem. Jedním z největších problémů je praktická nemožnost dohledat, kdo daný e-mail odeslal. Proto vznikl standard DomainKeys Identified Mail (DKIM), díky kterému můžeme ověřit původce zprávy a další informace z hlaviček e-mailu.

Princip fungování

DKIM využívá elektronický podpis s dvojicí soukromý a veřejný klíč. K podpisu soukromým klíčem dochází na SMTP serveru (např. firemní server nebo server poskytovatele připojení) a není potřeba žádná součinnost ze strany uživatele. Předmětem podpisu je hash těla zprávy, některé hlavičky a hlavně doména, ze které e-mail pochází.

Pro distribuci veřejných klíčů se využívá DNS a předpokládá se, že DNS záznamy pro danou doménu může nastavovat jen její vlastník.

Server příjemce si tedy veřejný klíč pro danou doménu stáhne z DNS a ověří pomocí něj elektronický podpis zprávy.

Srovnání s S/MIME a GPG podepisováním

Jedná se o dvě různé úrovně podepisování e-mailů. V případě S/MIME nebo GPG podepisuje zprávu její autor (osoba) a tento podpis je vázán na danou e-mailovou adresu. Zatímco DKIM podpis pouze dokazuje, že e-mail pochází z dané domény.

Podepisování na serveru a podepisování odesílatelem se vzájemně nevylučují. Je možné obě metody kombinovat – každý podpis slouží k jinému účelu.

Nasazení v praxi

Na příkladu Postfixu si ukážeme, jak do svého poštovního serveru můžeme podporu DKIM přidat. K zapojení DKIM do procesu zpracování pošty použijeme technologii milter, takže postup v případě, že používáme místo Postfixu Sendmail, bude velice podobný.

Nainstalujeme si potřebný balíček – v Debianu/Ubuntu by to šlo takto:

# aptitude install dkim-filter

Vytvoříme si podpisový klíč:

# mkdir /etc/mail
# cd /etc/mail
# dkim-genkey -d naše-doména.cz

Program nám vygeneroval dva soubory: default.private (soukromý klíč) a default.txt (soubor obsahující veřejný klíč a informace pro nastavení DNS). Soubor se soukromým klíčem by měl patřit rootovi a neměl by být čitelný jinými uživateli.

Poznámka: při generování klíče můžeme zadat i tzv. selektor (parametr -s) – pro jednoduchost použijeme výchozí: default.

Teď potřebujeme nastavit správně DNS, aby ostatní servery mohly zjistit, jaký je náš veřejný klíč. Vytvoříme si DNS záznam podle vzoru uvedeného v souboru default.txt. Např.:

default._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQPmhgFl/Zj6f7ciMCyMYBk8oeSAJOOxBrgqarIyjkmeTNOr3oMeneP/uLOT9zP5VGYLUtepalxDsbs2WypjDa6MOm7mPHOrsW8WSSKTDTQsGyGekMgPu2QhV5I7BjTzIpYyOOJNoqMYKoqckQBno7CLaXuwI7lIvcc3Jdo7f+MwIDAQAB" ; ----- DKIM default for veverka.ch

Pokud zadáváme záznam do webového rozhraní našeho správce DNS, zadáme default._domainkey a v=DKIM1; g=*; k=rsa; p=MIGfMA0G … wIDAQAB (bez uvozovek) a zvolíme typ záznamu TXT.

Nastavíme si DKIM milter: v souboru /etc/dkim-filter.conf zadáme tyto hodnoty:

Domain                  naše-doména.cz
KeyFile                 /etc/mail/default.private
Selector                default

A do souboru /etc/default/dkim-filter přidáme řádek:

SOCKET="inet:8891@localhost"

DKIM teď bude naslouchat na místním portu 8891. Místo síťového portu můžeme použít i UNIXový socket.

Zbývá už jen nastavit Postfix – do souboru /etc/postfix/main.cf přidáme tyto řádky:

# DKIM podpis SMTP serveru
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

A výsledek…

E-maily odeslané z naší domény teď budou obsahovat elektronický podpis. Jedná se o podpis serveru, nikoli odesílatele (osoby). Podpis je realizován formou hlavičky ve zprávě – např.:

DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=veverka.ch;
	s=default; t=1241265143; bh=opC+T+DvWgIbxfSLcsOLnAcFxNGJTZfSK4iWmZj
	Vwic=; h=Message-Id:Date:From:To; b=DOhq7UkgV0xHaVrrOEP17cv/iwDo9Dw
	tqgxOeI2q5ei4ab/Io5TWCDFS9M9RxbHnBNGHXbAUYjz83R+bFbPVIwRwQAzuanNNjS
	SVd4cEw6ClLnPLi3AMeDdaYXm2GhY96sFBKzoXCtVolv04nF+O0811T8NRIbz0+F6zz
	317QSM=

DKIM-filter podpisy zpráv nejen vytváří, ale i ověřuje. Pokud máme dva servery s podporou DKIM, můžeme si to snadno vyzkoušet. Výsledek pak vypadá takto:

Authentication-Results: veverka.ch; dkim=pass (1024-bit key)
	header.i=@frantovo.cz; dkim-asp=none

Cílový server ověřil elektronický podpis (veřejný klíč zjistil z DNS záznamu) a vložil hlavičku o úspěšném ověření. Pokud zkusíme podpis podvrhnout, např. tak, že na odesílacím serveru nastavíme jiný klíč a neaktualizujeme DNS záznam, výsledek bude tento:

Authentication-Results: veverka.ch; dkim=hardfail (verification failed)
	header.i=@frantovo.cz; dkim-asp=none

Jestliže nemáme dva e-mailové servery s DKIM, můžeme si jeho funkčnost ověřit např. tak, že pošleme e-mail na adresu firmy Eland Systems: autorespond+dkim@dk.elands ys.com. Za chvíli nám přijde odpověď s výsledkem, zda se náš podpis podařilo ověřit. Nebo si můžete poslat zprávu do schránky na GMailu a ve webovém rozhraní se vám u přijaté zprávy ukáže: podepsáno od naše-doména.cz.

Závěr

DKIM je jedna z technologií, která může pomoci v boji proti tolik nenáviděnému spamu. Nepodepsané (nebo špatně podepsané) e-maily sice nebudeme zahazovat jako spam, ale ty správně podepsané za spam považovat nemusíme. Pokud by se přesto o spam jednalo, víme alespoň, kdo je za něj zodpovědný.

Zároveň může DKIM podpořit důvěryhodnost e-mailů pocházejících z vaší organizace u jejich adresátů. Tedy alespoň u těch, kteří tyto podpisy dokáží interpretovat a ověřovat (např. uživatelé GMailu). I přes absenci elektronického podpisu, jako je S/MIME či GPG, je příjemce schopný ověřit původ zprávy – alespoň na úrovni domény, např. firma.cz. Což může teoreticky fungovat jako opatření proti podvodným e-mailům – rhybaření (phishing) – a to především při nasazení Author Domain Signing Practices.

Související články

SPAM - greylisting ve firmě
Spam: naučte se bránit
MessageWall - kladivo nejen na spam
Jsme na dovolené - automatická odpověď

Odkazy a zdroje

DomainKeys Identified Mail
DKIM – dopisy ověřeného původu
DKIM
RFC 4871: DomainKeys Identified Mail (DKIM) Signatures.
RFC 2821: Protokol SMTP z roku 2001.
RFC 821: Původní (zastaralá) verze SMTP protokolu z roku 1982.
ADSP: DKIM Author Domain Signing Practices.

Další články z této rubriky

V sobotu se uskuteční konference CryptoFest
Pozor na androidové aplikace
Silent Circle představil bezpečný smartphone Blackphone 2
Android je bezpečnější, řada hrozeb však stále přetrvává
Avast varuje před nebezpečnými aplikacemi v Google Play

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.