Sender Policy Framework - zaštita od SPAM-a

Spam nas prati praktički od prvog poslanog maila, a danas čini većinu mail prometa na Internetu. Srećom, postoje načini kako količinu spama smanjiti, pa i gotovo eliminirati, što svakodnevno i pokušavamo raznim softverskim rješenjima.

Uspješnost je relativno dobra, ali spameri i dalje prate situaciju i pokušavaju na sve načine poboljšati količinu isporučenih neželjenih poruka. U nizu alata i načina borbe protiv spama, pogledat ćemo SPF - Sender Policy Framework. Za razliku od uobičajenih načina zaštite, ovog puta usredotočit ćemo se na drugu stranu - nas.

SPF je zamišljen kao autentikacijski sustav: "da, ovaj poslužitelj može slati mail za domenu nesto.hr", dakle ograničava sa kojih se adresa može slati mail koji u adresi pošiljetalja sadrži ime domene. Spameri vole postaviti adresu "MAIL FROM" s nekog poznatog poslužitelja (aol, google) kako bi njihov spam imao veće šanse proći do korisničkog sandučića. Uz pomoć SPF-a štitimo druge od mailova koji navodno stižu s naše domene, a i svoje korisnike koji znaju dobiti mail koji tobože potiče s lokalne domene.

Naše je samo to da postavimo određene zapise u DNS, a od udaljenog poslužitelja ovisi hoće li prihvatiti naše preporuke ili neće. Veliki email provideri sveć dulje vrijeme koriste SPF, jer ne žele da njihove domene postanu raj za spamere. SPF je osmislio Meng Weng Wong sa pobox.com-a, a sam SPF je u međuvremenu postao IETF standard.

Ukoliko je vaš raspon adresa 161.53.X.0/24 i imate dodatnu lokaciju na 193.198.X.128/26, bit će dovoljno da unesete sljedeći zapis u DNS:

TXT "v=spf1 mx ip4:161.53.X.0/24 ip4:193.198.X.128/26 ~all"

Ovime smo rekli da za našu domenu nesto.hr mail mogu slati samo poslužitelji iz ova dva raspona adresa. Konkretnije, ovaj redak treba upisati u (pretpostavimo da se držite standardnih naziva) datoteku /etc/bind/hosts.db.

Možete ga upisati, primjerice, odmah ispod zapisa MX ili NS:

$TTL 3600       ; 1 hour
@             SOA    server hostmaster (
2013022701 ; serial
1800       ; refresh (30 minutes)
600        ; retry (10 minutes)
604800     ; expire (1 week)
3600       ; minimum (1 hour)
)
NS      ns.nesto.hr.
NS      slave.server.hr.
A       161.53.X.Y
MX      10 mojserver.negdje.hr.
TXT     "v=spf1 mx ip4:161.53.X.128/26 ~all"

Ne zaboravite povećati broj "Serial" i restartati bind. Ovdje mogu stati oni nestrpljivi, svoje su napravili, označili su odlazne mailove svojih korisnika koji sada imaju veću šansu da ne završe u mapi "spam" na nekom udaljemom poslužitelju.

Za sve ostale koje zanima nešto više, čitajte dalje.

SPF je uveden kao TXT zapis unutar DNS-a, koji nema određenu formu, nego je slobodnog oblika. Već je definiran i "pravi" SPF zapis, ali će proteći još neko vrijeme prije nego se počne primjenjivati u svim DNS serverima.

Dakle, zasada je najsigurnije ići na TXT zapis, iako RFC4408 (http://tools.ietf.org/html/rfc4408) preporučuje da se stave oba oblika (u Bindu 9.4.0 i višem postoji tip zapisa SPF).

Dakle, znamo kako SPF izgleda, no što znače pojedini unosi? Idemo redom:

v=spfv1       inačica SPF-a, ovdje je to 1
mx            određuje tip zapisa, ovo je "mail exchanger", može biti i A i PTR.
ip4           određuje IPv4 raspon adresa koje mogu slati mail za vašu domenu
~all          određuje "relaksirano" ponašanje, odnosno "soft fail" - omogućava dodatno ispitivanje

Da smo stavili "-all", to bi značilo da samo rasponi navedeni ispred mogu slati mail za određenu domenu. Ukoliko to nije slučaj, mail se stopira bez dodatnog ispitivanja. Postoji i varijanta "+all", ali to dopušta slanje maila s bilo kojeg poslužitelja za našu domenu, pa je stoga njena korisnost upitna. I na kraju, postoji i oblik "?all", koji je zapravo neutralni, odnosno testni oblik i znači da se cijeli unos ne treba uvažiti.

Primjeri iz prakse:

# host -t txt google.com
google.com descriptive text "v=spf1 include:_spf.google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all"

Ovdje se pojavljuje "include" mehanizam, koji zapravo uključuje dodatne domene, odnosno njihova pravila u ovisnosti  o kontekstu zapisa. Ne vjerujemo da će vam trebati.

#  host -t txt carnet.hr
carnet.hr descriptive text "v=spf1 mx ip4:161.53.123.0/26 ip4:161.53.160.0/24 ip4:193.198.184.128/26 ~all"

CARNet ima prilično jednostavan zapis, iako je to zapravo vrlo dobro, s obzirom da ga većina drugih hrvatskih ISP-ova uopće nema.

Više informacija o SPF-u možete naći na adresi http://en.wikipedia.org/wiki/Sender_Policy_Framework .

Zdravko Rašić

Kuharice: 
Kategorije: 
Vote: 
4.5
Vaša ocjena: Nema Average: 4.5 (4 votes)

Komentari

Na osnovu objašnjenja na http://www.openspf.org/SPF_Record_Syntax rekao bih da u Zdravkovom članku nije dobro opisana sintaksa SPF zapisa.

Naime, iza početnog teksta v=spf1 navode se redom "mehanizmi" koji opisuju dozvojene pošiljatelje e-maila za dotičnu domenu.

Npr., sljedeći primjer kaže da je dozvoljeni pošiljatelj jedino mail exchanger za dotičnu domenu a sve ostalo se odbija:

"v=spf1 mx -all"

dok sljedeći primjer kaže da su dozvoljeni pošiljatelji mail exchanger za dotičnu domenu i navedena tri raspona IPv4 adresa, a sve ostalo se odbija:

"v=spf1 mx ip4:161.53.123.0/26 ip4:161.53.160.0/24 ip4:193.198.184.128/26 -all"

Dakle, u članku nije točno objašnjenje da mx "određuje tip zapisa".

Poštovani,

Vaš komentar daje naslutiti da je nešto u članku pogrešno, ali to nije točno. Svi primjeri mi se čine u redu, jedino je objašnjenje što "mx" na tom mjestu znači pomalo nejasno napisano.

Mislim da je značenje njegovog objašnjenja zapravo: "ključne riječi MX, PTR, A... određuju tip zapisa koji se gledaju u DNS-u".

Osobno sam tako i shvatio, ali vidim da njegova formulacija može kod nekih izazvati nedoumicu.

Treba pažljivo pročitati stranicu SPF Record Syntax i onda će biti jasno u čemu je problem. Nije problem u tome da neki primjer ne radi nego kako je objašnjeno što znače pojedine stavke u zapisu.

Konkretno, zapis

TXT "v=spf1 mx ip4:161.53.X.0/24 ip4:193.198.X.128/26 ~all"

znači da za našu domenu mail mogu slati sljedeći mehanizmi:

  • mx - mail exchanger za dotičnu domenu (prema primjeru to je mojserver.negdje.hr)
  • ip4:161.53.X.0/24 - raspon adresa 161.53.X.0/24
  • ip4:193.198.X.128/26 - raspon adresa 193.198.X.128/26
  • ~all - sve ostalo se tretira kao "NOT being allowed to send but is in transition" ili kako je objašnjeno u članku: određuje "relaksirano" ponašanje, odnosno "soft fail" - omogućava dodatno ispitivanje


Moguć je i ovakav zapis:

TXT "v=spf1 ip4:193.198.189.14 -all"

koji bi značio da mail može slati samo host 193.198.189.14. Dakle, u tom zapisu nemamo ni mx ni a ni ptr.

Članak kaže:

mx            određuje tip zapisa, ovo je "mail exchanger", može biti i A i PTR.

što ja shvaćam kao da iza v=spf1 mora doći ili mx ili a ili ptr jer to označava tip tog zapisa, a to je netočno. Iza v=spf1 se navode oznake koje predstavljaju tzv. mehanizme za slanje maila za dotičnu domenu: Mechanisms can be used to describe the set of hosts which are designated outbound mailers for the domain.

U članku se navodi samo jedan primjer (barem dok se ne spomenu oni primjeri iz prakse). Isti taj primjer autor je raščlanio, pa je napisao za "mx" da "određuje tip zapisa", htijući reći da se to odnosi na "tip zapisa u DNS-u". Nigdje ne spominje da je to nešto obavezno, samo je raščlanio vlastiti primjer. Da je mogao preciznije/opširnije napisati - mogao je, ali ništa u primjeru nije pogrešno (a to je najbitnije).