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

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.

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
SigningTable /etc/opendkim/signingtable
ExternalIgnoreList /etc/opendkim/trustedhosts
InternalHosts /etc/opendkim/trustedhosts

Pozor, je to case-sensitive.

3. Upravte thrustedhosts

nano /etc/opendkim/TrustedHosts

pridajte tam

127.0.0.1
localhost
a svoju ip

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

SOCKET="inet:[email protected]" # 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/
cd /etc/opendkim/keys
opendkim-genkey -r -d lucas03.com
mv default.txt lucas03.public
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

default._domainkey.lucas03.com lucas03.com:default:/etc/opendkim/keys/lucas03.private
default._domainkey.betstavky.com betstavky.com:default:/etc/opendkim/keys/betstavky.private
default._domainkey.ym.sk ym.sk:default:/etc/opendkim/keys/ym.private
default._domainkey.lolco.net lolco.net:default:/etc/opendkim/keys/lolco.private
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
betstavky.com default._domainkey.betstavky.com
ym.sk default._domainkey.ym.sk
lolco.net default._domainkey.lolco.net
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
Typ:TXT
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
milter_protocol = 6
smtpd_milters = inet:localhost:12345
non_smtpd_milters = inet:localhost:12345

Reštartovať postfix

postfix reload

Debugging = hľadanie chýb

Samozrejme mail logy

cat /var/log/mail.log
cat /var/log/mail.warn
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 " [email protected]

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

Validating Signature
result = fail
Details: message has been altered

Odosielal som maily s týmito headermi

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

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.