DKIM (DomainKeys Identified Mail) działa jako ochrona przed wiadomościami ze sfałszowanymi adresami e-mail. Serwer SMTP nadawcy wstawia podpis elektroniczny w nagłówku. Ten jest porównywany przez serwer SMTP odbiorcy z kluczem zapisanym w rekordzie TXT domeny, z której została wysłana wiadomość. Serwer SMTP może potem zweryfikować, czy serwer SMTP nadawcy jest upoważniony do wysyłania wiadomości z daną domeną. Skontroluje również, czy e-mail nie był „po drodze” w żaden sposób zmodyfikowany.
Niniejsza instrukcja odnosi się do konfiguracji podpisywania e-maili przez serwer SMTP za pomocą aplikacji OpenDKIM. Warunkiem jest dostępność zainstalowanego i działającego serwera poczty postfix.
Instalacja pakietu
CentOS 7
Pakiet opendkim nie jest niestety częścią podstawowego repozytorium CentOS. Konieczne będzie więc dodanie repozytorium EPEL (Extra Packages for Enterprise Linux). Aby tego dokonać, uruchom następujące polecenie:
yum -y install epel-release
Następnie sprawdzamy, czy repozytorium rzeczywiście zostało dodane:
yum repolist
Wyświetlą się aktualnie używane repozytoria. Lista powinna !epel/x86_64, tj. nasze nowo dodane repozytorium.
Teraz możemy zainstalować sam opendkim:
yum -y install opendkim
Debian 8 ISP
W przypadku preinstalowanego przez nas pakietu Debian ISP wystarczy zainstalować pakiety opendkim
apt-get install opendkim opendkim-tools
Konfiguracja
Otwórz plik /etc/postfix/main.cf w swoim ulubionym edytorze i wyszukaj wiesze smtpd_milters i non_smtpd_milters, i do każdego z nich dodaj inet:127.0.0.1:8891. Jeśli wiersze nie istnieją, konieczne będzie ich dodanie
..... # smtpd_milters służy do filtrowania e-maili wysłanych przez smtpd, w naszym przypadku będzie służył do podpisywania e-maili wysłanych przez smtp smtpd_milters = inet:127.0.0.1:8891 # non_smtpd_milters służy do filtrowania e-maili, które nie były wysłane przez smtpd, ale na przykład przez sendmail, ewentualnie za pomocą funkcji php mail() non_smtpd_milters = inet:127.0.0.1:8891 .....
Następnie otwórz plik /etc/opendkim.conf i (o ile nie jest pusty) usuń jego zawartość i wklej:
# ustawimy mode podpisywania (Sign) Mode s Syslog yes Canonicalization relaxed/simple # postfix będzie z nami komunikował na port 8891 Socket inet:8891@localhost Umask 002 # podpisujemy wszystkie domeny Domain * Selector dkim KeyFile /etc/opendkim/keys/dkim.private OversignHeaders From
Następnie utwórz katalog /etc/opendkim/keys, przełącz się do niego i utwórz klucz
mkdir -p /etc/opendkim/keys
cd /etc/opendkim/keys
opendkim-genkey --bits=2048 --selector=dkim --restrict --verbose
W katalogu zostaną utworzone dwa pliki dkim.private (zawierający klucz prywatny) i dkim.txt (zawierający rekord TXT w formacie BIND).
Dla każdej domeny, która będzie obsługiwana na serwerze, utworzymy rekord typu TXT o nazwie dkim._domainkey.nazevdomeny.cz. Wartość rekordu TXT wyświetlimy następnie w ten sposób:
cat dkim.txt | tr -d "\"\n\" \t" | sed -r "s/.*\((.*)\).*/\\1\n/"
Na wyjściu otrzymamy coś takiego:
v=DKIM1;k=rsa;s=email;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkc/SUBjf8Ie2kye2JfcPpRegMhNAgVU/RInQjsMofcpLWbXKc5Jj3MYOlt/Gx6OphaUGLxzP6qg96dvDNprGJOfKXI82Wbz4mYyemZcCD9GSQrbjrD0qRb0sbjYLTz7k+QpVFT/f6qt/FGxdjidKxe2caIlj3kU6/3hf3cF0dUAF6FHrnX5fdDQVZMeBNJEKGz0wOPneJ576UKQCMxlpIG913AlzDO49BO6vy7NuKOs18QiWSVXeCwO1z9IdGdrvrgPHqYZDoX2BMkav4qiCdSYuwSqvfAytbY8lfeUR6/z7cK3Xf+EKu3t4XfwYmiGEyIx02DGJqQgp4woZCn2fMwIDAQAB
W naszej administracji rekordów DNS w polu „nazwa“ wprowadź dkim._domainkey, natomiast w polu dane wprowadź wartość, która została wyświetlona za pomocą polecenia wspomnianego powyżej.

W ostatnim kroku zrestartuj usługi postfix i opendkim oraz zezwól na automatyczne uruchamianie opendkim
systemctl restart opendkim postfix
systemctl enable opendkim
Weryfikacja
Wszystkie wysłane e-maile powinny być teraz podpisane przez DKIM. Możesz to sprawdzić, na przykład, wysyłając wiadomość e-mail check-auth@verifier.port25.com. W ciągu kilku minut powinieneś otrzymać odpowiedź zawierającą poniższą tabelę (interesuje nas wiersz „DKIM check: pass“).
==========================================================
Summary of Results
==========================================================
SPF check: pass
DomainKeys check: neutral
DKIM check: pass
Sender-ID check: neutral
SpamAssassin check: ham