Tento komunitní návod je aktuální k 20. 8. 2019.
DKIM (DomainKeys Identified Mail) slouží jako ochrana proti emailům s podvrženými emailovými adresami. SMTP server odesílatele vkládá do hlavičky elektronický podpis. Ten si může SMTP server příjemce ověřit oproti klíči, který je uložen jako TXT DNS záznam u domény, ze které byl email odeslán. SMTP server příjemce si poté může ověřit, zda SMTP server odesílatele může odesílat email pro danou doménu. Zjistí také, zda email nebyl během cesty k SMTP serveru příjemce nijak upraven.
Tento návod slouží k nastavení podepisování emailů SMTP serverem pomocí aplikace OpenDKIM. Předpokladem je nainstalovaný a funkční poštovní server postfix.
Instalace balíčků
CentOS 7
Balíček opendkim bohužel není součástí základního CentOS repozitáře. Budeme si tedy muset přidat repozitář EPEL (Extra Packages for Enterprise Linux). To provedeme spuštěním následujícího příkazu:
yum -y install epel-release
Následně si ověříme zda byl repozitář opravdu přidán:
yum repolist
Zobrazí se nám aktuálně používané repozitáře. Seznam by měl obsahovat !epel/x86_64, což je náš nově přidaný repozitář.
Nyní si už můžeme nainstalovat samotný opendkim:
yum -y install opendkim
Debian 8 ISP
U námi předinstalovaného balíčku Debian ISP stačí pouze nainstalovat opendkim balíčky
apt-get install opendkim opendkim-tools
Konfigurace
Otevřeme si soubor /etc/postfix/main.cf ve svém oblíbeném editoru a najdeme řádky smtpd_milters a non_smtpd_milters a přidáme na každý inet:127.0.0.1:8891. Pokud řádky neexistují, tak je přidáme
..... # smtpd_milters slouží pro filtrování emailu odeslaných přes smtpd, nám poslouží pro podepisování emailu odeslaných přes smtp smtpd_milters = inet:127.0.0.1:8891 # non_smtpd_milters slouží pro filtrování emailů, které nebyly odeslané přes smtpd, ale například přes sendmail popřípadě php funkci mail() non_smtpd_milters = inet:127.0.0.1:8891 .....
Následně si otevřeme soubor /etc/opendkim.conf a (pokud není prázdný) vymažeme jeho obsah a vložíme:
# nastavíme mód na podepisování (Sign) Mode s Syslog yes Canonicalization relaxed/simple # postfix s námi bude komunikovat na port 8891 Socket inet:8891@localhost Umask 002 # podepisujeme všechny domény Domain * Selector dkim KeyFile /etc/opendkim/keys/dkim.private OversignHeaders From
Dále vytvoříme adresář /etc/opendkim/keys, přepneme se do něj a vytvoříme klíč
mkdir -p /etc/opendkim/keys cd /etc/opendkim/keys opendkim-genkey --bits=2048 --selector=dkim --restrict --verbose
V tomto adresáři se nám vytvoří 2 soubory dkim.private (obsahuje privátní klíč) a dkim.txt(obsahuje TXT záznam ve formátu BIND).
Pro každou doménu, kterou budeme na serveru provozovat, vytvoříme záznam typu TXT s názvem dkim._domainkey.nazevdomeny.cz. Hodnotu TXT záznamu si poté zobrazíme takto:
cat dkim.txt | tr -d "\"\n\" \t" | sed -r "s/.*\((.*)\).*/\\1\n/"
Na výstupu dostaneme něco takového:
v=DKIM1;k=rsa;s=email;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkc/SUBjf8Ie2kye2JfcPpRegMhNAgVU/RInQjsMofcpLWbXKc5Jj3MYOlt/Gx6OphaUGLxzP6qg96dvDNprGJOfKXI82Wbz4mYyemZcCD9GSQrbjrD0qRb0sbjYLTz7k+QpVFT/f6qt/FGxdjidKxe2caIlj3kU6/3hf3cF0dUAF6FHrnX5fdDQVZMeBNJEKGz0wOPneJ576UKQCMxlpIG913AlzDO49BO6vy7NuKOs18QiWSVXeCwO1z9IdGdrvrgPHqYZDoX2BMkav4qiCdSYuwSqvfAytbY8lfeUR6/z7cK3Xf+EKu3t4XfwYmiGEyIx02DGJqQgp4woZCn2fMwIDAQAB
V naší administraci DNS záznamů do pole „název“ vyplníme dkim._domainkey a do pole data vložíme hodnotu, kterou jsme si zobrazili příkazem popsaným výše.
Jako poslední krok provedeme restart služeb postfix a opendkim a povolíme automatický start opendkim
systemctl restart opendkim postfix systemctl enable opendkim
Otestování
Nyní by měly všechny odeslané emaily být podepsány DKIM. Zkontrolovat to můžete například zasláním emailu na check-auth@verifier.port25.com. Do několika minut se nám pak vrátí zpráva obsahující následující tabulku (zajímá nás řádek „DKIM check: pass“)
========================================================== Summary of Results ========================================================== SPF check: pass DomainKeys check: neutral DKIM check: pass Sender-ID check: neutral SpamAssassin check: ham