Konfiguracja OpenDKIM

Dawny milter-dkim zmienił się w OpenDKIM. Zasada działania jest ta sama, plik konfiguracyjny niemalże identyczny. Ale kilka zmian jest.

Instalacja

Wykorzystując niniejsze wiki, w systemie nie ma śladu po sendmailu wraz z biblioteką milter (libmilter). Niemniej skutkuje to potrzebą zainstalowania sendmaila z ports, czyli konflikt z postfixem. Dlatego też można "ręcznie" (nie jest to make buildworld) dokompilować oraz doinstalować libmilter.

Kolejnym krokiem jest zainstalowania OpenDKIM.

Instalacja libmilter ze źródeł systemu

Jest to potrzebne, aby OpenDKIM mógł w ogóle "ruszyć".

cd /usr/src/lib/libmilter/
make all install

Instalacja samego OpenDKIM

cd /usr/ports/mail/opendkim
make config
# Wybrać opcje: FILTER OPENLDAP QUERY_CACHE STATS STOCK_RESOLVER
# jeżeli lokalnie jest unbound, to można w ostatniej opcji wybrać opcję UNBOUND
make all install clean

Plik konfiguracyjny

cd /usr/local/etc/
cp mail/opendkim.conf.sample opendkim.conf
mkdir -p /var/db/milteropendkim/
touch /var/db/milteropendkim/example.private
chown -R mailnull:mailnull /var/db/milteropendkim/
chmod 0600 /var/db/milteropendkim/example.private

Jeżeli będziemy również podpisywać maile, to należy wykonać polecenie:

mkdir -p /usr/local/etc/opendkim.d/
chown mailnull:mailnull /usr/local/etc/opendkim.d/

Wygenerowanie kluczy do podpisywania

W atrybutach programu opendkim-genkey podajemy selector. Ja ustawiam wszędzie email, ale oczywiście może być inny. Co skutkuje, że nazwa dns-owa będzie inna (np. m190), ale wartości rekordu TXT nadal będzie występować s=email. I po wygenerowaniu klucza oraz wpisu DNSowego nie wolno nic zmieniać (nawet jakby kusiło zmienić wartość dla s=. Bo będą problemy i mail będzie oznaczany jako DKIM: fail. Więc pamiętaj: nie bądż bardziej święty od Papieża.

cd /var/db/milteropendkim/
opendkim-genkey -r -d gdbd.pl -s email
mv email.private email.key
chown mailnull:mailnull email.*

# sprawdzenie poprawności wygenerowanego klucz
#
opendkim-testkey -vvv -d gdbd.pl -s email -k /var/db/milteropendkim/email.key -x /usr/local/etc/opendkim.conf

Konfiguracja tylko do sprawdzania nadawców

Jak już odfiltrować wszelkie komentarze, to plik konfiguracyjny sprowadza się do kilku linijek:

Background              Yes
BaseDirectory           /var/run/milteropendkim
Canonicalization        simple/simple
Domain                  gdbd.pl
DontSignMailTo          *
FixCRLF                 no
KeyFile                 /var/db/milteropendkim/example.private
Selector                gdbd-dkim-signer
Socket                  inet:3322@127.0.0.1
Syslog                  No
TemporaryDirectory      /var/tmp
UMask                   022
SoftwareHeader          Yes

Konfiguracja razem z podpisywaniem

Mode                    sv
Background              Yes
BaseDirectory           /var/run/milteropendkim
Canonicalization        simple/simple
##Domain                  gdbd.pl # Skoro jest KeyTable, to ta opcja jest "martwa"
FixCRLF                 yes
KeyTable                refile:/usr/local/etc/opendkim.d/keytable
SigningTable            refile:/usr/local/etc/opendkim.d/signingtable
ExternalIgnoreList      refile:/usr/local/etc/opendkim.d/trustedhosts
InternalHosts           refile:/usr/local/etc/opendkim.d/trustedhosts
Socket                  inet:3322@127.0.0.1
Syslog                  yes
SyslogSuccess           yes
LogWhy                  yes
TemporaryDirectory      /var/tmp
UMask                   022
SoftwareHeader          Yes
OversignHeaders         From,Subject
UserID                  mailnull:mailnull

/usr/local/etc/opendkim.d/keytable

gdbd.pl gdbd.pl:email:/var/db/milteropendkim/email.key

/usr/local/etc/opendkim.d/signingtable

*@gdbd.pl gdbd.pl

/usr/local/etc/opendkim.d/trustedhosts

127.0.0.1
siec.lan/cidr

Skrypty pomocnicze do wygenerowania keytable, signingtable

find -s /var/db/milteropendkim/ -name email.key | awk -F "/" '{print $5,$5":email:"$0}' > /usr/local/etc/opendkim.d/keytable
find -s /var/db/milteropendkim/ -name email.key | awk -F "/" '{print "*@"$5,$5}' > /usr/local/etc/opendkim.d/signingtable

Dodanie do rc.conf

milteropendkim_enable="NO"
milteropendkim_domain="wtp3.org,modlin.wtp3.org"
milteropendkim_flags="-b v -c simple/simple"
milteropendkim_socket="inet:3322@127.0.0.1"
milteropendkim_cfgfile="/usr/local/etc/opendkim.conf"

Wersja z podpisywaniem

# opcje z rc.conf nadpisują ustawienia w opendkim.conf, zatem milteropendkim_socket można pominąć
milteropendkim_enable="NO"
milteropendkim_socket="inet:3322@127.0.0.1"
milteropendkim_cfgfile="/usr/local/etc/opendkim.conf"

Uruchomienie usługi poprzez deamontools

(To już było na stronie głównej)

Konfiguracja w DNS

Aby zadziałało podpisywanie maili należy wykonać stosowny wpis DNS dla obsługiwanej domeny. Pomocny jest plik ze skryptu opendkim-genkey (np. email.txt), który zawiera wszystkie potrzebne informacje. Konieczne oczywiście wgranie nowej wersji strefy.

Konfiguracja postfixa

## main.cf
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:3322
non_smtpd_milters = $smtpd_milters

Uruchomienie lokalnego socketu do komunikacji postfix - opendkim

Wynikło to z konieczności uruchomienie poprawnej komunikacji w przypadku korzystania z adresacji IPv4 oraz IPv6. Remedium jest lokalny socket (plik) zamiast socketu sieciowego.

Zmiany w /etc/rc.conf

milteropendkim_socket="local:/var/run/milteropendkim/opendkim.sock"

Konifguracja w main.cf postfixa

smtpd_milters = unix:/var/run/milteropendkim/opendkim.sock

Dopisanie użytkowników postfix, mailnull do grup

pw mod user postfix -G postfix,mail,mailnull
pw mod user mailnull -G postfix

Poprawka dla skryptu startowego

--- /usr/local/etc/rc.d/milter-opendkim 2014-12-15 09:27:10.136685000 +0100
+++ /usr/local/etc/rc.d/milter-opendkim.new     2015-06-12 15:53:11.188277365 +0200
@@ -38,6 +38,7 @@

 extra_commands="reload"
 start_precmd="dkim_prepcmd"
+start_postcmd="dkim_start_postcmd"
 stop_postcmd="dkim_postcmd"
 command="/usr/local/sbin/opendkim"
 _piddir="/var/run/milteropendkim"
@@ -51,6 +52,7 @@
 #
 : ${milteropendkim_enable="NO"}
 : ${milteropendkim_uid="mailnull"}
+: ${milteropendkim_gid="mailnull"}
 : ${milteropendkim_cfgfile="/usr/local/etc/mail/opendkim.conf"}

 # Options other than above can be set with $milteropendkim_flags.
@@ -157,6 +159,18 @@
     if [ -n "${milteropendkim_uid}" ] ; then
        chown ${milteropendkim_uid} ${_piddir}
     fi
+    if [ -n "${milteropendkim_gid}" ] ; then
+       chgrp ${milteropendkim_gid} ${_piddir}
+    fi
+}
+
+dkim_start_postcmd ()
+{
+    if [ -S ${milteropendkim_socket##local:} ] ; then
+        chmod 0775 ${milteropendkim_socket##local:}
+    elif [ -S ${milteropendkim_socket##unix:} ] ; then
+        chmod 0775 ${milteropendkim_socket##unix:}
+    fi
 }

 dkim_postcmd()

Źródła w sieci internet


{i} (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.


  1. Otwiera się w nowym oknie/nowej karcie przeglądarki. (1 2 3)