Nastavení DKIM na VPS

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