DKIM és Postfix

kecsi küldte be h, 2009-06-22 13:39 időpontban

Domain Key Identified Mail (DKIM) szolgáltatás hozzáad a kimenő levelek fejlécéhez egy aláírást amivel azonosítja azokat, hogy valóban a mi domainünk levelező remdszere küldte a levelet. Miután a publikus kulcsot hozzáadtuk a DNS szerverünkbe mint TXT rekordot bárki tudja ellenőrizni, hogy a mi tartományunkból küldött levél valóban a mi szerverünkről érkezett-e vagy sem.

A rendszer konfigurálását szeretném leírni a továbbiakban.

Mindenzt debian rendszeren meglévő postfix szerver módosításával teszem.
Először telepítsük fel a dkim-filter csomagot amit használni fogunk a domain key hozzádásához leveleinkhez.
apt-get install dkim-filter
(Debian Etch 4.0 alatt backports.org etch-backports repóból. Lenny alatt már nincs ilyen gond.)

Szerkesszük meg az alap konfigurációs állományt /etc/dkim-filter.conf
Ha több domaint kezel a rendszerünk akkor érdemes a KeyList         /etc/dkim-keys.conf sort kommentezését megszüntetni. Majd ezt az állományt létre is kell hozni. De előtte a /etc/dkim-filter/ könyvtárba kell generáljunk privát és publikus kulcsokat domainenként. (Megjegyzendő azonos is lehet a kulcs amivel aláírjuk a domaineket...)
A kulcsok létrehzásához használjuk a dkim-genkey -b 1024 -d pelda.hu -s selector0 parancsot.

A létrehozott kulcsokat egyesével soronként adjuk be a már korábban emlegettt kulcs lista állományba(/etc/dkim-keys.conf). pl egy sor így nézzen ki:
*@pelda.hu:pelda.hu:/etc/dkim-filter/selector0
Lehet hogy modosítanunk kell a /etc/default/dkim-filter állományon is. Pl. így adhatjuk meg hogy milyen porton hallgasson a szolgáltatás.
SOCKET="inet:8891@localhost"

kész a konfigurálás {újra}elindithatjuk a dkim-filter szolgáltatást így:
/etc/init.d/dkim-filter {re}start

Ne felejtsük a DNS szerveünkbe létrehozni a TXT rekordot aminek az értékét a generált kulcs melletti pl. /etc/dkim-filter/selector0.txt állományból vehetjük.

Végül kezdjük el használni a levelező szerverünkkel a frissen bekonfigurált szolgáltatást.
Adjuk pl a vegére az /etc/postix/main.cf állományba a következőt.

  1. <br />
  2. #DKIM<br />
  3. milter_default_action = accept<br />
  4. milter_protocol = 3<br />
  5. #smtpd_milters = unix:/var/run/dkim-filter/dkim-filter.sock<br />
  6. #non_smtpd_milters = unix:/var/run/dkim-filter/dkim-filter.sock<br />
  7. smtpd_milters = inet:localhost:8891<br />
  8. non_smtpd_milters = inet:localhost:8891<br />

Mire jó ez az egész? Hát ugye pl gmail, yahoo rendszerek fel fogják ismerni az aláírást és ellenőrzik azt így kevésbé minősítik leveleinket SPAMnek. Ilyen sort kell keressünk pl a gmail-re érkezett leveleinkben:
Authentication-Results: pelda.hu; dkim=pass (1024-bit key) header.i=@gmail.com; dkim-asp=none

csarlee küldte be h, 2009-06-22 16:13 időpontban

Permalink

Nagyon jó ez a leírás, köszönet érte. Ami viszont gond az egész DKIM dologgal az az, hogy ezt egy spammer is kényelmesen meg tudja csinálni. Beregisztrál egy domaint, beállítja a DKIM-et ahogy a nagy könyvben írva vagyon aztán nekiáll spammelni ész nélkül...

Igazad van ha a spammer saját domain alól akar leveleket küldeni ezt meg tudja tenni továbbra is... ahogy írod. Erre sajna én nem tudok orvosságot.

De szerintem a saját domain védelmében érdemes a DKIM-et kiépíteni/bekonfigurálni:
1. Így a spammer/féreg/bármi nem tud a te címedről levelet küldeni. Azaz tud, csak te egy szabályban rögzítetted és nyilvánosságra hoztad a névszerveredben hogy ez a levél valószínűleg nem tőled származik.
2. A DKIM további előnye, hogy működik a továbbküldött(forward) leveleknél is. Ugye benn marad az aláirás a levélben továbbküldéskor. Az SPF-fel ellentétben ami csak azt mondja meg hogy melyik szerver engedélyezett xz domain leveleinek kiküldésére. De ha egy másik szerver küldi tovább a levelet gondok elveszik az ellenőrzés lehetősége...

egymonk küldte be k, 2009-06-23 11:16 időpontban

Permalink

Azért nem teljesen felesleges. Egyrészt jobb helyeken regisztráció pénz, még ha nem is sok, és meg kell mondani, hogy ki vagy, tehát hátsón is lehet billenteni. A karácsony szigeteki tartományt meg egy-az-egyben letilthatja akinek nincs dolga a szigeteken.

A szolgáltatás a spammerek (vírusírók) egyik legkedveltebb fegyverét, a hamis emailcimeket hivatott megfékezni és mint ilyen nagyon is hasznos. Gondolom az antibiotikumok létjogosultságát sem kérdőjelezed meg holott például a vírusokra vagy a gombákra közismerten teljességgel hatástalan.

Nem azt mondom hogy haszontalan a DKIM, hiszen egyértelműen azonosítható a feladó illetve nyomon követhetők a levelek is. De ehhez az kell, hogy világméretűen elterjedjen másrészt a pl. botnetekből, zombigépekről küldött levelekkel nem tudsz mit csinálni mert nem zárhatod ki a DKIM nélkül leveleket küldőket.
Egyébként tényleg egy jó dolog, ha elterjed akkor a spammerek szedhetik a sátorfát...

A botnetek ellen teljesen más védekezés a javallott. pl. azon küldőktől akiknek nincs reverse DNS-e avagy a neve sok részletből áll (pl ize.nemfixip.dialup.hu) (3-nál több részletből) nem fogadom el a leveleket első próbálkozásra hanem visszautasítom azaz időlegesen kizárom (temporary rejected) pl 1 órára... majd ha mindvégig próbálkozik elfogadom. Szóval 1 óra késéssel jön be a levél ami a spammereknek nem éri meg és könnyebb célpontok felé veszik az irányt.

Ha érdekel leírom mien szoftverrel lehet ezt megcsinálni postfix-en.