Postfix - podpora TLS a TLSA (DANE)

1.11.2014

Přestože ne všechny SMTP servery používají šifrování pro přenos emailů mezi sebou, je jedině rozumné i u SMTP protokolu šifrování umožnit. Podobně jako u předchozích článků doporučuji nespoléhat se pouze na standarní TLS, které je založeno na X.509 certifikátech, ale dodat mu další level důvěryhodnosti.

Tento článek se tedy bude zabývat dvěmi úrovněmi konfigurace Postfixu: samotným TLS a dále podporou DANE (TLSA).

Předpokládám znalosti konfigurace Postfixu a budu tedy popisovat jen rozdíly od konfigurace, kde ani šifrování, ani DANE konfigurováno není. Stejně tak nepopisuji způsob konfigurace šifrování pro použití mezi klientem, který se vůči Postfixu autentizuje, protoze v tuto chvíli žádné takové klienty nemám a zavázal jsem se, že budu popisovat pouze vyzkoušené fungující nastavení. Nicméně není vyloučeno, že i na toto někdy dojde.

Kvůli Poodle attacku na SSLv3 jsem zařadil do popisu konfigurace TLS i úpravu konfigurace šifrovacích algoritmů.

Tato kapitola možná překvapí, ale protože se věnuji Postfixu na CentOSu 7, tak se musím zabývat i instalací Postfixu z alternativního zdroje, protože DANE Postfix podporuje až od verze 2.11, která v tuto chvíli ve standardních repozitářích obsažena není.

Přidání alternativního repozitáře Postfixu a vlastní instalace

Začneme jako vždy importem klíče repozitáře:

rpm --import http://repos.oostergo.net/RPM-GPG-KEY

Dále vytvoříme konfiguraci samotného repozitáře v /etc/yum.repos.d/postfix.repo:

[postfixrepo]
name=EL-$releasever Postfix repo
baseurl=http://repos.oostergo.net/$releasever/postfix-2.11
enabled=1
gpgcheck=1

Ještě zabráníme “updatu” Postfixu z originálních repozitářů přidáním následujícího řádku do definice repozitáře /etc/yum.repos.d/CentOS-Base.repo:

exclude=postfix-*

Vlastní instalaci Postfixu provedeme jako jeho update příkazem:

yum update

Zde se na chvíli zastavím. Jako při každém updatu jsou místo přepsání existujících konfiguračních souborů vytvářeny nové s příponou .rpmnew, tak je tomu i v tomto případě. Doporučuji tedy porovnat (například příkazem diff) stávající konfigurační soubory a nové, abyste věděli, co se změnilo a mohli na to reagovat (například se zamyslet, zda některé řádky z nových a neobsažené ve stávajících konfiguračních souborech není dobré použít).

Dále z alternativního repozitáře doporučuji nainstalovat ještě jeden balík, který obsahuje dva užitečné scripty pro práci s logy Postfixu a s jeho frontou:

yum install postfix-perl-script

Abychom měli jistotu, že po updatu vše proběhlo tak, jak mělo, doporučuji Postfix restartovat:

systemctl restart postfix.service

a podívat se do logů, zda nastartoval správně.

Pokud ano, můžeme přistoupit k vlastní konfiguraci.

Zprovoznění TLS a DANE spočívá ve dvou krocích:

konfigurace TLS a konfigurace DANE (pro smtp proces - tedy pro případ, kdy Postfix poštu zasílá jiným SMTP serverům) vytvoření TLSA RR v DNS (pro SMTP servery v Internetu, aby si mohli pomocí tohoto záznamu ověřit správnost certifikátu pro účely SMTP komunikace) Pokud by někdo chtěl tento návod použít pouze pro konfiguraci samotného TLS, tak řádky z konfiguračního souboru, které se týkají pouze DANE jsou zvýrazněny odlišnou barvou.

Konfigurace spočívá v editaci souboru /etc/postfix/main.cf; konkrétně v přidání následujících řádků:

#TLS
smtpd_use_tls = yes
smtp_use_tls = yes
smtpd_tls_security_level = may
smtp_tls_security_level = dane
smtp_dns_support_level = dnssec
smtp_tls_note_starttls_offer = yes
smtpd_tls_cert_file = /etc/<cesta k certifikátu serveru>
smtpd_tls_key_file = /etc/<cesta k privátnímu klíči serveru>
smtpd_tls_CAfile = /etc/<cesta k chainu certifikátů CA>
smtpd_tls_received_header = yes
smtpd_tls_loglevel = 1
smtp_tls_loglevel= 1
tls_random_source = dev:/dev/urandom
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtp_tls_session_cache_timeout = 3600s
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache

Myslím, že parametry přidané do konfiguračního souboru mají samovysvětlovací názvy, tudíž netřeba je podrobněji vysvětlovat, až na pár výjímek:

Cesty k privátnímu klíči a certifikátům nahraďte správnými (je možné, že provozujete i jiné služby, které využívají SSL a tedy máte zvoleno nějaké univerzální úložiště (v RHELu a CentOSu se standardně používá struktura podadresářů v /etc/pki/tls). Červeně vyznačené řádky se týkají DNSSECu a DANE, ostatně jak obsah napovídá. Pokud nechcete využívat protokolu DANE, parametr smtp_tls_security_level nastavte na hodnotu “may”, která říká, že se TLS využíváte, ale nutně na tom netrváte. Tím máme konfiguraci hotovu a můžeme přistoupit k restartu Postfixu:

systemctl restart postfix.service

Opět v logách zkontrolujeme, zda restart proběhl v pořádku a pokud ano, můžeme se pustit do další části.

Podobně jako u http použijeme příkaz tlsa (v předchozím článku “Protokol DANE na CentOS 7 pro vyšší bezpečnost https” je popsáno k jakému balíku patří, jak se nainstaluje a co znamenají parametry):

tlsa --create --usage 3 --selector 1 --mtype 1 --certificate /etc/<cesta k certifikátu serveru>  --port 25 --protocol tcp server.domena.cz

Cesta k certifikátu serveru je ta samá cesta jako v konfiguračním souboru Postfixu, který jsme výše upravovali.

Jako výstup dostaneme řádek podobný tomuto:

_25._tcp.server.domena.cz. IN TLSA 3 1 1 d3d9198f3236e7ef47d906a2d48772f330c6ebd4c453002baaea3cc7384400278a

který vložíme do zónového souboru naší domény a zvýšíme sériové číslo v SOA záznamu a provedeme příkaz:

rndc reload

který znovupodepíše zónový soubor a řekne procesu named, aby ho jako nový načetl.

Tím máme nakonfigurováno a můžeme provést test.

Základním testem může být otestování schopnosti komunikace s TLS, k čemuž stačí provést příkaz telnet localhost 25 a zadání EHLO localhost. Pokud ve výstupu uvidíme string STARTTLS, můžeme si být jisti, že náš Postfix TLS nabízí.

Dalším testem může být zaslání emailu na adresu, kterou obsluhuje server, který TLS také podporuje, např. servery gmailu. Podíváme-li se potom na hlavičky emailu, který nám (a pokud) na gmail došel, v případě funkčního TSL uvídíme v hlavičce Received string, který obsahuje “TLS”, například:

(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);

Stejně tak můžeme dát na takový email Reply a podívat se na hlavičky u takto přišedšího emailu. Opět uvidíme podobnou hlavičku.

Dalším prověřením funkčnosti je u naší konfigurace kontrola logů. Pokud se v nich objevují zprávy o TLS, máme vyhráno.

Co se týká DANE, tak pokud v logu o odchozím SMTP provozu najdeme u TLS zpráv string jako “Verified” nebo “Untrusted”, můžeme si být jisti, že Postfix provádí kontrolu vůči TLSA RR v DNS.

Pro kontrolu, zda máme TLSA RR správně vytvořen na naší straně, doporučuji URL: https://www.tlsa.info/.

Pro podrobnější popis parametrů Postfixu související s TLS a DANE se můžete podívat přímo na stránky Postfixu: http://www.postfix.org/TLS_README.html.

  • obsah/bezpecnost/centos_dane_postfix.txt
  • Last modified: 2018/10/17 22:02
  • by profors