OpenDMARC kasutamine operatsioonisüsteemiga Debian
Sissejuhatus
DMARC (Domain-based Message Authentication, Reporting & Conformance) https://dmarc.org/ ... OpenDMARC http://www.trusteddomain.org/opendmarc/ ...
Mõisted
- DMARC - Domain-based Message Authentication, Reporting & Conformance
- SPF -
- DKIM -
- milter - mail filter
- mail from - smtp protokolli ümbriku 'MAIL FROM' ehk RFC5321.MailFrom ehk envelope
- header from - kirja sisu From: päis, ehk RFC5322.From ehk header
- ADSP (Author Domain Signing Practices) - https://en.wikipedia.org/wiki/Author_Domain_Signing_Practices kunagi soovitati, enam mitte ja soovitatakse DMARC kasutajatel ignoreerida
- SRS
Tööpõhimõte
DMARC abil saab domeeni omanik teha teatavaks, kuidas tema domeenilt pärit (või justkui pärit) kirjade vastuvõtjad peavad peale SPF ja DKIM kontrolle nende kontrollide tulemusi kasutama ja kirju edasi käsitlema. Seega DMARC edukaks kasutamiseks on vaja osaliste vahel koostöö, selle realiseerimine toimub mitmes osas
- DNS abil DMARC kirje publitseerimine
- DNS abil DKIM kirje publitseerimine
- DNS abil SPF kirje publitseerimine
- kirja väljasaatmine DNS SPF kirjega kooskõlaliselt ip aadressilt
- välja saadetavale kirjale DKIM signatuuri lisamine
- 'mail from' ja 'header from' aadressides sama domeeninime kasutamine; ja mis on kooskõlas DKIM ja SPF kirjetega
- saabunud kirjale DMARC kirje abil teatavaks tehtud reeglite rakendamine
Põhimõtteliselt kasutatakse DMARC'i alati koos DKIM ja SPF tehnikatega. Võiks ette kujutada, et DKIM ja SPF on puhtalt instrumendid, mille abil saab mingeid tegevusi teha; aga DMARC on policy ehk reegel, mis ütleb kuidas konkreetsel juhtumil (domeeni jaoks ja käesoleval ajal) DKIM ja SPF kontrollide tulemusi rakendada.
Väited
- DMARC domeen on 'header from' eposti aadressis kasutatud domeeninimi, st selle peale toimub 'dig _dmarc.moraal.ee txt' päring
- kui DMARC kontekstis kasutatakse SPF'i, siis osutub, et 'mail from' ja 'header from' aadresside domeeni osad peavad kokku langema
- DMARC kontrolli õnnestumiseks peab õnnestuma vähemalt üks, kas SPF või DKIM kontroll (või mõlemad)
DMARC policy rakendamiseks sobib Postfix puhul milter tarkvara opendmarc. Tehniliselt on võimalik opendmarc abil rakendada policy täpselt nii nagu öeldud, nt reject st kontrolli mitte läbinud kirju ei võeta vastu. Kuna nt listserverid on tuntud DKIM lõhkujad (nt nad lisavad kirjade sisu osa lõppu listi signatuuri vms), siis võib olla mõistlikum DMARC kontrolli alusel lisada rohkem või vähem spämmi skoori kirjale.
Kirja väljasaatmine
Kirja väljasaatmisel ei tegele ükski nn DMARC protsess otseselt kirjaga. Küll aga DKIM signatuur lisatakse ja seda vastuvõtja DMARC kasutamisel kasutab.
Tööpõhimõte
Kui oma domeeni eposti on seadistatud kontrollima DMARC, tuleb ise saata kirju välja selliselt, et neid on võimalik vastu võtta
- publitseerida SPF kirje ja saata kirju vastavalt ip aadressilt ja vastava 'mail from' ja 'header from' aadressiga
- publitseerida DKIM kirje st võti ja kirju allkirjastada
Tõenäoliselt korrektselt käivitatud vastuvõtja jaoks piisab kirja vastuvõtmiseks üks või teine kontroll. Seejuures piisab ühe kontrolli õnnestumisest, teine võib olla kirjeldamata ja tegemata; või kirjeldatud, tehtud aga valesti tehtud, st teise kontroll ebaõnnestub. Tundub, et GMail on eeskujulik avalik teenusepakkuja, kus on hea kirju vastu võtta ja testida saatmist ja vastuvõtmist.
DNS kirje publitseerimine
Kõige lihtsam DMARC DNS kirje on nt selline (\ märk on seotud dig väljundi näitamisega, iseenesest seda tsoonifailis ei ole)
$ dig _dmarc.moraal.ee txt _dmarc.moraal.ee. 60 IN TXT "v=DMARC1\; p=none"
kus
- _dmarc.moraal.ee - tegu on domeeni moraal.ee kohta käiva DMARC kirjega
- v=DMARC1 - tegu on DMARC TXT kirjega
- p=none - policy on 'none'; alternatiiv ja perspektiiv oleks 'reject'
SPF
- publitseerida SPF kirje
- saata kirju välja SPF kirjele vastavalt ip aadressilt
- kasutada välja saadetud kirjade 'mail from' 'header from' aadresside domeeninime kooskõlaliselt SPF kirjega
DKIM
- publitseerida DKIM kirje st avalik võti
- juurutada OpenDKIM abil signeerimine lokaalse Postfix protsessi jaoks
Testimine - kirja vastuvõtmine GMail keskkonnas
Kõigi kontrollide õnnestumisel paistab GMail rakenduses selline pilt
Testimine
- töötada erinevate 'mail from' ja 'header from' aadressidega
$ sendemail -f imre@moraal.ee -t imre@auul.pri.ee -u 'test 109' -m 'test 109' -s 127.0.0.1 -o tls=no -o message-header="From: Imre <imre@moraal.ee>"
- lülitada lokaalselt töötavas Postfix protsessis sisse ja välja DKIM signeerimist
- muuta nimesüsteemis DMARC ja SPF kirjete sisu (nt DMARC p=none ja p=reject vahel)
- kasutada lisaks teiste Postfix protsesse (nt teises arvutis), mis rikub ära DKIM signatuuri kirjutades üle Subject väärtuse
Kirja vastuvõtmine
Kirja vastuvõtmisel DMARC kasutamise tulemuseks võiks olla kirja selline vastuvõtt nagu vastava domeeni omanik (mis esineb kirja 'header from' eposti aadressina) on seda ette näinud. Praktiliselt võiks siseneva eposti spammi skoor vastavalt halveneda või paraneda. Kirja vastuvõtmisel peab praktiliselt arvestama, et kui domeeni omanik on saatnud kirja kuhugi listi ja see jõuab seda kaudu vastuvõtjani, siis listimootor on piisavalt kirja muutnud ja enam ei õnnestu ei DKIM ega SPF kontroll.
Tööpõhimõte
Üldiselt võiks kirja vastuvõtmisel toimuda sellised sammud ja sellises järjekorras
- SPF kontroll
- DKIM kontroll
- DMARC kontroll
- Spamassassin kontroll
Kõik eelnevad arvutavad oma tulemused ja ükski kirja ei blokeeri. Spamassassin võtab tulemused kokku ja kui spam skoor on liiga suur (nt 15), siis kirja vastuvõtmine blokeeritakse. Igal juhul lisavad kõik kontrollid kirjale omalt poolt päised.
SPF
SPF kontrolli rakendamist kirjeldatakse punktis https://www.auul.pri.ee/wiki/SPF_kasutamine_tarkvaraga_Postfix_operatsioonis%C3%BCsteemis_Debian
Tulemusena on kirjale lisatud selline päis (kui kontroll iseenesest õnnestus (nt opendkim protsess ei krahhinud) ja lõppes positiivselt (Received-SPF: Pass ..))
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=10.80.127.3; helo=smtp-eesti-fwd-2a.test.kit; envelope-from=forwarder@test.eesti.ee; receiver=imre@auul.pri.ee
DKIM
DKIM kontrolli rakendamist kirjeldatakse punktis https://www.auul.pri.ee/wiki/OpenDKIM_kasutamine_Postfixiga
Tulemusena on kirjale lisatud selline päis (kui kontroll lõppes positiivselt)
Authentication-Results: mail.auul.pri.ee; dkim=pass reason="2048-bit key; secure key" header.d=moraal.ee header.i=@moraal.ee header.b=NzuLt8wP; dkim-adsp=pass; dkim-atps=neutral
OpenDMARC tarkvara paigaldamine
# apt-get install opendmarc
TODO
- /etc/default/opendmarc
- /etc/opendmarc.conf
Seadistamine ja käivitamine
# cat /etc/default/opendmarc SOCKET="inet:54321"
# egrep -v "^$|^#" /etc/opendmarc.conf PidFile /var/run/opendmarc.pid RejectFailures false Syslog true SyslogFacility mail UMask 0002 UserID opendmarc:opendmarc IgnoreHosts /etc/opendmarc/ignore.hosts
kus
- TODO
- /etc/opendmarc/ignore.hosts fail sisaldab
# cat /etc/opendmarc/ignore.hosts 192.168.1.0/24 192.168.10.0/24
Käivitamiseks sobib öelda
# systemctl start opendmarc
Postfix integratsioon
Postfix seadistuses peab DMARC milter asuma peale SPF ja DKIM ja enne Spamassassinit, nt
# MILTERS: CLAMAV, SPAMASSASSIN smtpd_milters = unix:/clamav/clamav-milter.ctl, inet:localhost:8892, inet:localhost:54321, unix:/spamass/spamass.sock milter_default_action = accept milter_protocol = 2 non_smtpd_milters = inet:localhost:8892, inet:localhost:54321
Lisaks võib olla mõistlik muuta internetist tulnud kirja küljes olevad sinna kogunenud Authentication-Results päised ära nö informatiivseteks
# cat header_checks.regexp /^Authentication-Results:[[:space:]]+(.*)/ REPLACE X-MORAAL-Original-Authentication-Results: ${1}
ja main.cf
header_checks = regexp:/etc/postfix/header_checks.regexp
Spamassassin integratsioon
# cat /etc/spamassassin/local.cf .. # dmarc header DMARC_PASS Authentication-Results =~ /mail.auul.pri.ee; dmarc=pass/ describe DMARC_PASS DMARC validation seems pass score DMARC_PASS -1.1 header DMARC_NONE Authentication-Results =~ /mail.auul.pri.ee; dmarc=none/ describe DMARC_NONE DMARC validation seems none score DMARC_NONE 0 header DMARC_FAIL Authentication-Results =~ /mail.auul.pri.ee; dmarc=fail / describe DMARC_FAIL DMARC validation fail score DMARC_FAIL 3.7
Kasulikud lisamaterjalid
Logi kasutamine
DMARC paistab mail logis sedasi
# grep dmarc /var/log/mail.log | tail -n 5 Jul 27 23:54:26 post-relay opendmarc[31184]: A7B9562B29: liferay.com none Jul 27 23:56:47 post-relay opendmarc[31184]: EB3E562B29: faceboomail.com pass Jul 28 00:00:26 post-relay opendmarc[31184]: D5F4962B29: ee.aso.ee none Jul 28 00:04:02 post-relay opendmarc[31184]: 720BA62B29: iizi.ee none Jul 28 00:06:22 post-relay opendmarc[31184]: B000C62B29: gmail.com pass
Testimine
Testimiseks sobib nt võltsida facebootmail.com domeeni kirja
$ sendemail -f priit@facebookmail.com -t imre@auul.pri.ee -u priit -m 'test' -o tls=no Jul 27 23:22:35 haldus sendemail[19668]: Email was sent successfully!
ja logis paistab see
Jul 27 23:22:35 post-relay opendmarc[31184]: B1CBE62B29: facebookmail.com fail
Eposti kirjas paistab muude päiste hulgas nt selline
Authentication-Results: mail.auul.pri.ee; dmarc=pass header.from=facebookmail.com
Külastada aadressi https://www.mail-tester.com/.
Remailer
DMARC töötamise remaileri kasutamise juhul saab lahendada SRS abil, vt SRS tarkvara postsrsd kasutamine Postfix keskkonnas.
Reporting
DMARC Reporting töötab kahes suunas
- domeeni omanikule saadavad 'kõik teised' kirju tema domeeni kirjade osas
- postimasina pidaja saadab kirju 'kõigile teistele' nende domeenide kirjade osas
Domeeni omanikule saadetakse kirju
Selleks, et domeeni omanikule saadaksid 'kõik teised' kirju piisab seadistada dmarc kirje juures parameetrid
- TODO
Postimasina pidaja saadab kirju
Selleks, et postimasina pidaja saaks 'kõigile teistele' kirju saata, tuleb panna opendmarc protsess salvestama reaga
HistoryFile /var/run/opendmarc/opendmarc.dat
ning seejärel
- laadida regulaarselt opendmarc.dat failist sisu mysql andmebaasi
- genereerida baasist väljavõte ja postitada domeeni omaniku poolt _dmarc kirjes näidatud eposti aadressile
Andmebaasi tekitamine
mysql> create database opendmarc character set utf8 collate utf8_general_ci; mysql> grant all privileges on opendmarc.* to 'opendmarc'@'%' identified by 'parool'; mysql> grant all privileges on opendmarc.* to 'opendmarc'@'localhost' identified by 'parool';
$ mysql -h 192.168.1.18 -u opendmarc -pparool opendmarc < /usr/share/doc/opendmarc/schema.mysql
Tundub, et sellise skriptiga saab sooritada opendmarc.dat faili sisu baasi laadimine, baasist väljavõtte tegemine ja kirjade laiali saatmine
# cat /opt/opendmarc/opendmarc-send-reports.sh #!/bin/bash # Imports data from OpenDMARC's opendmarc.dat file into a local MySQL DB # and sends DMARC failure reports to domain owners. # Based on a script from Hamzah Khan (http://blog.hamzahkhan.com/) set -e # Database and History File Info DBHOST='192.168.1.18' DBUSER='opendmarc' DBPASS='parool' DBNAME='opendmarc' HISTDIR='/var/run/opendmarc' HISTFILE='opendmarc' # Make sure history file exists touch ${HISTDIR}/${HISTFILE}.dat # Move history file temp dir for processing mv ${HISTDIR}/${HISTFILE}.dat /tmp/${HISTFILE}.$$ # Import temp history file data and send reports /usr/sbin/opendmarc-import -dbhost=${DBHOST} -dbuser=${DBUSER} -dbpasswd=${DBPASS} -dbname=${DBNAME} -verbose < /tmp/${HISTFILE}.$$ /usr/sbin/opendmarc-reports -dbhost=${DBHOST} -dbuser=${DBUSER} -dbpasswd=${DBPASS} -dbname=${DBNAME} -verbose -interval=60 -report-email 'dmarc-src@moraal.ee' -report-org 'MORAAL' /usr/sbin/opendmarc-expire -dbhost=${DBHOST} -dbuser=${DBUSER} -dbpasswd=${DBPASS} -dbname=${DBNAME} -verbose # Delete temp history file # rm -rf *.$$
Käivitamine
# ./opendmarc-send-reports.sh opendmarc-import: started at Sat Feb 18 13:02:23 2017 opendmarc-import: connected to database opendmarc-import: updating at line 20 opendmarc-import: updating at line 39 ... opendmarc-import: updating at line 296 opendmarc-import: updating at line 314 opendmarc-import: terminating at Sat Feb 18 13:02:31 2017
Visualiseerimine
Tundub, et 2017 aasta alguses puuduvad üldkasutatavad DMARC raportite visualiseerimise vahendid
- midagi on loetletud aadressil https://dmarc.org/resources/code-and-libraries/
- kommerts online teenused, https://dmarcian.com/dmarc-xml/
Misc
- domeeni dmarc seadistuse küsimine
# /usr/sbin/opendmarc-check auul.pri.ee DMARC record for auul.pri.ee: Sample percentage: 100 DKIM alignment: relaxed SPF alignment: relaxed Domain policy: none Subdomain policy: unspecified Aggregate report URIs: (none) Forensic report URIs: (none)
Probleemid
- Tundub, et Ubuntu v. 14.04 paketihaldusest kasutades v. 1.2.0 sureb vahel ära
Feb 18 23:31:20 smtp-2b kernel: [184737.524702] opendmarc[22879]: segfault at 8 ip 0000000000407684 sp 00007ff3cbba4ec0 error 4 in opendmarc[400000+10000]
2019 aasta DMARC kasutamise praktika kirjade vastuvõtmisel
Tundub, et kõige otsekohesem on talitada selliste põhimõtete alusel
- opendmarc protsess on seatud tööle rejectivas režiimis
- kui domeeni omanik on publitseerinud oma domeeni policy 'reject', siis vastuvõttes kirju
Kasulikud lisamaterjalid
- DKIM kasutamine
- SPF kasutamine tarkvaraga Postfix operatsioonisüsteemis Debian
- https://dmarc.org/
- https://en.wikipedia.org/wiki/DMARC
- http://www.kitterman.com/dmarc_asst.py
- https://www.skelleton.net/2015/03/21/how-to-eliminate-spam-and-protect-your-name-with-dmarc/
- https://www.stevejenkins.com/blog/2015/03/installing-opendmarc-rpm-via-yum-with-postfix-or-sendmail-for-rhel-centos-fedora/
- https://www.zone.ee/blogi/2016/06/10/spf-dkim-dmarc-zone/