FREESCO.PL Dla informatyka i laika
Święta trójca

Święta trójca

Bez obaw, to nie będzie katecheza. Chcę napisać o trzech niezbędnych elementach konfiguracji serwera poczty elektronicznej. SPF, DMARC i DKIM. W zasadzie SPF ma już każdy serwer, bo bez tego poczta jest odrzucana na innych serwerach lub w najlepszym wypadku wycinana w systemach antyspamowych. Rekord SPF dodaje się w strefie serwera nazw, czyli systemie DNS. Najczęściej za pomocą panelu rejestratora domeny, choć są również inne możliwości. Podobnie będzie z rekordem DMARC. Tylko rekord DKIM wymaga wcześniejszego wygenerowania klucza na własnym serwerze.

Aby dodać rekord w systemie nazw musimy się zalogować do panelu, który to umożliwia. Pomimo drobnych różnic wszystkie panele są do siebie podobne (OVH, nazwa.pl, domeny.tv, webd.pl, czy darmowy freedns.42.pl). Najpierw trzeba wybrać typ rekordu. W przypadku tych trzech wpisów będzie to rekord TXT. Dodając SPF w polu nazwa powinien być znak @, ponieważ wpis ma dotyczyć naszej głównej domeny natomiast treść (zawartość) wpisu będzie to:
"v=spf1 mx -all" jeśli jedynym dozwolonym serwerem ma być ten wpisany jako nasz MX. Gdy używamy też innego IP do np. marketingu mailowego, wpis będzie nieco inny:
v=spf1 mx ip4:INNY_IP -all

Kolejnym elementem jest rekord DMARC. Ten zaś będzie wymagał przynajmniej dwóch etapów. W pierwszym z nich dodajemy rekord o nazwie _dmarc i zawartości v=DMARC1; p=none; rua=mailto:dmarc@mojadomena.pl. Pamiętajmy przy tym, że musimy zapewnić, że maile na adres dmarc@mojadomena.pl będą przez nasz serwer odbierane. Można to rozwiązać za pomocą systemowych aliasów tak jak adres abuse lub postmaster. Ewentualna poczta kierowana jest na konto root, a z niego automatycznie przekierowana na konto systemowe użytkownika, który jest administratorem. Na pierwszym etapie działania mamy p=none. Inaczej mówiąc nie chcemy by cokolwiek się działo z z mailami, które nie spełniają warunków DMARC. Gdy dodamy rekord DKIM i będziemy czytać raporty, które potwierdzą, że nasze reguły są prawidłowe, zmienimy wpis na restrykcyjny np.
v=DMARC1; p=quarantine; pct=100; rua=mailto:dmarc@mojadomena.pl.
To spowoduje, że serwer przyjmujący obcy mail podszywający się pod nas automatycznie sklasyfikuje go jako spam.

Trzeci w kolejności jest wpis DKIM. To również rekord TXT i w nazwie będzie miał np. dkim._domainkey. Można użyć innego prefiksu, ja na przykład używam dkim2026._domainkey. Wartość rekordu będzie wyglądała na przykład tak:

v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyIf9rnDKn4kPcPA1TgPiXrWkodnVtZtGHjPYvazL14Rla2nP1Zz31g6Le0aC/BIWHaUtMmxJnUWm8lI5LoeffqfZjoJ+E1NTX/ojiUgxEfdwMDOkqirathSvntuTpYBdHKxOokGN5kiZd50hAtktZGWmBvzL1qeZ5GXU417pAiifFw89NlLLzXDkgwISyeKFN0gsuxMlQniBkLZ+HcFSZjSKv0uHGX+mLhhmufSofY+R8o3apfFAoezi5I29MOFw2oqCp2EztPGpt57we5mB8wda7hU9uY0OxWyrZg3g5fqbzDXN6+JCmyLwOYDmU60Ek2GJhy5gK0u3keCmwjK/bQIDAQAB
Poniżej zaś skrypt do wygenerowania klucza DKIM:
#!/bin/bash

# Sprawdzenie, czy podano argument (nazwę domeny)
if [ -z "$1" ]; then
echo "Błąd: Nie podano nazwy domeny!"
echo "Użycie: $0 nazwadomeny.pl"
exit 1
fi

DOMENA=$1
SELEKTOR="dkim2026"
KATALOG="/etc/exim/dkim/$DOMENA"
PLIK_PRYWATNY="$KATALOG/$SELEKTOR.private"
PLIK_PUBLICZNY="/tmp/$DOMENA-dkim-public.pem"

# 1. Tworzenie katalogu dla domeny
if [ ! -d "$KATALOG" ]; then
mkdir -p "$KATALOG"
chown root:exim "$KATALOG"
chmod 750 "$KATALOG"
fi

# 2. Generowanie klucza prywatnego
openssl genrsa -out "$PLIK_PRYWATNY" 2048
chown root:exim "$PLIK_PRYWATNY"
chmod 640 "$PLIK_PRYWATNY"

# 3. Wyciąganie klucza publicznego do pliku tymczasowego
openssl rsa -in "$PLIK_PRYWATNY" -pubout -out "$PLIK_PUBLICZNY" 2>/dev/null

# 4. Przetworzenie klucza publicznego do formatu rekordu DNS (usuwanie nagłówków i nowolini)
KLUCZ_CZYSTY=$(grep -v '^-' "$PLIK_PUBLICZNY" | tr -d '\n' | tr -d '\r')

# 5. Wyświetlenie wyników dla administratora
echo "======================================================================"
echo " Klucze DKIM dla domeny: $DOMENA zostały wygenerowane."
echo "======================================================================"
echo "Lokalizacja klucza prywatnego: $PLIK_PRYWATNY"
echo "----------------------------------------------------------------------"
echo "Oto gotowy rekord TXT do dodania w DNS:"
echo ""
echo "Host / Nazwa: $SELEKTOR._domainkey"
echo "Typ: TXT"
echo "Wartość: v=DKIM1; k=rsa; p=$KLUCZ_CZYSTY"
echo "======================================================================"

# 6. Czyszczenie pliku tymczasowego
rm -f "$PLIK_PUBLICZNY"

W powyższym skrypcie ścieżki są dostosowane do mojego exima, więc wykorzystanie ich w innym systemie może wymagać korekty. Kolejnym krokiem niezbędnym w prawidłowej konfiguracji poczty będą zmiany w exim.conf (lub w innych plikach w zależności od używanego MTA). Zapewne chcemy też by nasz serwer sprawdzał maile i ewentualnie oceniał je w zależności od spełnionych przez nie warunków. Jednak to już materiał na oddzielny artykuł. Prawidłowość swoich ustawień można sprawdzić na tej stronie: https://powerdmarc.com/ i z niej też pochodzi nasz obrazek wyróżniający.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *