Skip to content

Náš mailserver, náš … sluha.

Ale aby nám náš mailserver mohl dobře sloužit, je potřeba, abychom ho správně nastavili. A o tom, a dalších věcech potřebných k provozování mailserveru, bude dnes tento blog.

Nejdříve chci upozornit, že v článku není popsán postup instalace mailserveru, není to jeho účel.

Mailserver máme, takže co teď? PTR záznam přece!

Náš nový mailserver potřebuje ke štěstí ještě několik věcí. Například potřebuje mít shodný překlad jména na IP adresu a opačně. Zkusíme to tedy s linuxway.cz:

host linuxway.cz
linuxway.cz has address 89.103.96.49
linuxway.cz mail is handled by 10 smtp.linuxway.cz.

Vidíme, že maily pro mojí doménu obstarává server smtp.linuxway.cz

host smtp.linuxway.cz
smtp.linuxway.cz has address 89.187.143.127
smtp.linuxway.cz has IPv6 address 2a01:5f0:c001:122:216:3eff:fe01:17f

A zde vidíme, že smtp.linuxway.cz má dvě adresy – ipv4 a ipv6.

host 89.187.143.127
127.143.187.89.in-addr.arpa domain name pointer smtp.linuxway.cz.

Zde je vidět, že zpětný překlad nám řekne, že dané ip adresa odpovídá jménu smtp.linuxway.cz

host 2a01:5f0:c001:122:216:3eff:fe01:17f
f.7.1.0.1.0.e.f.f.f.e.3.6.1.2.0.2.2.1.0.1.0.0.c.0.f.5.0.1.0.a.2.ip6.arpa domain name pointer smtp.linuxway.cz.

A zde vidíme, že i ipv6 adresa odpovídá.

Je tedy důležité, aby fungoval překlad oběma směry a aby si záznamy vzájemně správně odpovídaly. Často se stává, že pokud provedete zpětný dotaz na ip adresu mailserveru, dostanete odpověď, která nesouhlasí s jeho doménovým jménem. I přes to Vám můžou emaily fungovat, ale také se Vám často stane, že budou odmítnuty či zahozeny. PTR záznam si nastavíte buď sami, pokud máte vlastní dns server, a nebo přes webové rozhraní poskytovatele, u kterého server máte (serverem se samozřejmě myslí i VPS – virtuální server), a v nejhorším napíšete vašemu poskytovateli, aby vám ho nastavil. Klasické stanice, tzn. koncové počítače uživatelů, nemívají PTR, nebo ho mají nastaven špatně. Z těchto stanic ale odchází slušné množství spamu, pokud jsou zavirované. Kontrolou PTR je možno příjem spamu velmi omezit.

Pokud sami chceme kontrolovat PTR cizích serverů, které s námi komunikují, tak v případě postfixu přidáme volbu reject_unknown_client do smtpd_client_restrictions.

 

PTR máme, postupujeme směr: SPF

SPF znamená Sender Policy Framework a jedná se o TXT záznam v DNS, který říká, odkud z naší domény posíláme maily. V podstatě se jedná o obranu proti falšování domény odesilatele. Znáte to, máte doménu mojefirma.tld a v ní jediný email – frantisek@mojefirma.tld. A jednou vám začnou chodit maily od odesilatele sexyingrid@mojefirma.tld. Ale vy přeci žádnou Ingrid nezaměstnáváte, že :-). Pokud budete mít SPF a váš server bude tento záznam kontrolovat, tak nejen, že se vy zbavíte takovéhoto spamu, ale ani dalším lidem, přátelům, nedojde email např. od frantisek@mojedomena.tld, aniž by ho sám František skutečně vytvořil.

Příklad SPF na linuxway.cz

host -t txt linuxway.cz
linuxway.cz descriptive text "v=spf1 mx ip4:89.103.96.49 -all"

Zde vidíte, že z mojí domény mohou příjít emaily pouze z MX serveru, což je v mém případě smtp.linuxway.cz (jak je vidět nahoře z hlášky „linuxway.cz mail is handled by 10 smtp.linuxway.cz.“) a dále z IP adresy 89.103.96.49. Volba „-all“ (FAIL) znamená, že pokud dorazí email, který daným podmínkám nevyhovuje, měl by být rovnou smazán. Pokud by zde bylo „~all“ (SOFTFAIL), znamená to, že email může projít a je na vás, zda ho propustíte či nikoliv. V SPF záznamu lze tedy použít volby:

  • mx – povolí všechny mx servery, které jsou pro danou doménu definované (viz příklad z linuxway.cz)
  • a – povolí dns záznamy typu A
  • include – povolí servery, které nepatří do naší domény. Mohou to být servery našeho poskytovatele připojení, servery v práci apod. přes které posíláme poštu z vlastní domény
  • ip4 – povolí definovanou ipv4 adresu či celý blok adres
  • ip6 – povolí definovanou ipv6 adresu či celý blok adres
  • exists – pokud se danou doménu podaří přeložit na jakoukoliv adresu, mail projde
  • all – zde se volí „-“ (FAIL – nesouhlasí-li záznamy, zahoď email), „~“ (SOFTFAIL – nesouhlasí-li záznamy, je na tobě, zda mail propustíš), „?“ (NONE, neutral, v podstatě pokud používáte nějaké bodové hodnocení, tak byste na tento stav neměli brát ani kladný, ani záporný bod), „+“ (PASS – projde vždy, vhodné tak maximálně na testování)

Tak, to bychom měli SPF. Vlastně ne, ještě zbývá jedna drobnost: HELO SPF záznam. Náš mailserver se připojuje k ostatním a přes HELO jim oznamuje, kdo je. Můj se například připojí a zahlásí se HELO smtp.linuxway.cz. Jenže takto se může zahlásit třeba spamerův server, který nám vůbec nepatří a který předstírá, že jsme my, aby se mu podařilo protlačit svůj spam. My na něj ale vyzrajeme a do DNS si zapíšeme další TXT záznam, tentokrát přímo pro smtp.linuxway.cz, tento záznam bude mít hodnotu v=spf1 a -all.

host -t txt smtp.linuxway.cz
smtp.linuxway.cz descriptive text "v=spf1 a -all"

Zde se kontroluje, zda server smtp.linuxway.cz s námi komunikuje opravdu z adresy 89.187.143.127 a ne z nějaké jiné. Pokud vše souhlasí, mail projde. Na výpisu výše vidíte, že můj server tento záznam skutečně má.

Pokud provozujete vlastní DNS server, například BIND, zde je příklad, jak budou hodnoty zapsány v něm. Tento příklad bude podobný i když budete hodnoty vkládat například do nějakého webového rozhraní pro správu DNS.

linuxway.cz.         IN   TXT   "v=spf1 mx ip4:89.103.96.49 -all"
smtp.linuxway.cz.    IN   TXT   "v=spf1 a -all"

Pokud chcete kontrolovat spf záznamy i na vašem smtp serveru tzn. ověřovat odesilatele, tak v případě postfixu nainstalujte postfix-policyd-spf-perl. Do master.cf přidejte:

spfcheck  unix  -       n       n       -       -       spawn
        user=nobody argv=/usr/bin/perl /usr/sbin/postfix-policyd-spf-perl

a do main.cf přidejte check_policy_service unix:private/spfcheck do sekce smtpd_recipient_restrictions (ale až za reject_unauth_destination).

DKIM (DomainKeys Identified Mail)

Další věcí vhodnou k vylepšení našeho mailserveru je DKIM. Jedná se o ověřování klíčů na úrovni DNS. Je to podobné, jako když svoje emaily podepisujeme pomocí PGP, toto je ovšem na úrovni domény a PGP je na úrovni uživatele. Při odesílání emailu přidá náš mailserver do zprávy další hlavičku obsahující DKIM-Signature a spočítá hash emailu. Příjemcův server poté provede kontrolu hlavičky přes dotaz na naše DNS, kde najde náš veřejný klíč a díky hashi ověří, zda nebyl email po cestě změněn.
Pokud používáte například gmail a zasíláte email z ne-gmail domény tzn. nastavíte si například svou doménu, gmail použije vlastní dkim údaj a bude tak jasné, že mail je sice podepsaný, ale někým jiným, což není nutně na škodu. K ověření této skutečnosti na straně klientského softwaru jako je třeba Thunderbird slouží skvělý plugin „DKIM Verifier“, který je ke stažení na addons.mozilla.org/cs/thunderbird.
Můžeme se přesvědčit, že moje doména DKIM obsahuje:

host -t txt default._domainkey.linuxway.cz
default._domainkey.linuxway.cz descriptive text "v=DKIM1\; g=*\; k=rsa\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDapqYMWhrjdmUh4/AO9SOMnFqaKe95veg5WEOxLR6p0bvgUN6DDdYI1dB5cvdnTzIhQBYZaUzbR0Ofofn9Vp0sfCydYm22Ool7klZfY/DU6TKTqmunqQCRleatQYo5mXE+0l2k3ly/aXsGQg5sM5NW8azb0j3YcgvMQA0BXOgUtwIDAQAB"
host -t txt _adsp._domainkey.linuxway.cz
_adsp._domainkey.linuxway.cz descriptive text "dkim=discardable"

V prvním příkladu je vidět, že doména má dkim. Ve druhém příkladu je vidět nastavená politika. Možnosti nastavení ADSP (Author Domain Signing Practices)  jsou:

  • unknown – politika neexistuje
  • all – emaily jsou podepsané a pokud nejsou, je na vás, co s nimi uděláte (je to podobné jako SOFTFAIL u SPF)
  • discardable – maily jsou vždy podepsané, nepodepsané smaž (jako FAIL u SPF)

Pokud ode mne dostanete email, můžete se podívat na hlavičky a uvidíte zde DKIM-Signature:

DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=linuxway.cz;
	s=default; t=1386921666;
	bh=vrWArWebDYJ3xCl62kCc9N/Bd9zjm/T2Ds1CjTFjV+4=;
	h=From:To:Subject:Date:In-Reply-To:References;
	b=NTB+9r9KXrxnVbCDzQFWUQjCiEeUPIbLieLHl3Afh6EBplHc8j/W8OpiQ5qEHRpi3
	 efYlABAwLAzukTTF8JlaxnYX8tdAMhLVGv8kqKmNRcFH256lrDtqPNcD0FFkYpDZzA
	 ygBwT4lB1T2QndcumH+jVA5nZA8q5B+UlJFUU3EA=

Všimněme si tagu d=linuxway.cz a s=default. Jedná se o doménu a selektor. Z těchto dvou tagů si cílový mailserver složí dns dotaz ve tvaru default._domainkey.linuxway.cz a dostane odpověď, kterou vidíte výše z příkladu výpisu TXT.

Teď se podíváme, jak si DKIM nastavit na serveru. V debianu existují dvě implementace: dkim-filter a opendkim. Dkim-filter je obsolette, doporučuji používat opendkim. Po instalaci je potřeba sáhnout do configů následovně:

/etc/opendkim.conf
obecná konfigurace

# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.

# Log to syslog
Syslog                  yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask                   002

# Sign for example.com with key in /etc/mail/dkim.key using
# selector '2007' (e.g. 2007._domainkey.example.com)
#Domain                 example.com
#KeyFile                /etc/mail/dkim.key
#Selector               default

# Commonly-used options; the commented-out versions show the defaults.
#Canonicalization       simple
#Mode                   sv
#SubDomains             no
ADSPDiscard             yes
KeyTable                /etc/opendkim-keys.conf
SigningTable            /etc/opendkim-signing.conf

Volba ADSPDiscard je v novější verzi opendkimu nahrazena volbou ADSPAction a hodnota by byla v tomto případě discard.

/etc/opendkim-keys.conf
V souboru /etc/postfix/dkim/linuxway.cz/default máme uložen klíč

default._domainkey.linuxway.cz linuxway.cz:default:/etc/postfix/dkim/linuxway.cz/default

/etc/opendkim-signing.conf
seznam domén, které podepisujeme

linuxway.cz default._domainkey.linuxway.cz

V souboru /etc/default (debian) je potřeba odkomentovat volbu:

SOCKET="inet:8891@localhost"

A pokud máme postfix, tak v main.cf přidáme volby:

smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Restartujeme opendkim a postfix.

Dále je potřeba vyrobit si klíče a potřebné DNS záznamy. Slouží k tomu příkaz:

opendkim-genkey -r -d domena.tld

Příkaz nám vyrobí nejen klíč do souboru default.private, ale i záznam, který pak snadno vložíme do DNS

cat default.private 
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDwD2Po7yqhnvQ7gPJQWTJYQcxBN+yOzD1FpSdlfMw/g7R1kt4F
8NGc6Q4x0Xpjxerd4wJyuN/4yLVZA+VKwLaOzhbN6ZlIRlhDSx3r+lB6e3q2ifq9
+5wM8ecc/+fKFrIkB8c8lcAmLFRY3S8h/k28xYnhs/9vqozNj713fgE7xwIDAQAB
AoGAGkVU5bTmsXE3wRtHaUuZmtb4h1qbZLUtL2X3fb++imTbZtJ/wZ6tEcLfbsxB
3JFYNpgVOIDK4er1DZzDhv63+4qDSWgoWI/nnoGNiI0hMNT2Wmk1CC6mgw6AOwY6
LtdewH2IgXPLjPC6WbJi8ucf7qZ5Kpaef2tjDFcrDl8B9eECQQD+YpYurTOCcRmf
84j4jbCATp0sfWMYhPOi25bDk0O3BwOccx05FZkawh3R0JcOkUWIMF05UwImJBGC
wnJYsRozAkEA8ZWF/fcMnjQIpSrh+9hHQ03RIq9rmnaOWaLQZGhVM+vz3M0XWw9T
YGjho7CX/3u5ZwwYHmaJbzCh/HCdIU2sHQJBAL6xWLOU0tAtyG/HOB5a2LzWMaxw
MiDnSVwEEHh7pH9HmsVk5bstHaCZc5EdNJ+O9vioiLm4KBw/XYEQEne6C1ECQQC8
94eC2v7MtMjaYUu5EjjT5YekCPEzNm8soBU/pPiYj4UF/oq5WKiQLhnpT1XlqqKg
fy5SgUQZbEIY0wGlrjrlAkEAwYAzqiuxiF9fJ9jQLaGcBf850Uf/SCaII9EI+pZ5
Gvb1IT37a7jC1ME0yWZvKLKEBW5/i1F1LVMqEXHOXH454w==
-----END RSA PRIVATE KEY-----
cat default.txt 
default._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDwD2Po7yqhnvQ7gPJQWTJYQcxBN+yOzD1FpSdlfMw/g7R1kt4F8NGc6Q4x0Xpjxerd4wJyuN/4yLVZA+VKwLaOzhbN6ZlIRlhDSx3r+lB6e3q2ifq9+5wM8ecc/+fKFrIkB8c8lcAmLFRY3S8h/k28xYnhs/9vqozNj713fgE7xwIDAQAB" ; ----- DKIM key default for domena.tld

A zde opět příklad, jak budou tyto hodnoty zaneseny do BINDu:

default._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDwD2Po7yqhnvQ7gPJQWTJYQcxBN+yOzD1FpSdlfMw/g7R1kt4F8NGc6Q4x0Xpjxerd4wJyuN/4yLVZA+VKwLaOzhbN6ZlIRlhDSx3r+lB6e3q2ifq9+5wM8ecc/+fKFrIkB8c8lcAmLFRY3S8h/k28xYnhs/9vqozNj713fgE7xwIDAQAB"
_adsp._domainkey IN TXT "dkim=discardable"

Tímto máme DKIM hotov – bude nám podepisovat zprávy a bude také kontrolovat DKIM příchozích zpráv.

 

Greylist

Greylist je jednoduchá metoda jak se zbavit velkého množství spamu. Spočívá v tom, že příchozí zprávu nejprve odmítneme a přijmeme jí až tehdy, když se nám jí cizí mailserver pokusí znovu doručit. Většina spammerů se neobtěžuje posílat zprávu vícekrát, pokusí se jí doručit jednou a když to nevyjde, jdou prostě o dům dál. Nevýhoda tohoto řešení spočívá v tom, že email nám není bezprostředně doručen, je zde časová prodleva. Ta může být v řádu minut až hodin a je závislá na nastavení odchozího mailserveru. Z praxe vím, že tato prodleva nebývá větší než půl hodiny, většinou jsou to spíše minuty. Abychom mohli greylisting použít, je třeba nainstalovat program postgrey. V tomto programu si můžeme nastavit prodlevu mezi prvním pokusem o doručení a skutečným přijetím zprávy. Osobně nastavuji na 1 minutu nebo max. 5 minut. Pokud bychom nastavili příliš dlouhou dobu, cizí mailserver by se mezi tím pokusil zprávu několikrát doručit a pak by jí vrátil odesilateli jako nedoručitelnou. Cizí server totiž neví, jakou dobu jsme nastavili a ani se to nemůže nijak dozvědět.

V souboru /etc/default/postgrey (debian) nastavíme:

POSTGREY_OPTS="--inet=10023 --delay=60"
POSTGREY_TEXT="Greylist at linuxway.cz in progress, try it in 5 minutes again."

Nastavili jsme, aby postgrey naslouchal na portu 10023 a aby pouštěl zprávy po minutě. Dále jsme nastavili zprávu, kterou náš server zašle na cizí mailserver. Tato zpráva je čitelná ve frontě mailů – může si jí přečíst správce serveru, pokud je to potřeba. A restartujeme postgrey.

V postfixu poté přidáme do smtpd_recipient_restrictions volbu:

check_policy_service inet:127.0.0.1:10023

A restartujeme postfix.

 

SRS

Sender Rewriting Scheme je způsob, jak obejít SPF v případě, že potřebujeme z našeho mailserveru přeposílat emaily jinam tzn. když na náš server přijde email od zákazníka a tento email neskončí na serveru ve schránce, ale je přeposlán někam dál. Pokud má doména zákazníka aktivní SPF, tak tím vznikne problém a SRS tento problém pomáhá řešit. O SRS jsem napsal separátní blog.

To by bylo pro dnešek vše. Neříkám, že si každý musí kupovat vlastní doménu a stavět vlastní mailserver. Na druhou stranu se vždy najde lepší řešení než freemail.

Přeji vám mnoho úspěšně doručených emailů a žádné spamy 🙂

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Time limit is exhausted. Please reload the CAPTCHA.