Moje odkazy
Obsah článku:
vydáno: 18. 5. 2009 21:15, aktualizováno: 18. 7. 2020 13:15
Na českém serveru zaměřeném na GNU/Linux a svobodný software ABC Linuxu.cz mi vyšel článek DKIM – podepisujeme e-maily na serveru.
Elektronická pošta stojí na SMTP protokolu, 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.
DKIM využívá elektronického podpisu 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.
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.
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:
# 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
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. 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
.
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ávě podepsané za spam považovat nemusíme. Pokud by se přesto o spamjednalo, 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 opratření proti podvodným e-mailům – rhybaření (phishing) – a to především při nasazení Author Domain Signing Practices.
Témata: [GNU/Linux] [e-mail] [počítačová bezpečnost]
Díky za pěkný popis. Narazil jsem na něj na abclinuxu a podařilo se mi rozjet podepisování i kontrolu pro firemní doménu intar.cz. (musel jsem ale pro podepisování navíc vytvořit soubor pro InternalHosts).
Bohužel se mi jeví používání DKIM ostatními jako velice řídké. Za den dojte z řádově stovek mailů pouze kolem pěti používajících DKIM.
Zajímalo by mě ještě používání DKIM Author Domain Signing Practices. Díval jsem se zběžně na draft i na záznam u Vaší domény frantovo.cz, ale moc moudrý z toho nejsem. Neškodilo by, kdybyste to trochu podrobněji zmínil (jednat praktické použití, jednat strukturu / parametry. Děkuji.
Můj článek o ADSP na Ábíčku: DKIM – zavádíme podpisovou politiku (ADSP).