OpenDKIM a CentOS 7 a Postfix a SPF záznam

27.10.2014

Poněvadž máme neustále problémy s důvěryhodností emailů, které nám přicházejí do našich emailových schránek (viz předchozí článek https://ahimsa.lamed.cz/blog/index.php?article4/scam), doporučil jsem kromě jiných opatření i tlak uživatelů na poskytovatele emailových služeb a na partnery, se kterým si uživatelé vyměňují korespondenci emailem na zavedení technologie DKIM (Domain Keys Identified Mail).

Tato technologie zajišťuje podepsání emailu na úrovni serveru (tedy je to něco jiného než podepsání uživatelem) a je založena na dvojici privátního a veřejného klíče, kde privátní složí serveru k podepisování emailů, které server posílá do Internetu a veřejný je uložen jako záznam v DNS a cílový emailový server si pomocí něj může ověřit, že email zaslal opravdu daný server.

V článku se dozvíme, jak zprovoznit podporu DKIM na Linuxové distribuci CentOS s emailovým serverem Postfix, který obsluhuje jednu doménu. Složitější instalace jsou analogické.

Jak už to u mých článků bývá, postup je ověřen v praxi pro výše zmíněnou konfiguraci. Opět předpokládám základní znalosti konfigurace emailového serveru Posftix.

DKIM má triviální infrastrukturu:

  • privátní klíč uložený bezpečně na serveru a
  • veřejný klíč uložený jako TXT RR v DNS (slouží k ověření podpisu emailu).

Email, který správně nakonfigurovaný poštovní server zasílá (nebo kontroluje) má přidanou hlavičku DKIM-Signature, která obsahuje vlastní podpis a další informace a při doručování takového emailu přijímací emailový server, který DKIM podporuje zjistí existenci takové hlavičky a ověří podpis pomocí veřejného klíče získaného z DNS. Přijímací emailový server po kontrole podpisu emailu přidává hlavičku Authentication-Results, která obsahuje řetězec s výsledkem ověření podpisu pomocí veřejného klíče získaného z DNS.

Struktura TXT RR v DNS je následující: v konfiguraci DKIM odesílajícího serveru je uveden tzv. Selector, což je string, který je součástí hlavičky DKIM-Signature a při ověřování podpisu se přijímací server dotáže DNS na záznam, jehož název zkonstruuje tak, že použije string Selectoru, přidá k němu za tečku string _domainkey (což je vlastně subdoména) a za další tečku název domény, pro kterou je email doručován (tedy pokud je Selector např. “default” jako v příkladu níže, dotazovat se bude na jméno default._domainkey.podepisovana.cz).

Vzhledem k tomu, ze zde je princip důvěryhodnosti založen na získání veřejného klíče z DNS, doporučuji implementovat technologii DNSSEC, která zajistí, že získaný veřejný klíč (v případě správně nastaveného resolveru) je ten správný a nikoliv podvržený.

Zde bych ještě podotkl, že variantou k DKIM pro servery, které neověřují podpis může být zavedení SPF záznamu v DNS, o kterém zde hovořím také. SPF záznam umožňuje přijímacímu emailovému serveru ověřit, zda server, od kterého dostal email z dané domény je oprávněn emaily z této domény posílat (jedná se o jednoduchý DNS TXT RR). Vhodné je oba způsoby kombinovat.

Za zmínku stojí i politika či technologie ADSP (Author Domain Signing Practices), která sděluje v DNS emailovým serverům, které jsou na to připraveny, jakou politiku podepisování jsem jako vlastník domény zavedl. Z výše uvedeného vyplývá, že server, který umí s DKIM pracovat totiž může podpis zkontrolovat až ve chvíli, kdy je email podepsaný, protože přislušná hlavička obsahuje informace, bez kterých se server nedozví (tedy Selector), jaký DNS RR s veřejným klíčem si má vyžádat. Zejména neví, zda odesílající server má DKIM vůbec zaveden. ADSP zavádí DNS RR s předem známou jmennou konvencí a tudíž i když přijde email bez DKIM podpisu, může si ověřit, zda pro danou doménu mají být emaily podepisované a pokud nejsou, jak se k nim má chovat.

Instalace probíhá jednoduše nainstalováním balíku opendkim z repozitáře epel příkazem:

yum install opendkim

Pokud repozitář epel nemáme zatím k dispozici, zprovozníme jej následovně:

wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm
yum install epel-release-7-2.noarch.rpm

Defaultní konfigurace OpenDKIM v /etc/opendkim.conf je dostačující až na pár potřebných změn. Pokud vynecháme komentáře v konfiguračním souboru, měl by vypadat následovně:

ADSPAction reject
Domain *
PidFile /var/run/opendkim/opendkim.pid
Mode    sv
Syslog  yes
SyslogSuccess   yes
LogWhy  yes
UserID  opendkim:opendkim
Socket  inet:8891@localhost
Umask   022
Canonicalization        relaxed/relaxed
Selector        default
MinimumKeyBits 1024
SignatureAlgorithm      rsa-sha256
KeyFile /etc/opendkim/keys/default.private
InternalHosts   refile:/etc/opendkim/TrustedHosts

V souboru /etc/opendkim/TrustedHosts uvedeme:

127.0.0.1
ahimsa.podepisovana.cz
podepisovana.cz

Tento soubor nám říká, že emaily, které Postfix bude zpracovávat a které pocházejí z těchto hostů má podepisovat a ne verifikovat.

Dvojici klíčů vygenerujeme příkazem:

cd /etc/opendkim/keys
opendkim-genkey -d podepisovana.cz -s default
chown -R opendkim.opendkim /etc/opendkim/keys

který vytvoří v adresáři /etc/opendkim/keys dva soubory, z nichž první se jmenuje default.private a druhý default.txt (“default” v názvu souboru je vzatý z konfigurační direktivy Selector). Jak názvy napovídají, první obsahuje privátní klíč a druhý DNS TXT RR s veřejným klíčem.

Program opendkim-genkey vytvořil privátní klíč již s korektními právy.

V tuto chvíli již máme co vložit do zónového souboru - konkrétně je to obsah souboru /etc/opendkim/keys/default.txt (trošku jsme si jej upravili, jak je vidět) a zároveň můžeme přidat i SPF záznam(y) do zónového souboru. Jak vidíme, SPF záznam říká, odkud by měly přicházet emaily, které odcházejí z naší domény.

@       IN  3600 TXT            "v=spf1 +mx +a +ip4:23.43.45.11 +ip6:2a02:2a98:2:5::46db:1 -all"
@       IN  3600 SPF            "v=spf1 +mx +a +ip4:23.43.45.11 +ip6:2a02:2a98:2:5::46db:1 -all"
default._domainkey      IN      3600    TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqBGDc3DQEBAQUAA4GNADCBiQKBgQCanzKhejDf6ZscF7q2tTRIhPJNGUKzr/VY7YOZmXrp+u5p1tKnUgVhNzjJfXa6zSdx6AykGy9XOg09R/VIwxbrHzWLaPiUqkwDt4bnvMdwC0bMX9c9g0TeP2CbWjN4RzFNGSiVhqYSxKHimLimvZlB1eb9VWFN9BeOoUJQJPsLQwIDAQAB"
_adsp._domainkey        IN      3600    TXT "dkim=all;"

Co znamená string default._domainkey? Je to konstrukce RR, kterou hledá v DNS přijímací email server, když narazí na hlavičku DKIM-Signature, ve které je uveden Selector z konfiguračního souboru. V našem případě je to string “default”. Za tento string se přidá string _domainkey.

Záznam začínající na _asdp je záznam, který souvisí se stejnojmenným rozšířením DKIM a který definuje v tomto případě, které emaily mají být podepsány. Jak je vidět, tento záznam nepoužívá selector a tedy vidí jej i emailové servery, kterým nepřišel email s hlavičkou DKIM-Signature a pokud mají DKIM implementován a s těmito záznamy pracují, vědí, jak se mají k nepodepsaným emailům chovat. Místo “all” (což znamená, že odesílající server podepisuje všechny emaily a tudíž nepodepsaný email je podezřelý, ale zahazovat jej nutně nemusí) by bylo možné použít i string “discard”, což by pro přijímací server znamenalo v případě, že email není podepsán, že jej má zahodit.

V SPF záznamech znamenají položky, které začínají “+” povolené odesilatele (majitelem domény) pro danou doménu a “-” naopak zakázané.

Nezapomeneme inkrementovat Serial Number v SOA záznamu v zónovém souboru a provést příkaz:

rndc reload 

který způsobí znovunačtení zóny a pokud ji máme podepsanou podle článku o DNSSEC, tak i podepsání.

Pro ověření existence všech záznamů použijeme následující příkazy:

dig +short default._domainkey.podepisovana.cz TXT @localhost
dig +short @localhost TXT podepisovana.cz
dig +short @localhost SPF podepisovana.cz

Pokud chceme zkontrolovat i podepsání všech těchto záznamů, připojíme k příkazu parametr +dnssec.

Do souboru /etc/postfix/main.cf na konec přidáme řádky:

smtpd_milters           = inet:127.0.0.1:8891
non_smtpd_milters       = $smtpd_milters
milter_default_action   = accept
milter_protocol         = 2

provedeme pomocí příkazů:

systemctl enable opendkim.service
systemctl start opendkim.service
systemctl restart postfix.service

Pošleme email z našeho serveru na jiný a naopak. Pokud posíláme poštu na náš server a kontrolujeme podepisování, použijeme samozřejmě server, který DKIM používá také.

Můžeme také použít URI: http://dkimcore.org/tools/, kde je tool pro kontrolu DKIM záznamů. Také lze využít test zasláním emailu na adresu: autorespond+dkim@dk.elandsys.com nebo autorespond+dkim-relaxed@dk.elandsys.com v našem případě.

  • obsah/bezpecnost/centos_opendkim.txt
  • Last modified: 2018/10/17 22:03
  • by profors