DKIM ja DMARC

Allikas: Kuutõrvaja
Redaktsioon seisuga 24. november 2020, kell 13:41 kasutajalt Aus (arutelu | kaastöö)

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"

DMARC kontrollib kirja From: (header from) päist. SPF kontroll käib aga ümbriku saatja (envelope from) pihta. Kui need domeenid erinevad ja kirjal DKIM allkirja pole, siis DMARC kontroll ebaõnnestub!

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, formaat mailto:dmarcreports@example.com.
  • ruf= - detailsem analüüs DMARCi kohta, peab olema samas domeenis mille kohta DMARC kirje on, formaat mailto:dmarcreports@example.com.

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