Közel egy éve írtam egy cikket a Mailcow nevű dockeres levelező rendszerről, ahol ígéretet tettem arra, hogy később írok egy cikket azokról a rekordokról, amik szükségesek egy levelező szerver üzemeltetéséhez. Ma, amikor a medencében áztattam magam, beugrott, hogy adós vagyok ezzel a témával 🙂
Miért van szükség MX, PTR, SPF, DKIM és DMARC rekordokra a levelezésben?
Az e-mail rendszerek működése sokkal összetettebb, mint elsőre tűnhet. A biztonságos és megbízható levelezéshez DNS rekordokra van szükség, amelyek segítenek eldönteni, hogy egy e-mail hiteles forrásból érkezett-e, és kinek kell kézbesíteni.
A következő rekordok segítik a biztonságot, kézbesíthetőséget és a spam elleni védelmet:
1. MX rekord (Mail eXchanger)
Mit csinál?
Az MX rekord határozza meg, hova érkezzenek az adott domainre küldött e-mailek.
Példa:
txt example.com. IN MX 10 mail.example.com.
Hol kell beállítani?
- A domain DNS zónájában (általában a domain regisztrátornál vagy DNS-szolgáltatónál).
- A cél (mail.example.com) egy A rekordon keresztül IP-címet kell mutasson.
Kinek a dolga?
- A domain tulajdonosának vagy a rendszergazdának, aki az e-mail szervert üzemelteti.
2. PTR rekord (Reverse DNS vagy fordított feloldás)
Mit csinál?
A PTR rekord az IP-címhez tartozó domain nevet adja vissza, ezzel lehetővé téve az e-mail szerver azonosítását.
Miért fontos?
- A legtöbb spam-szűrő ellenőrzi, hogy az e-mail küldő szerver IP-címe visszafordítható-e érvényes domainre.
- Ha nincs PTR, vagy nem stimmel, a leveled spamként végezheti vagy visszapattan.
Hol kell beállítani?
- A szerver IP-címéhez tartozó fordított DNS zónában, amit az adott IP-címet birtokló ISP vagy felhőszolgáltató (pl. Hetzner, OVH, Azure, RackForest, Invitech) kezel.
Kinek a dolga?
- Az IP-cím tulajdonosának (pl. tárhelyszolgáltató) vagy az ő felületükön keresztül a rendszergazdának.
3. SPF rekord (Sender Policy Framework)
Mit csinál?
Meghatározza, mely IP-címek vagy szerverek jogosultak e-maileket küldeni a domain nevében.
Példa:
txt v=spf1 ip4:192.0.2.10 include:_spf.google.com ~all
Hol kell beállítani?
- A domain DNS zónájában, TXT rekordként.
Kinek a dolga?
- A domain tulajdonosának vagy e-mail szolgáltatójának (pl. Google Workspace, Microsoft 365) – de a végső felelősség a domain gazdájáé.
4. DKIM rekord (DomainKeys Identified Mail)
Mit csinál?
Lehetővé teszi, hogy a szerver digitálisan aláírja a kimenő leveleket, így a fogadó fél ellenőrizheti, hogy azok változatlanul érkeztek.
Példa:
txt default._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBg..."
Hol kell beállítani?
- A DNS zónában TXT rekordként, egy adott selector (pl.
default
) alatt.
Kinek a dolga?
- Az e-mail szerver üzemeltetőjének, vagy a felhőalapú levelezőszolgáltató (pl. Google, Microsoft) utasításai szerint a domain tulajdonosának.
Hogyan kell generálni?
2048 bites RSA kulcspár generálása Linuxon parancssorban:
openssl genrsa -out dkim_private.key 2048
openssl rsa -in dkim_private.key -pubout -out dkim_public.key
A dkim_private.key
megy az e-mail szerver konfigurációjába (Postfix, Exim, OpenDKIM, Mailchow stb.),
a dkim_public.key
-ből kell TXT rekordot csinálni, pl.:
Online kulcsgenerátorok:
Selector: a default
szó a selector, ami azt jelenti, hogy a rekord default._domainkey
alá kerül. Lehet bármi, csak egyezzen a levelezőszerver beállításaival.
5. DMARC rekord (Domain-based Message Authentication, Reporting and Conformance)
Mit csinál?
Összehangolja az SPF és DKIM működését, és utasítást ad a fogadó szervereknek, hogyan kezeljék azokat az e-maileket, amelyek nem felelnek meg az ellenőrzésnek.
Példa:
txt _dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:report@example.com"
Hol kell beállítani?
- A domain DNS zónájában,
_dmarc.
prefix alatt TXT rekordként.
Kinek a dolga?
- A domain tulajdonosa vagy rendszergazdája, jellemzően az SPF/DKIM beállítás után.
Ha mindent megcsináltunk végezzük el pár tesztet*
* vegyük figyelembe, hogy ha módosítunk egy DNS rekordot, tipikusan 1 órának el kell telnie, mire a módosított rekordjainkat a külvilág frissíteni fogja!
Mindegy, hogy webmail-t, thunderbird-öt, outlookot, vagy parancssort használunk, egy a lényeg, küldjünk egy üres levelet arra a címre, amit ez az oldal mutat nekünk:

Pár másodperc múlva kattints a View Results gombra:
Ha ezt látod, még nem érkezett meg a leveled:

Aggodalomra semmi ok, kicsit várj, majd frissítsd az oldalt (F5):
Ehhez hasonlót fogsz látni:

Kicsit görgess lentebb, a minket érdeklő adatok ott lesznek:

Ez a DKIM és SPF rekordokat ellenőrzi, és ráfuttat egy SpamAssassin nevű népszerű SPAM ellenőrző szoftvert is, ami tisztának jelölte a levelet.
A következő teszt, küldj egy levelet egy gmail címre, nyisd meg, majd a levél jobb szélén található három pöttyös menüre kattintva válaszd az Eredeti megjelenítése opciót:


És végezetül az utolsó teszt, nyissuk meg ezt a linket, majd küldjünk levelet az ott látható címre:

Pár másodperc múlva nézzük meg a kapott pontszámot:

Ugye, hogy nem is lehetetlen saját levelező szervert készíteni?
Ha nálad kevesebb, nyisd meg a problémás részeket, és végezd el az ajánlott finomhangolást.
Van egy jó hírem a Mailcow rendszergazdáinak
Az összes DNS bejegyzést egy gombnyomásra elkészíti nekünk! Lépjünk be az admin konzolba, válasszuk ki a Beállításokat:

Majd a kívánt domain jobb szélén látható DNS gombra kattintsunk:

Az összes DNS rekord megjelenik a képernyőn, csak be kell másolni az általunk használt DNS szolgáltató rendszerébe:

Nézzük sorjában a bejegyzéseket
- A levelező szerver neve. Ez egy „A” rekord. Nem feltétlen kell megegyeznie a levelezéshez használt domain-nel! Pláne, ha több domaint is kezelsz 🙂
- A levelező szervered „PTR” rekordja, ezt az ISP-d állítja be, vagy Te, ha erre kapsz lehetőséget egy webes felületen.
- Ugyanaz, mint az 1., csak ez IPv6. Ha a szerverednek van IPv6 címe, célszerű beállítani.
- Ugyanaz, mint az 2., csak ez IPv6. Ha a szerverednek van IPv6 címe, célszerű beállítani.
- Soha életemben nem használtam, opcionális. Nálam azért fut hibára, mert a szolgáltatóm blokkolja a 25-ös portot (mivel a bemutatásra szolgáló Mailcow itthon fut a laboromban).
- Ez a levelező domain-ed „MX” rekordja. Kötelező!
- Opcionális. Bizonyos levelező kliensek ez alapján automatikusan be tudják állítani a paramétereket, persze ehhez kell egy megfelelően preparált html fájlt is készíteni, és feltenni arra a webszerverre, ahol a levelező szerver is fut.
- Opcionális. Tulajdonképpen a Mailcow hoszt nevét és portját írja le. A labor nem érhető el kintről, élesben pedig nem ezen a porton fogod elérni, szóval ne is foglalkozz vele.
- Ugyanaz, mint a 7.
- „SPF” rekord. A sor végi „2”-es nem a része a rekordnak, azzal jelzi, hogy opcionális, ami mára inkább kötelező, hiszen a legtöbb levelező szerver ellenőrzi ezt a rekordot is.
- „DMARC” rekord. A sor végi „2”-es nem a része a rekordnak, azzal jelzi, hogy opcionális, ami mára inkább kötelező, hiszen a legtöbb levelező szerver ellenőrzi ezt a rekordot is.
- „DKIM” rekord. Ez a publikus része, ezt kell bemásolni a DNS szerveredre. A privát párját a Mailcow már beállította, azzal neked további dolgod nincs!
Elvileg mindent leírtam, a tesztek alapján én mindent megtettem, hogy tőlem átvegyék a leveleket, ha úgy érzed, hogy valamit kihagytam, vagy nem érthetően írtam le, bátran írj kommentet!