Email z VPS vám chodí do spamu? Návod na inštaláciu Opendkim

September 23, 2012

Posielam maily z vps (virtual private server) väčšinou na svoje emailové účty, no často sa mi stávalo, že dôležité informácie mi končia v spame. Gmail ma pomerne striktnú anti-spam policy a stačilo do mailu pridať jeden odkaz a hneď sa mail objavil v spame. Filter to samozrejme nerieši, lebo tie emaily chcem v budúcnosti posielať možno viacerým užívateľom alebo na svoju inú adresu. Už som si povedal, že toho spamu je dosť a nejako to vyriešim.

spam mail 300x111

Po krátkom googlení som našiel, že pre moje potreby mi bude stačiť DKIM (DomainKeys Identified Mail). Ktorý jednoducho vďaka rsa podpisu a dns txt záznamu zistí, či som ten mail poslal ja z mojej domény a tak by už do spamu nemal ísť. Ďalšou super výhodou používania DKIM je, že sa vám obrázky zobrazia automaticky a nie až po ich povolení. Google totiž nezobrazuje obrázky v mailoch, až po vašom povolení.

**Images are not displayed.**
Display images below – Always display images from [email protected]

Pri použití dkim sa obrázky v maily automaticky zobrazia, takže máte možnosť okamžite zaujať obrázkami, čo na moje prekvapenie veľa firiem nerobí. O to to bude účinnejšie 🙂 Email marketing síce nevyužívam, ale som si vedomý jeho sily.

Tak poďme na návod, ako nainštalovať podporu DKIM. Ja som to robil s postfixom na debiane. Máte dve možnosti, nainštalovať si dkim-filter (na iných verziách linuxu dkim-milter) alebo opendkim. Dkim-filter sa už pár rokov nevyvíja a ani podpory sa nedočkáte. Preto odporúčam opendkim (aj keď dkim-filter mi šiel tiež).

1. Inštalácia opendkim (pridajte sudo ak nie ste root)

apt-get install opendkim

2. Upravte konfiguračný súbor

nano /etc/opendkim.conf

A pridajte tento riadok (ak vám stačí podpisovať jednu doménu, nepotrebujete keytable, stačí odkomentovať a editnúť domain, selector a keyfile)

KeyTable /etc/opendkim/keytable<br></br>SigningTable /etc/opendkim/signingtable<br></br>ExternalIgnoreList /etc/opendkim/trustedhosts<br></br>InternalHosts /etc/opendkim/trustedhosts

Pozor, je to case-sensitive.

3. Upravte thrustedhosts

nano /etc/opendkim/TrustedHosts

pridajte tam

127.0.0.1<br></br>localhost<br></br>a svoju ip<br></br>

4. V súbore /etc/default/opendkim odkomentujte socket, ktorým chcete sledovať odchodzie maily. V mojom prípade:

SOCKET="inet:12345@localhost" # listen on loopback on port 12345

To by bolo nastavenie opendkim. Teraz ešte potrebujeme vygenerovať kľúče pre podpisovanie mailov.

5. Vygenerujeme kľúče a premenujeme ich, keďže chceme pridávať viac domén:

mkdir /etc/opendkim/keys/<br></br>cd /etc/opendkim/keys<br></br>opendkim-genkey -r -d lucas03.com<br></br>mv default.txt lucas03.public<br></br>mv default.private lucas03.private

posledné 3 riadky treba spraviť pre každú doménu, ktorú chcete podpisovať. Po pridaní všetkých domén ešte nastavte práva pre opendkim .

chown opendkim:opendkim *

6. Upravíme /etc/opendkim/KeyTable<br></br>

default._domainkey.lucas03.com lucas03.com:default:/etc/opendkim/keys/lucas03.private<br></br>default._domainkey.betstavky.com betstavky.com:default:/etc/opendkim/keys/betstavky.private<br></br>default._domainkey.ym.sk ym.sk:default:/etc/opendkim/keys/ym.private<br></br>default._domainkey.lolco.net lolco.net:default:/etc/opendkim/keys/lolco.private<br></br>default._domainkey.ranky.sk ranky.sk:default:/etc/opendkim/keys/ranky.private

default je selector, ktorý si môžete nastaviť aký chcete. Cesty si nastavte podľa seba, ak ste si privátne kľúče uložili do inej zložky/zložiek.

7. Upravíme /etc/opendkim/SigningTable

lucas03.com default._domainkey.lucas03.com<br></br>betstavky.com default._domainkey.betstavky.com<br></br>ym.sk default._domainkey.ym.sk<br></br>lolco.net default._domainkey.lolco.net<br></br>ranky.sk default._domainkey.ranky.sk

Public kľúče potrebujete nastaviť do dns domény. Ak máte dns mimo svoj server, nastavíte to nasledovne:

Doména:default._domainkey.lucas03.com<br></br>Typ:TXT<br></br>Hodnota:v=DKIM1; g=*; k=rsa; p=MIGfMA0G*dlhersa*pmILzujQIDAQAB

Ak si sami spravujete dns na serveri, stačí pridať vygenerovaný riadok zo súbora domain.public do dns domény.

Spustiť OpenDKIM

/etc/init.d/opendkim start

Nastaviť a reštartovať Postfix ``

nano /etc/postfix/main.cf

pridať tieto riadky

milter_default_action = accept<br></br>milter_protocol = 6<br></br>smtpd_milters = inet:localhost:12345<br></br>non_smtpd_milters = inet:localhost:12345

Reštartovať postfix

postfix reload<br></br>

Debugging = hľadanie chýb

Samozrejme mail logy

cat /var/log/mail.log<br></br>cat /var/log/mail.warn<br></br>cat /var/log/mail.err

Pre viac informácií v logoch sa ešte dá nastaviť v Opendkim debug mode. V súbore /etc/opendkim.conf

LogWhy yes

Otestovať funkčnosť si môžete napríklad tu.

Stačí poslať mail na vygenerovanú adresu s vyplnenou hlavičkou from. Niečo taketo v ssh by malo byť dostatočné.

echo "text, aby to teda neslo hned do spamu" | mail -s "text" -a "FROM: lucas03.com <admin>" [email protected]</admin>

Ja som mal strašne dlho ešte problém s chybou:

Validating Signature<br></br>result = fail<br></br>Details: message has been altered

Odosielal som maily s týmito headermi

$headers = "MIME-Version: 1.0\r\n";<br></br>$headers .= "Content-type: text/html; charset=utf-8\r\n";<br></br>$headers .= "From: Lucas03.com <admin>\r\n";</admin>

V linuxe samozrejme netreba carriage return, takže stačí nahradiť \r\n za \n. Výsledok vyzerá takto:

dkim

To by malo byť všetko, čo som chcel k tomu napísať. Tak good luck v boji so spamom 🙂


Written by Lucas03 , who uses this as diary. Contact at admin[a]lucas03.com