Ján Fečík


osobná stránka · blog

Dátum: sobota, 20. apríla 2024
Čas: 13:33:18, 1713612798, @523
Meniny má: Marcel, Hvezdoň
IP adresa: 18.224.51.168

Ako skrotiť DKIM na VPS od Websupportu

Najväčším problémom elektronickej pošty je ten fakt, že ktokoľvek môže pri odosielaní emailu používať ľubovoľnú adresu, ktorá mu nemusí vôbec patriť. Existuje niekoľko systémov, ktoré pomáhajú príjemcom pošty určiť, či je odosielateľ oprávnený použiť konkrétnu adresu, alebo nie. Jednou z nich je aj DKIM (DomainKeys Identified Mail), ktorý ale nie je žiadnou novinkou a niektorí poskytovatelia ho už niekoľko rokov používajú. Jedná sa o technológiu podobnej SPF, pričom DKIM má ale jednu zásadnú výhodu a to, že SPF spojuje doménu odosielateľa s konkrétnymi IP adresami z ktorých môže pošta odchádzať. DKIM používa elektronický podpis, ktorý je generovaný na serveri odosielateľa a nie je pritom v žiadnej spojitosti s konkrétnou IP adresou.

Život študenta na vysokej škole  ·  Akrylový štukový tmel od Den Braven

DKIM sa prejavuje len pridaním hlavičky DKIM-Signature, ktorá obsahuje elektronický podpis generovaný SMTP serverom odosielateľa. Čiže nekladie žiadne nároky na koncového používateľa a na rozdiel od klasických elektronických podpisov nemusí koncový používateľ vôbec nič riešiť. Napríklad platnosť certifikátu či samotná podpora väčšinou koreňového certifikátu v emailovom klientovi ak pochádza daný certifikát od menej známej autority. S tým som sa stretol najčastejšie a potom aj samotná podpora certifikátu hlavne pri freemailových serveroch, poďme ale priamo k veci.Ako skrotiť DKIM na VPS od WebsupportuRiešil som na VPS od Websupportu to, aby emaily odoslané priamo z VPS obsahovali aj platný DKIM. Ak si dobre pamätám, tak ich Ubuntu LAMP verzia obsahuje mimo Apache, MySQL, PHP, OpenSSH, ProFTPd, Webmin, phpMyAdmin aj to najdôležitejšie v kontexte tohto článku a to je samotný Postfix, ktorý slúži na odosielanie emailov. Je tam proste nachystané všetko základné čo vlastný web server potrebuje. Samotný problém spočíva ale v tom, že emaily odoslané z VPS neobsahujú platný DKIM a to ma celkom dlhú dobu iritovalo. DKIM síce nie je nejaká antiSPAM či antiFICO ochrana, ale môže dopomôcť k tomu, aby odoslaný email neskončil u príjemcu v SPAMe a bude mať tým pádom vyššiu dôveryhodnosť u príjemcu.

Takže si v prvom rade nainštalujeme opendkim cez príkaz:

apt-get install opendkim opendkim-tools

Následne pridáme do /etc/opendkim.conf našu doménu:

Domain domena.sk
KeyFile /etc/postfix/dkim.key
Selector dkim
SOCKET inet:8891@localhost

Ďalej pridáme do /etc/default/opendkim:

SOCKET="inet:8891@localhost"

A nakoniec pridáme do samotného Postfixu v /etc/postfix/main.cf:

# DKIM
# --------------------------------------
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Inštalácia a konfigurácia nie je vôbec zložitá ako vidieť a myslím si že to zvládne akýkoľvek menej skúsený linuxák. Ako je vidieť v konfigurácii OpenDKIM, je tam cesta k dkim.key. Jedná sa o asymetrickú šifru s privátnym a verejným kľúčom na dešifrovanie. Privátny kľúč, čo je ten náš dkim.key je na samotnom serveri, ku ktorému nemá nikto verejný prístup a verejný kľúč je súčasťou DNS záznamu aby sa dala overiť pravosť prijatého emailu. Čiže v jednoduchosti, ak odoslaný email podpísaný pomocou DKIM a jeho verejný kľúč súhlasia, tak tým sa zvyšuje tá dôveryhodnosť odoslaného emailu. Čiže sa jedná o celkom dosť účinný nástroj na overenie, či správa skutočne pochádza od zdroja, ktorý je uvedený ako odosielateľ alebo nie. Takže v spojitosti s SPF sa dá pomerne dobre chrániť emailovú adresu pred zneužitím falošným odosielateľom, čo v prípade odoslaného emailu na VPS od nie len Websupportu, ale na akomkoľvek VPS či dedikovanom serveri je v podstate každý z pohľadu príjemcu. Správne nastavený SPF a DKIM znižuje tým pádom riziko, že odoslané emaily zo servera budú chybne označené ako SPAM a naopak, nepodpísane emaily pomocou DKIM v kombinácii s neovereným serverom odosielateľa budú na strane príjemcu pre zmenu vyhodnotené ako SPAM.

Samozrejme ako server príjemcu s overenou či neoverenou správou naloží je na ňom, keďže DKIM rieši len samotné overenie pravosti, ale obvykle platí že správny DKIM podpis zvýhodní taký email v spam filtroch, bonusové body v SpamAssassin a podobne. Klienti príjemcov môžu trebárs potom používateľovi zvýrazniť takto overený email. Je to podobné ako pri HTTPS, dáte používateľovi jasne najavo, že konkrétny email je overený a pochádza od správneho odosielateľa.

Takže teraz si potrebujeme vygenerovať jeden pár kľúčov, privátny a jeho verejný kľúč. To si spravíme nasledovne:

opendkim-genkey -t -s dkim -d domena.sk

Takto sa nám vygeneroval privátny kľúč dkim.private a verejný kľúč nájdeme v dkim.txt. Privátny kľúč presunieme na správne miesto príkazom:

mv dkim.private /etc/postfix/dkim.key

Následne reštartujeme OpenDKIM a Postfix:

service opendkim start
service postfix restart

Teraz už pri odosielaní emailu pridá Postfix aj hlavičku DKIM-Signature, ktorá bude obsahovať elektronický podpis. Čiže prvú časť máme za sebou a presunieme sa k druhej časti. Zostal nám súbor dkim.txt v ktorom sa nachádza verejný kľúč a ten je nutné pridať ako DNS TXT záznam. Ak sa vrátime k /etc/opendkim.conf čo je vyššie, tak je tam uvedený aj Selector. Websupport túto vec rieši automaticky pri webhostingu a tým pádom každý email odoslaný cez ich SMTP server obsahuje aj platný DKIM a jeho verejný kľúč je tiež uložený ako DNS TXT záznam.

Tu nastáva jeden problém, na VPS môžeme mať doménu/y pre nejakú web službu, rôzne stránky a pod., ale emailové schránky vytvorené či už cez ich Server Manager, alebo webhosting odosielajú emaily cez ich SMTP server. Toto sa samozrejme netýka len Websupportu, VPS môže byť aj u niekoho iného, je to úplne jedno. Ak si pozrieme DNS TXT záznamy k danej doméne, ktorú chceme prevádzkovať na VPS tak pri nej už nejaký DNS TXT záznam nájdeme. Záznam je vždy definovaný na vlastnej subdoméne _domainkey a pred ním je daný selektor, ktorý vyššie spomínam. Websupport používa selektor mail, čiže celý záznam vyzerá mail._domainkey.domena.sk. Tento DNS TXT záznam nemôžeme zmazať, bude slúžiť pre emaily odoslané cez SMTP server Websupportu. Vytvoríme si teda nový DNS TXT záznam s našim selektorom vyššie:

dkim._domainkey.domena.sk

Teraz je čas na súbor dkim.txt v ktorom sa nachádza verejný kľúč. Čiže v ňom vyberieme celý reťazec začínajúci na "p=......" a celá hodnota bude vyzerať nasledovne:

v=DKIM1; k=rsa; p=Ma6K2STv3...(tu sa bude nachádzať celý reťazec z dkim.txt)

Nový záznam následne už len uložíme.Ako skrotiť DKIM na VPS od WebsupportuEmail odoslaný cez emailovú schránku, ktorá ide cez SMTP server Websupportu sa bude naďalej overovať cez mail._domainkey.domena.sk a emaily odosielane z VPS sa vďaka definovanému selektoru v konfiguračnom súbore /etc/opendkim.conf budú overovať na dkim._domainkey.domena.sk.

V prípade, že je na danom VPS viac domén (to je aj môj prípad), tak jedno z najjednoduchších riešenie je v konfiguračnom súbore /etc/opendkim.conf zmeniť pri Domain hodnotu domena.sk na * (hviezdičku). Takto docielime to, že email odoslaný z akejkoľvek domény bude podpísaný jedným privátnym kľúčom. Ďalej bude samozrejme nutné pri každej doméne ktorá je na VPS pridať aj DNS TXT záznam s verejným kľúčom čo je v dkim.txt, takže napríklad pre:

dkim._domainkey.domena1.sk
dkim._domainkey.domena2.sk
dkim._domainkey.domena3.sk

Bude každá z nich obsahovať tu istú hodnotu:

v=DKIM1; k=rsa; p=Ma6K2STv3...(tu sa bude nachádzať celý reťazec z dkim.txt)

Samozrejme najlepšie je pre každú doménu vygenerovať vlastný privátny a verejný kľúč. Problém je ale v tom, že sa to nedá nejako zautomatizovať, keďže treba vždy manuálne pridať aj DNS TXT záznam s verejným kľúčom k danej doméne a v prípade trebárs 200 domén by to bolo asi dosť neprehľadné mať ku každej doméne svoj vlastný privátny kľúč. Čiže takto sa to dá zjednodušene ojekabátiť a ak všetky domény patria vám, tak je to aj tak jedno, že budú mať všetky rovnaké kľúče.

Aj keď DKIM nie je žiadna antiSPAM či antiFICO ochrana, tak je predovšetkým využívaný ako nástroj na boj s nevyžiadanou poštou, je to len taký bonus pri filtrácii spamu. Samozrejme aj SPAM môže byť podpísaný pomocou DKIM, ale našťastie by boli pevne zviazané s konkrétnou doménou a tú by bolo možné potom ľahko filtrovať. DKIM je zaujímavý predovšetkým svojou jednoduchosťou a bezproblémovým nasadením. Keď som sa o to začal viac zaujímať, tak mi spočiatku vstávali vlasy hore dupkom, že WTF? Keď sa ale nad tým človek zamyslí a aspoň trochu chápe problematike, tak sa na tej jednoduchosti len zasmeje :-)

Neskôr som riešil DKIM aj na novšom Ubuntu, postupoval som rovnakým spôsobom ako opisujem vyššie, ale odoslané e-maily nemali v hlavičke DKIM podpis. Dopracoval som sa k tomu, že bolo potrebné ešte spustiť opendkim.service.generate

/lib/opendkim/opendkim.service.generate
systemctl daemon-reload
service opendkim restart

Následne odoslaný e-mail už obsahoval aj DKIM podpis a bolo všetko v poriadku.

Článok bol zobrazený 15712 krát a obsahuje 1371 slov
Pridané 14. júla 2017