Denne konfiguration er udført på FreeBSD 9.0, hvor OpenDKIM håndterede et enkelt domæne. Her skulle tilføjes et domæne mere, og det er hvad jeg har beskrevet herunder. Jeg har således ikke selv installeret OpenDKIM og tilhørende milter, så den del er ikke med.
DISCLAIMER: Dette og andre indlæg på bloggen er primært noter til mig selv om emner jeg kun sjældent beskæftiger mig med, og som derfor er rare at kunne vende tilbage til en anden gang.
Når OpenDKIM kun håndterer eet domæne, er det som regel konfigureret således i konfigurationsfilen:
1 2 3 |
Domain domain1.com Selector smtp KeyFile /var/db/opendkim/smtp.private |
Disse 3 værdier, erstatter vi nu med KeyTable og SigningTable som vil henvise til filer der indeholder alle de domæner OpenDKIM skal signere mail for. Du kan derfor kommentere de 3 linier ved at smide en havelåge (#) foran.
Opret en folder til dine nøgler … medmindre du allerede har gjort dette tidligere.
1 2 |
# mkdir /var/db/opendkim # cd /var/db/opendkim |
Generer en privat og en offentlig nøgle pr domæne der skal tilføjes
1 2 |
# openssl genrsa -out domain2.private 1024 # openssl rsa -in domain2.private -out domain2.public -pubout -outform PEM |
Det er vigtigt at rettighederne på nøglerne er så restriktive som muligt. OpenDKIM tjekker dem, og hvis de ikke er korrekte, vil du se fejl i din maillog:
1 2 3 4 5 6 |
drwxr-xr-x 2 opendkim mail 512 Apr 24 14:06 opendkim -rw------- 1 opendkim mail 887 Apr 24 13:11 domain1.private -rw------- 1 opendkim mail 272 Apr 24 13:12 domain1.public -rw------- 1 opendkim mail 887 Apr 24 13:11 domain2.private -rw------- 1 opendkim mail 272 Apr 24 13:12 domain2.public |
Opret filer til KeyTable og SigningTable:
/var/db/opendkim/keytable:
1 2 |
domain1key domain1.com:smtp:/var/db/opendkim/domain1.private domain2key domain2.com:smtp:/var/db/opendkim/domain2.private |
domain1key = valgfrit navn som vi henviser til fra signingtable filen
smtp = valgfri selektor som skal bruges i DNS senere
/var/db/opendkim/signingtable:
1 2 |
*@domain1.com domain1key *@domain2.com domain2key |
Åben din OpenDKIM konfigurationsfil:
1 2 3 4 |
KeyTable file:/var/db/opendkim/keytable SigningTable refile:/var/db/opendkim/signingtable InternalHosts 127.0.0.1, 12.34.56.78 Socket inet:8891@localhost |
KeyTable og SigningTable er rimelig selvforklarende. Derudover har vi angivet InternalHosts hvor du i CIDR notation angiver de værter som OpenDKIM skal signere mail for. Socket bestemmer hvilken port OpenDKIM lytter på.
Det er i mit tilfælde GratisDNS der håndterer DNS for domænerne. Under primær DNS for domænerne lægges den offentlige nøgle ind som TXT…. og når du er igang, kan du lige så godt smide spf på også. Spf er nemt, for du skal intet installere eller konfigurere på din server, blot tilføje spf i TXT der skal oprettes.
Husk også at sætte en kort TTL for domænerne mens du tester.
1 2 3 4 5 6 7 8 |
Host: domain1.com Text: v=spf1 a:smtp.host.com -all Host: smtp._domainkey.domain1.com Text: v=DKIM1; k=rsa; p=yourPublicKeyHere; t=s Host: _adsp._domainkey.domain1.com Text: dkim=all |
Indsæt den offentlige nøgle hvor du ser yourPublicKeyHere i ovenstående.
Du kan med fordel sætte t
parameteren til “y” mens du tester (t=y) … og når det virker ændre det til t=s. Andre DNS servere ved således at de foreløbig skal ignorere din offentlige DKIM nøgle.
Nu kan du teste at DNS returnerer den offentlige nøgle korrekt. Da andre DNS servere muligvis ikke har fået informationen endnu, bør du forespørge din DNS server direkte:
1 |
$ dig -t txt smtp._domainkey.domain1.com ns1.gratisdns.dk |
Når DNS informationerne har spredt sig til verdens andre DNS servere, kan du teste at din private nøgle matcher den offentlige:
1 |
opendkim-testkey -d helloyaa.com -s smtp -k /var/db/opendkim/keys/helloyaa.private |
Genstart OpenDKIM og Postfix:
1 2 |
# /usr/local/etc/rc.d/milter-opendkim restart # postfix reload |
KILDE: http://opendkim.org/opendkim-README
Husk, hvis det nye domæne ikke serviceres fra samme vært som de eksisterende, skal du også tilføje ip adressen i Postfix main.cf
under mynetworks
.
I postfix er opendkim konfigureret i main.cf
1 2 3 4 |
smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept milter_protocol = 2 |
… og master.cf
1 |
spf unix - n n - - spawn user=nobody argv=/usr/local/sbin/postfix-policyd-spf-perl |