DKIM ja DMARC
DKIM ja DMARC on kaks venda kolmest (kolmas on SPF, millel on eraldi peatükk SPF_kasutamine_Postfixiga), mida loetakse tänapäeva moodsa e-mailinduse kaitsjateks.
DKIM tähendab DomainKeys Identified Mail DMARC tähendab Domain-based Message Authentication Reporting and Conformance
Näites on kasutatud Arch Linuxit, Postfixi ja OpenDKIM ja OpenDMARC tarkvarasid. Eeldatud on, et Postfix on juba esialgselt seadistatud.
DKIM
DKIM mõte on selles, et väljuvatele kirjadele pannakse päisesse lisainformatsioon kirja allkirjastamise kohta. Käesoleval hetkel kasutatakse RSA võtmeid (vaikimisi 1024bit). Väga suuri võtmeid ei soovitata kasutada, kuna avalik võti ei pruugi ära mahtuda UDP vastusesse*. Lisaks võib suurem võti põhjustada suurt koormust arvuti protsessorile (olenevalt muidugi kirjade "käibest"/mahust).
DKIM seadistamisel on alustuseks vaja DKIMi takrvara seadistada ja seejärel nimeserverisse lisada oma domeenile TXT kirje (kui soovid ise ka allkirjastama hakata väljuvaid kirju). TXT kirje peab olema kujul: selector._domainkey.uusdomeen.ee ja selle sisu
"v=DKIM1; k=rsa; s=email;" "p=avalik võti base64 encodingus"
* - Siit tuleb ka välja UDP vastuse mõte - kuna DNS päringud on UDP, siis peab kogu TXT päring mahtuma UDP vastusesse ära.
TXT kirje komponendid
- v= - versioon, hetkel ainuke valiidne väärtus DKIM1
- k= - võtmetüüp, hetkel ainuke valiidne väärtus rsa
- s= - teenuse tüüp, vaikimisi on "*", võimalik ka "email"
- p= - avalik võti base64 encodingus
"Lihtsam" kirjaviis oleks:
"v=DKIM1; p=võti..."
DKIMi puhul lähtutakse kahest eraldi kirja mõlemast sektsioonist: header ja body. Mõlema jaoks on võimalik reegel kirjutada - kas range/leebe.
OpenDKIM seadistamine
Paigalda DKIM tarkvara kasutades pakihaldust
pacman -Sy opendkim
Tekib töötav konfiguratsioonifail
/etc/opendkim/opendkim.conf
Tutvu sellega ja seadista vastavalt.
Konfiguratsioon
Vaikimisi töötab opendkim sign ja verify režiimis. Seda saad muuta Mode parameetriga:
- sv - sign + verify
- v - verify
- s - sign
Vaikimisi piisab verify režiimist, sellisel juhul valideeritakse ainult sissetulevaid kirju. Kui soovid ka oma domeene allkirjastada, pead kasutama sign režiimi lisaks.
Verify töötab ilma lisaseadistuseta. Veendu vaid, et nimelahendus töötab. ;)
Lisks on olulised konfiguratsiooniparameetrid SigningTable, KeyTable ja InternalHosts.
- SigningTable - sisaldab saatjadomeeni ja võtme vastavust.
- KeyTable - sisaldab iga selectori ja domeeni paari ning privaatvõtme asukohta.
- InternalHosts - sisaldab domeene/IP-sid, millelt tulnud kirju signeeritakse (ülejäänusid ainult verifitseeritakse).
Canonicalization määrab ära kuidas suhtutakse header/body muutumisse. Ehk siis vaikimisi on rangem režiim (simple/simple). See tähendab, et header/body puhul ei lubata peaaegu mingit ümberkirjutamist. Soovitusi on kahtepidiseid, aga siin näites on arvestatud pigem sellega, et päiseid võib ümber kirjutada (relaxed) ja sisu mitte (simple)
# kirja header/body jaoks - väärtused simple või relaxed Canonicalization relaxed/simple
Socket või IP
Kui DKIMile tullakse ligi vaid kohalikust masinast, siis on mõistlik kasutada socketit. IP peale konfigureerides pead veenduma, et sinna ei saa keegi võõras ligi (vastasel juhul saab ta sinna ju saata oma soovitud kirja allkirjastamiseks jmt "jubedusi" teha).
Selle jaoks konfigureeri vastavalt soovile:
#Socket inet:8891@localhost Socket local:/run/opendkim/opendkim.sock
Näites siis tehakse socket asukohta /run/opendkim/opendkim.sock
NB! Seda pead kasutama pärast ka Postfixi konfiguratsioonis.
Selleks, et postfix saaks opendkimile ligi on soovituslik opendkim lisada postfix gruppi:
usermod -a -G postfix opendkim
Sellisel juhul on vaja ka konfiguratsioonis umask paika panna (et socketi õigused oleksid rwxrwx---)
UMask 007
Uue allkirjastatava tsooni lisamine
Lisa vajadusel InternalHost faili uus kirje.
Tekita võtmete jaoks uus kaust (kui juba pole) ja sinna alla loodava domeeni jaoks kaust, näiteks:
mkdir -vp /etc/opendkim/keys/uusdomeen.ee
Vaheta kausta
cd /etc/opendkim/keys/uusdomeen.ee
ja tekita uus tsoon käsuga
opendkim-genkey --restrict --domain uusdomeen.ee --bits 1024 --selector default
võid muuta väärtusi vastavalt vajadusele. Arvesta, et --bits on vaikimisi 1024. Kui kasutad konfis mingit muud MinimumKeyBits suurust, siis pead seda arvestama võtme loomisel.
Seepeale tehakse sulle kaks faili (--selector argumendile vastavalt): nimeserveri jaoks TXT kirje ja privaatvõti (default.private ja default.txt).
Muuda KeyTable faili, lisades sinna
default._domainkey.uusdomeen.ee uusdomeen.ee:default:/etc/opendkim/keys/uusdomeen.ee/default.private
Muuda SigningTable faili, lisades sinna
uusdomeen.ee default._domainkey.uusdomeen.ee
SigningTable faili puhul olen kohanud ka kirjapilti esimeses väljas *@uusdomeen.ee. Oleneb vist sellest, kas konfis on vaikimisi alamdomeenide allkirjastamine ka sees. Ülanäite puhul tehakse (kuna klapib), aga *@ näite puhul pigem mitte, sest et reegel kehtib vaid @uusdomeen.ee puhul (mitte @alamdomeen.uusdomeen.ee).
Mõlema faili puhul arvesta oma domeeni ja selectori ja kaustapuuga! :)
Nüüd mine oma nimeserveri haldusesse (või palu seda kellelgi teha) ja täienda seda TXT kirjega:
default._domainkey.uusdomeen.ee IN TXT ( "v=DKIM1; k=rsa; s=email; " "p=avalik_võti_base64_encodingus" ) ;
Olen kohanud ka kirjapilti ilma jutumärkideta. Sellisel juhul peaks kogu kirje olema ilma. Selles näites on mõlemad osad omaette jutumärkidega.
Kirja näidispäised
Ühe DKIMi poolt allkirjastatud näidiskirja päisest võib leida
DKIM-Filter: OpenDKIM Filter v2.10.3 mxfilter.uusdomeen.ee 861BF8005D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=uusdomeen.ee; s=default; t=1570605036; bh=LQZPc7Ca6aVneKHX25GlrXx4Xtkwjb0tLZwuCasB0MU=; h=From:To:Subject:Date; b=e2QagT5U4OjBPjTA7sHdGDAMR9R/UilD6TOsXavn5C3Kg49mIMZXsYF6XF30U5uS3 uB6GRQZwZDQR6C3R1adTSW4qlgTN3eZzREm8DhNthDTG4nsmucOdSNYsFkQBuTgShJ V5b/2kOyFAjEeiI9UqIf8gcy6F6uiJhOhKQLQG3Y=
h=From:To:Subject:Date;
Tunnetuslik selgitus hetkel, aga h= peaks näitama neid päiseid, mis olid olemas kirja allkirjastamise hetkel. RFC seletab keeruliselt?
Postfixiga integreerimine
Lisa Postfixi main.cf' faili
# DKIM reeglid smtpd_milters = unix:/run/opendkim/opendkim.sock non_smtpd_milters=$smtpd_milters milter_default_action = accept
Probleemid DKIMiga
Kui kasutad rohkem kui ühte väljuvat e-postiserverit sama domeeni kirjade saatmiseks (nt mailchip või mõni muu masspostitustööriist vmt), siis peaksid seadistama kõigile DKIMi kasutamise. Vastasel juhul on osad kirjad varustatud DKIMi päisega ja osad mitte. Kuna aga su nimeserverist tuleb DKIMi vastus - mis osutub valideerimisel valeks - võib saaja kirja kas minema visata või karantiini või junki panna.
DKIMi võtmeid võib olla rohkem kui üks ja neid saad (pead) eraldada selektoriga!
DMARC
DMARC (Domain-Based Message Authentication, Reporting & Conformance) on protokoll, mis ehitab ennast juba olemasolevate SPF ja DKIM protokollide peale lisades autori, domeeni nime, soovitused kirjade käitlemiseks ning võltskirjade eest kaitseks teated domeeni haldurile.
DMARC seadistatakse analoogselt kahe vennaga nimeserveris ja selle ilmestamiseks on _dmarc.uusdomeen.ee TXT kirje sisuga:
"v=DMARC1;p=reject;rua=mailto:dmarcreports@uusdomeen.ee;"
TXT kirje komponendid
- v= - versioon, hetkel ainuke valiidne väärtus DMARC1
- p= - policy/poliitika - soovitus, mida kirjadega teha
- rua, fo, rf, ri - vaata #Aruanded alampeatükki
NB! p= peab olema kohe peale v= parameetrit!
Aruanded
DMARC reeglite poolt on võimalik nendelt e-posti serveritelt aruannete küsimine, kuhu kirju on saadetud.
Aruannete (Raporting) kohta on neli väärtust TXT kirjes võimalik määrata:
- fo= - mille kohta aruandeid saadetakse
- rf= - raporti formaat
- ri= - intervall kui tihti raportit saadetakse (vaikimisi 24h)24h).
- rua= - raporti saatmise aadress, forumaat mailto:dmarcreports@example.com.
NB! rua domeen peaks olema samas domeenis!
OpenDMARC seadistamine
Paigalda pakihaldusest opendmarc pakk
pacman -Sy opendmarc
Tekib töötav konfiguratsioonifail
/etc/opendkim/opendkim.conf
Konfiguratsioon
Tutvu sellega ja seadista vastavalt. Soovituslik on example/esialgsed väärtused alles jätta. Konfiguratsioon on piisavalt self-explanatory.
Selleks, et opendmarc tarkvara töötaks Postfixiga samas grupis oleks mõistlik seadistada opendmarc service käivitusel:
mkdir -vp /etc/systemd/system/opendmarc.service.d/ cat > /systemd/system/opendmarc.service.d/override.conf <<EOT [Service] Group= Group=postfix EOT
Socket või IP
Kui DMARCile tullakse ligi vaid kohalikust masinast, siis on mõistlik kasutada socketit.
Selle jaoks konfigureeri vastavalt soovile:
# Socket inet:8893@localhost Socket unix:/run/opendmarc/opendmarc.sock
Näites siis tehakse socket asukohta /run/opendmarc/opendmarc.sock
NB! Seda pead kasutama pärast ka Postfixi konfiguratsioonis.
Selleks, et postfix saaks opendkimile ligi on soovituslik opendkim lisada postfix gruppi:
usermod -a -G postfix opendkim
Sellisel juhul on vaja ka konfiguratsioonis umask paika panna (et socketi õigused oleksid rwxrwx---)
UMask 007
Postfixiga integreerimine
Vaata ka OpenDKIM Postfixiga integreerimine.
Postfixi main.cf' faili tuleb lisada
# DKIM reeglid smtpd_milters = unix:/run/opendmarc/opendmarc.sock
Kui sul juba on olemas smtpd_milters muutuja, siis jäta opendkim ettepoole ja dmarc tahapoole.
Veendu, et sul oleks seadistatud ka:
non_smtpd_milters=$smtpd_milters milter_default_action = accept
Lingid
- Zone DKIM: https://help.zone.eu/kb/dkim/
- Zone DMARC: https://help.zone.eu/kb/dmarc-reeglid/
- OpenDMARC - http://www.trusteddomain.org/opendmarc/
- OpenDKIM - http://opendkim.org/
- DKIM RFC4871 - http://dkim.org/specs/rfc4871-dkimbase.html
- Abiks DMARC'i seadistamisel - https://www.kitterman.com/dmarc/assistant.html