Ustawienie DKIM na VPS

  Serwery wirtualne (VPS SSD)

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