Rekord SPF – pierwszy krok do walki ze spamem.

W artykule „Wysyłanie email z okna terminala (…)” opisałem sposób na przetestowanie działania usługi SMTP, ale również na podszycie się pod kogoś innego (czyli wpisanie czyjegoś adresu email w miejscu „mail from: „). Jestem przekonany, że wielu z Was zadało sobie pytanie – jak zabezpieczyć się przed przyjęciem na swój serwer pocztowy listu nadanego „w czyimś imieniu”. Niestety nie było takiego mechanizmu. Owszem, administratorzy szybko znaleźli sposób na uniknięcie sytuacji w której fałszowano także adres docelowy („rcpt to:”) w celu rozsyłania spamu, poprzez odrzucanie wszystkich listów przychodzących z adresem docelowym niebędącym domeną zarządzaną przez serwer, lub wręcz kiedy nie odnaleziono konta użytkownika na serwerze pocztowym. Tak czy siak, kwestią otwartą pozostawało uwierzytelnienie serwera wysyłającego pocztę. Na szczęście pojawiły się dwa takie rozwiązania – rekordy DNS: SPF oraz DKIM. Oba te rozwiązania wzajemnie się uzupełniają, więc zaczniemy od pierwszego z nich.

SPF (ang: Sender Policy Framework)

Rekord SPF to nic innego, jak informacja dodana do strefy autorytarnej dla danej domeny DNS (czyli w serwerze który utrzymuje i zarządza daną domeną, do którego zapisów ma prawa tylko właściciel domeny) w którym zawarte są informacje o adresach serwerów pocztowych, które mają prawo wysyłać pocztę z adresem źródłowym danej domeny. Dzięki tej informacji, serwer pocztowy, który otrzymał email, poprzez sprawdzenie w nagłówku IP adresu źródłowego oraz porównanie go z wpisem SPF dla danej domeny, można już na wstępie odrzucić pocztę niepochodzącą z zaufanego serwera.

Skoro wiemy po co to jest, to teraz pytanie jak wygląda taki rekord.

Mamy dwie możliwości:

  1. Skorzystać z gotowych wizardów np: Sender ID Framework SPF Record Wizard. Ta strona jest o tyle fajna, że od razu sprawdza, czy dla danej domeny nie jest już skonfigurowany rekord SPF i ewentualnie czy jest poprawny. To rozwiązanie jest polecane, gdy chcemy bardziej specyfikować adresy serwerów pocztowych, wprowadzać wykluczenia itp..
  2. Jeżeli wystarczy nam wprowadzenie informacji, że wszystkie serwery pocztowe wskazane przez rekordy MX w domenie mają prawo wysyłać pocztę i nie potrzebujemy dokładnego precyzowania ich adresów IP, możemy wprowadzić uniwersalny wpis: „v=spf1 a mx ~all„, który wszystkie serwery określone przez rekordy MX ustala na zaufane do wysyłania poczty z danej domeny.

Skoro wiemy już jak ma wyglądać rekord SPF (wygenerowaliśmy sobie lub używamy ogólnego wpisu) pora wprowadzić zmiany do domeny. Na potrzeby niniejszego artykułu zajmiemy się drugą opcją, czyli „v=spf1 a mx ~all„. W pierwszej kolejności należy upewnić się, że istnieją poprawnie zdefiniowane rekordy MX.

Sprawdzenie wpisów MX można wykonać z linii poleceń. Pokażę na przykładzie domeny google.pl:

  1. nslookup
  2. >set type=MX
  3. >google.pl
  4. otrzymana odpowiedź:
    Non-authoritative answer:
    google.pl     mail exchanger = 30 alt2.aspmx.l.google.com
    google.pl     mail exchanger = 40 alt3.aspmx.l.google.com
    google.pl     mail exchanger = 20 alt1.aspmx.l.google.com
    google.pl     mail exchanger = 50 alt4.aspmx.l.google.com
    google.pl     mail exchanger = 10 aspmx.l.google.com

Co nam mówią te wpisy?

  • odpowiedź otrzymana od serwera DNS, który nie jest autorytatywnym dla strefy google.pl (co jest prawdą, bo korzystam domyślnie z dnsów mojego ISP)
  • domena google.pl posiada przypisanych 5 serwerów MX, czym kolejność ich używania jest wyznaczona liczbą po „mail exchanger” – im mniejsza tym serwer ważniejszy. (nie przejmować się, że zaczynają od 10, równie dobrze mogą to być liczby 1,2,3,4,5, po prostu wycofanie informacji z dns jest czasochłonne, i w przypadku gdybyśmy chcieli dodać kolejny ważniejszy serwer, a mamy 10,20,30,40…., wystarczy wprowadzić wpis np: 5, bez wycofywania wyższego wpisu. Gdybyśmy za to mieli wpis 1,2,3,4… najpierw należałoby wycofać 1 … i wprowadzić znowu 1 z nowym adresem IP = lipa w świecie, bo część serwerów dns, będzie utrzymywać w cache dawny wpis 1, a cześć już nasz nowy… Zatem w przypadku nawet pojedynczych wpisów MX używajmy do ustalania priorytetu całych dziesiątek – chyba że na 100% jesteście pewni, że adres MX nie ulegnie zmianie, albo domena nie jest użytkowana produkcyjnie – jak w moim przypadku).

Najwyższa pora wprowadzić rekord SPF do domeny. W moim przypadku wykorzystałem panel administracyjny przeznaczony do zarządzania strefami DNS:

rekord SPF

Proszę zwrócić uwagę, że wpis dotyczy całej domeny (.nasza_domena.pl), dlatego pole subdomeny jest puste, oraz jako adres docelowy wpisałem tekst bez cudzysłowów, które zostaną dodane przez panel sterowania. W praktyce taki wpis powinien wyglądać następująco:
rekordy domeny

Najważniejsze na co należy zwrócić uwagę to:

  1. rekord MX pownien być zdefinowany dla całej domeny i wskazywać nazwę hosta, który też jest zdefiniowany w dns. Przykładowo dla domeny: moja_domena.pl:
    .moja_domena.pl     MX 1    mx.moja_domana.pl. (tutaj zwracam uwagę na kropkę na końcu, którą zawsze umieszczamy podczas wprowadzania wpisów do domeny, która oznacza, że to cały wpis, i nie należy do niego doklejać dodatkowo całej domeny)
  2. istnieje rekord typu A definujący adres IP dla wyżej wprowadzonej nazwy wskazujący na adres IP naszego serwera pocztowego (przykład IP: 1.2.3.4), czyli:
    mx.moja_domena   A   1.2.3.4
  3. istnieje rekord SPF:
    .moja_domena.pl   SPF   „v=spf1 a mx ~all”

I to wszystko, od tego momentu, licząc czas na propagację między serwerami DNS, praktycznie wszystkie liczące się serwery pocztowe będą odrzucały pocztę wysłaną z adresem domeny wysłaną z innego adresu IP niż zdefiniowane przez nas rekordy typu MX.

Sprawdzenie wprowadzonego wpisu w DNS:

Jako, że rekord SPF jest rekordem typu TXT należy przeszukać wybraną domenę pod tym kątem np:

  1. w Linux można skorzystać z narzędzia dig moja.domena.pl TXT
  2. w Windows / Linux z narzędzia nslookup, gdzie po uruchomieniu należy zmienić typ na TXT i odpytać daną domenę:
    >set type=TXT
    >moja.domena.pl

W obu przypadkach powinniśmy otrzymać wcześniej wprowadzony wpis „v=spf1 a mx ~all” jako rekord typu TXT.

Kolejnym krokiem w uwierzytelnienia naszego serwera pocztowego jest zdefiniowanie rekordu DKIM, czyli tzw. podpisu domenowego, ale o tym w następnym artykule.

4 comments on “Rekord SPF – pierwszy krok do walki ze spamem.
  1. Bardzo przydatny artykuł.
    p.s. popraw błąd w tytule artykułu z „Rekrod…” na „Rekord…”.

    Pozdrawiam

Dodaj komentarz

Twój adres email nie zostanie opublikowany.