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<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:
To by malo byť všetko, čo som chcel k tomu napísať. Tak good luck v boji so spamom 🙂