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.

<br />
#DKIM<br />
milter_default_action = accept<br />
milter_protocol = 3<br />
#smtpd_milters = unix:/var/run/dkim-filter/dkim-filter.sock<br />
#non_smtpd_milters = unix:/var/run/dkim-filter/dkim-filter.sock<br />
smtpd_milters = inet:localhost:8891<br />
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

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...

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.