OpenDKIM kasutamine Postfixiga
Sissejuhatus
OpenDKIM http://www.opendkim.org/ on vaba tarkvaraline DKIM (Domain Keys Identified Mail) http://en.wikipedia.org/wiki/DomainKeys_Identified_Mail 'sender authentication system' implementatsioon.
Käesolev tekst on läbi proovitud Debian v. 6 ja v. 7 operatsioonisüsteemi keskkonnas, kuid tõenäoliselt sobib ka mujal kasutamisel kasutada.
Tarkvara paigaldamine
Tarkvara paigaldamiseks sobib öelda, kusjuures opendkim deemon ei käivitu kuna vaikimisi ei ole kasutada vajalikku privaatset võtit
# apt-get install opendkim ... Starting OpenDKIM: opendkim: /etc/opendkim.conf: at least one selector and key required for signing mode opendkim.
Tulemusena lisatakse kasutaja:grupp opendkim:opendkim ning failisüsteemi
- /etc/opendkim.conf - peamine seadistusfail
- /etc/init.d/opendkim - käivitusskript
- /etc/default/opendkim - seadistusfail
- /usr/sbin/opendkim-testkey - salajase ja avaliku võtme vastavuse kontrollimise utiliit
- /usr/sbin/opendkim-genkey - võtmepaari genereerimise utiliit
- /usr/sbin/opendkim-convert-keylist
- /usr/sbin/opendkim - deemon
- /usr/sbin/opendkim-stats
- /usr/sbin/opendkim-genzone
- /usr/sbin/miltertest
- /usr/sbin/opendkim-testadsp
Lisaks tarkvara paigaldamisel moodustatud kataloogidele võiks tekitada kataloogi /etc/dkim, kus hoida võtmeid ja OpenDKIM tööks vajalikke täiendavaid seadistusfaile
# mkdir /etc/dkim
Kui mingil põhjusel katsetatakse lisaks ka dkim-filter tarkvara, siis tundub, et see kataloog võib olla neil ühine.
Võtmepaari genereerimine
Võtmepaari tekitamiseks sobib öelda
$ /usr/sbin/opendkim-genkey -b 1024 -d loomaaed.tartu.ee -D /etc/dkim -s default
kus
- -b - võtme pikkus
- -s - selektori nimi
- -d - domeeninimi, mida kasutatakse dns kirje juures kommentaarina
- -D millisesse kataloogi võtmed moodustatakse
Tulemusena tekib kaks faili
# ls -l total 8 -rw------- 1 root root 887 Jan 22 20:55 default.private -rw------- 1 root root 312 Jan 22 20:55 default.txt
kus
- default.private failis on PEM kujul vastav salajane osa. Selle faili omaniku võiks muuta opendkim kasutajaks kusjuures olulised on ka loabitid 0600
# chown opendkim:opendkim /etc/dkim/default.private
- default.txt on PEM vormingus avalik osa, kusjuures see esineb DNS TXT kirje kujul
# cat default.txt default._domainkey IN TXT "v=DKIM1; g=*; k=rsa; \ p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9HbZWjIo\ ... \ LQIDAQAB" ; ----- DKIM default for loomaaed.tartu.ee
kus
- v - DKIM versioon
- g - milliste kasutajate posti DKIM puudutab (see võib ka puududa, vaikeväärtus on tavaliseks kasutamiseks sobiv)
- k - algoritm
- p - avalik võti
- t - TXT kirjele lisatakse juurde üks väli, mis näitab, et DKIM süsteemi juurutamine on testimisel
DNS kirje tekitamine
Selleks, et DKIM signatuuri saaks kirja vastuvõtja kontrollida, peab olema nimesüsteemis nt selline kirje, vastav rida tuleb loomaaed.tartu.ee tsoonifaili lisada
default._domainkey.loomaaed.tartu.ee IN TXT "v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSI ... LQIDAQAB"
Tulemusena peab saab nimesüsteemist vastuse pärigule
$ dig default._domainkey.loomaaed.tartu.ee txt
Avaliku ja privaatse võtme klappimise kontrollimiseks sobib öelda, õnnestumisel ei vastata midagi
$ /usr/sbin/opendkim-testkey -d loomaaed.tartu.ee -s default -k /etc/dkim/default.private $
kus
- -d domeeninimi
- -s selektor
- -k privaatne võti
Ebaõnnestumise korral vastatakse nt
opendkim-testkey: keys do not match
Seadistamine
OpenDKIM tööd juhib seadistusfail /etc/opendkim.conf. OpenDKIM seadistatakse tavaliselt käima ühena järgmistest viisidest
- Single Domain Signature - iga domeeni kirjad signeeritakse samale domeenile vastava võtmega
- Third Party Signature - kõigi domeenide kirjad signeeritakse ühe ja sama võtmega
Teine võimalus võib esmapilgul tunduda pisut kummaline, kuna miks peaks nõ võtma vastutuse keegi kolmas osapool signeerimise osas, kuid osutub, et teatud juhtumitel on selline asjakorraldus samuti mõttekas.
Selleks, et OpenDKIM deemon võrgus kuulaks tuleb kasutada failis /etc/default/opendkim nt rida
SOCKET="inet:8891@localhost"
Single Domain Signature
Single Domain Signature on kõige tavalisem ja otsekohesem viis DKIM kasutamiseks. Olgu eesmärgiks seadistada kahe domeeni kirjade allkirjastamine vastava domeeni võtmega, selleks sobib kasutada nt sellist seadistusfaili
# egrep -v "^$|^#" /etc/opendkim.conf Syslog yes UMask 002 Canonicalization relaxed/relaxed Mode sv KeyTable file:/etc/dkim/opendkim-keytable.txt SigningTable refile:/etc/dkim/opendkim-signingtable.txt InternalHosts /etc/dkim/internal.hosts SignHeaders *,+Message-ID,+MIME-Version
kus
- Mode sv - OpenDKIM tegelen signeerimise ja verifitseerimisega
- SignHeaders '*,+Message-ID,+MIME-Version' kasutamise tulemusel signeeritakse tavalise kirja puhul sellised elemendid
h=MIME-Version:Date:From:To:Subject:Message-ID;
- KeyTable - seostab signatuuri sissekande juures kasutatava domeeni (d=), selektori (s=) ja privaatse võtme (k=)
# cat /etc/dkim/opendkim-keytable.txt auulkey auul.pri.ee:default:/etc/dkim/auul.key loomaaedkey loomaaed.tartu.ee:default:/etc/dkim/loomaaed.key
- SigningTabel - ütleb, viidatse KeyTablele millist d=, s= ja k= komplekti kasutada kirja signeerimiseks sõltuvalt kirja From reast
# cat /etc/dkim/opendkim-signingtable.txt *@auul.pri.ee auulkey *@loomaaed.tartu.ee loomaaedkey
- file: ja refile: viitavad vastavalt asjaolule, kas failides kasutatakse või mitte regulaaravaldisi
- InternalHosts - ip aadressid, kust saadetud kirju postimasin signeerib; üks aadress real
Third Party Signature
Selleks, et kõiki (lubatud aadressidelt) postimasinast läbi käivaid kirju signeeritakse sama võtmega peab kasutama sellise sisuga signingtable faili
# cat /etc/dkim/opendkim-signingtable.txt * loomaaedkey
Sellist asjakorraldust nimetatakse Third Party Signature'ks http://www.dkim.org/specs/draft-ietf-dkim-deployment-11.html#thirdpartysig
OpenDKIM deemoni käivitamine
Käivitamiseks sobib öelda
# /etc/init.d/opendkim start|stop
tulemusena töötab opendkim protsess
/usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p inet:8891@localhost
kus
- -x seadistusfail
- -u kasutaja
- -P pid
- -p millisel interneti soketil pöördumisi teenindatakse
Postfixi seadistamine
Postfix kasutab OpenDKIM'id milteri kaudu, selleks tuleb /etc/postfix/main.cf seadistusfaili lisada read
milter_default_action = accept milter_protocol = 2 smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891
kus
- smtpd_milters - tegeleb smtp kanalil liikuvate andmetega
- non_smtpd_milters - tegeleb mitte smtp kanalil liikuvate andmetega, nt nn /usr/sbin/sendmail abil saabunud postiga
Kui Postfix kasutab Amavis vms lahendusi, et kirja saadetakse mitu korda läbi Postfixi, siis tuleks kasutada rida /etc/postfix/master.cf failis
-o receive_override_options=no_milters
OpenDKIM töö kontrollimine
- GMail abil
- teise Postfix abil
Authentication-Results: mx-ftp.auul.pri.ee; dkim=pass (1024-bit key) header.i=@wheezy2.auul.pri.ee; dkim-asp=none Received: by mx-wheezy.auul.pri.ee (Postfix, from userid 0) id 077FE9538D; Mon, 3 Oct 2011 18:15:21 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wheezy2.auul.pri.ee; s=default; t=1317654922; bh=twh8ncd2pebuzX9U9Q2DFLO2KXvmEDWgM3p8fe4r7Os=; h=Date:To:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:From; b=LoWMC5nr5aXhJqSFJQtclHHQ/j6k/7iryS31RGUoAh6NoY3cODizSqAzI4F4x0u71 u9QGrRgkGK9ILIQ7rwSu8813itZJenmYipyyKAgakgou/zS8fjxiJX2PtT0t1L37QI CqSv6wp+s1gFuwG8n7n9FfQHqS/QukHCP1dd6F7E=
Märkused
- Kui on ebaselge, kas DNS ikka töötab korrektselt, siis maksab nimeserveri ees lihtsalt võrku pealt kuulata ja on näha, kas teise poole postimasin küsib nimeserverilt ootuspäraseid nimesid.
- logimist saab teha detailsemaks reaga
LogWhy True
- Kui OpenDKIM seadistusfailides teha süntakstiviga võib saada nö veateate alles programmi kasutamisel segfaulti kujul.
- Privaatsest võtmest avaliku osa küsimine
$ openssl rsa -in default.private -pubout
kusjuures väljundis on txt kirje p= järele jääv osa
- avaliku võtme omaduste küsimine, nt eemärgiga saada teada kui pikka võtit gmail.com kasutab
$ dig +short 20120113._domainkey.gmail.com txt "k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCA QEA1Kd87/UeJjenpabgbFwh+eBCsSTrqmwIYYvywlbhbqoo2Dymn dFkbjOVIPIldNs/m40KF+yzMn1skyoxcTUGCQs8g3FgD2Ap3ZB5D ekAo5wMmk4wimDO+U8QzI3SD0" "7y2+07wlNWwIt8svnxgdxGkVbbhzY8i+RQ 9DpSVpPbF7ykQxtKXkv/ahW3KjViiAH+ghvvI hkx4xYSIc9oSwVmAl5OctMEeWUwg8Istjqz8BZeTWb f41fbNhte7Y+YqZOwq1Sd0DbvYAD9NOZK9vlfuac05 98HY+vtSBczUiKERHv1yRbcaQtZFh5wtiRrN 04BLUTD21MycBX5jYchHjPY/wIDAQAB"
Seejärel ühendada p= järel ja lõpus " " märkide vahel olev väljund faili
$ cat /tmp/gmail.com -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEA1Kd87/UeJjenpabgbFwh+eBCsSTrqmwIYYvywl bhbqoo2DymndFkbjOVIPIldNs/m40KF+yzMn1sk yoxcTUGCQs8g3FgD2Ap3ZB5DekAo5wMmk4wimDO+U8QzI3SD0 7y2+07wlNWwIt8svnxgdxGkVbbhzY8i+RQ9DpSVpPbF7yk QxtKXkv/ahW3KjViiAH+ghvvIhkx4xYSIc9oSwVmAl5OctME eWUwg8Istjqz8BZeTWbf41fbNhte7Y+YqZOwq1Sd0DbvYA D9NOZK9vlfuac0598HY+vtSBczUiKERHv1yRbcaQtZFh5 wtiRrN04BLUTD21MycBX5jYchHjPY/wIDAQAB -----END PUBLIC KEY-----
ning küsida, nii saab teada gmail.com võtme pikkuse, 2k
$ openssl rsa -pubin -in /tmp/gmail.com -noout -text Modulus (2048 bit): 00:d4:a7:7c:ef:f5:1e:26:37:a7:a5:a6:e0:6c:5c: 21:f9:e0:42:b1:24:eb:aa:6c:08:61:8b:f2:c2:56: e1:6e:aa:28:d8:3c:a6:9d:d1:64:6e:33:95:20:f2: 25:74:db:3f:9b:8d:0a:17:ec:b3:32:7d:6c:93:2a: 31:71:35:06:09:0b:3c:83:71:60:0f:60:29:dd:90: 79:0d:e9:00:a3:9c:0c:9a:4e:30:8a:60:ce:f9:4f: 10:cc:8d:d2:0f:4e:f2:db:ed:3b:c2:53:56:c0:8b: 7c:b2:f9:f1:81:dc:46:91:56:db:87:36:3c:8b:e4: 50:f4:3a:52:56:93:db:17:bc:a4:43:1b:4a:5e:4b: ff:6a:15:b7:2a:35:62:88:01:fe:82:1b:ef:22:19: 31:e3:16:12:21:cf:68:4b:05:66:02:5e:4e:72:d3: 04:79:65:30:83:c2:2c:b6:3a:b3:f0:16:5e:4d:66: df:e3:57:db:36:1b:5e:ed:8f:98:a9:93:b0:ab:54: 9d:d0:36:ef:60:00:fd:34:e6:4a:f6:f9:5f:b9:a7: 34:e7:df:07:63:eb:ed:48:17:33:52:22:84:44:7b: f5:c9:16:dc:69:0b:59:16:1e:70:b6:24:6b:37:4e: 01:2d:44:c3:db:53:32:70:15:f9:8d:87:21:1e:33: d8:ff Exponent: 65537 (0x10001)
Muudatused seoses Debian v. 7 Wheezy operatsioonisüsteemiga
Tundub, et osa utiliite on paketis opendkim-tools
# apt-get install opendkim-tools
Tundub, et uuemal ajal soovitatakse kasutada /etc/opendkim.conf failis rida
OversignHeaders From
Muudatused seoses Debian v. 9 Stretch operatsioonisüsteemiga
- systemd
DNSSEC kasutamine
Kui OpenDKIM sooritab dns-plain päringuid on kirjas selline päis (olgu vastav domeen ise dnssec enabled või mitte)
Authentication-Results: mail.auul.pri.ee; dkim=pass reason="1024-bit key; unprotected key" header.d=pak-lm.ee header.i=@pak-lm.ee header.b=NWkrz5ch; dkim-adsp=pass; dkim-atps=neutral
Selleks, et OpenDKIM hakkaks sooritama dns-sec päringuid, sobib kasutada seadistusfailis sellist rida
ResolverConfiguration /etc/unbound/unbound.conf
kusjuures failis on nt
# cat /etc/unbound/unbound.conf server: auto-trust-anchor-file: "/var/lib/unbound/root.key" domain-insecure: "auul" domain-insecure: "moraal" domain-insecure: "10.168.192.in-addr.arpa" domain-insecure: "1.168.192.in-addr.arpa" domain-insecure: "2.168.192.in-addr.arpa" domain-insecure: "1.0.10.in-addr.arpa." local-zone: "1.168.192.in-addr.arpa." transparent local-zone: "2.168.192.in-addr.arpa." transparent local-zone: "10.168.192.in-addr.arpa." transparent forward-zone: name: "." forward-addr: 10.192.0.53
Kirjas on kirjas selline päis
Authentication-Results: mail.auul.pri.ee; dkim=pass reason="2048-bit key; secure key" header.d=eugo.ee header.i=@eugo.ee header.b=NzuLt8wP; dkim-adsp=pass; dkim-atps=neutral
Unbound protsess võib töötada, aga OpenDKIM seisukohast ei pea töötama. Kuna OpenDKIM kasutab teda nö teegina, siis olgugi, et Unbound logimine võib olla sisse lülitatud seadistusfailist, see ei toimi.
systemd abil teise opendkim protsessi pidamine
systemd abil teise opendkim pn1 nimelise protsessi pidamiseks sobib teha süsteemis sellised muudatused, õieti täiendused (pn1 - projekti nimi 1)
tekitada uus kasutaja:grupp
# groupadd -r opendkimpn1 # useradd -r -g opendkimpn1 -m -d /var/run/opendkimpn1 -s /bin/false opendkimpn1
tekitada iseseisev opendkim võrgunduse seadistusfail ning teha seal asjakohased muudatused (nt kasutada vaba inet porti 8892)
# cp /etc/default/opendkim /etc/default/opendkimpn1
tekitada iseseisev opendkim seadistusfail (esialgu võib selle sisu olla sama mis primaarsel)
# cp /etc/opendkim.conf /etc/opendkimpn1.conf
tekitada systemd seadistusfail
# cp /lib/systemd/system/opendkim.service /etc/systemd/system/opendkimpn1.service
kehtestada systemd muudatused
# systemctl daemon-reload
käivitada teise opendkim protsess
# systemctl start opendkimpn1
Tulemusena töötab kaks opendkim protsessi, erinevate kasutajatena
# ps auxf | less # ps -U opendkim -o pid,user,cgroup:150,args
Teise opendkim protsessi kasutamiseks postfix seest sobib käivitada sama postfix protsesside komplekt lisaks ühelt portilt
# cat /etc/postfix/master.cf .. 10025 inet n - y - - smtpd -o smtpd_milters=inet:localhost:8892 -o non_smtpd_milters=inet:localhost:8892 ...
Kasulikud lisamaterjalid
- http://www.opendkim.org/opendkim-README
- http://dkimcore.org/c/keycheck
- https://www.skelleton.net/2015/03/21/how-to-eliminate-spam-and-protect-your-name-with-dmarc/
- https://words.bombast.net/postfix-with-spf-dkim-and-dmarc/
- http://dkim.org/specs/rfc4871-dkimbase.html
- https://debian-administration.org/article/720/Tying_together_SPF_and_DKIM_with_DMARC
- http://terraltech.com/opendkim-to-sign-postfix-mails-on-ubuntu/
- http://www.zytrax.com/books/dns/ch9/dmarc.html