Pro odesílání pošty slouží protokol SMTP, ovšem Postfix nastavený podle dosavadních instrukcí, které jste nalezli v tomto seriálu, vám umožní odesílat poštu, pouze jste-li přihlášeni na server (leda byste si do mynetworks
přidali všechny externí počítače, ze kterých odesíláte poštu, což by však bylo krajně nepohodlné).
Za tímto účelem by bylo dobré implementovat SMTP autentifikaci, v rámci které se budete moci odkudkoliv k serveru přihlásit a jako přihlášený uživatel odeslat poštu. Jelikož posílat jméno a heslo přes internet v textové podobě je z bezpečnostního hlediska velkou chybou, měli byste také implementovat TLS.
Výběr pošty lze zrealizovat dvěma způsoby: prostřednictvím protokolů POP3 nebo IMAP4. Serverů zajišťujících POP3 a IMAP4 přístup k poštovním schránkám je více, já se zaměřím na Dovecot.
Webová rozhraní
Kromě výše uvedených metod ještě přicházejí v úvahu webová rozhraní. Přímo v distribuci Debianu naleznete jednodušší Squirrelmail a komplexnější a „hezčí“ Roundcube. Ta budou představena a zprovozněna v některém z dalších dílů.
Odesílání pošty, SMTP AUTH a TLS
Autentifikaci neprovádí samotný Postfix, nýbrž démon saslauthd
. Ten nainstalujete tímto způsobem:
aptitude install sasl2-bin
Následně upravte soubor s výchozími parametry démona saslauthd
:
vim /etc/default/saslauthd
Řekněte startovacím skriptům, aby při startu systému rozběhli i saslauthd
(ve výchozím stavu po instalaci saslauthd nenajede):
START=yes
Jelikož Postfix sám běží v chrootu, je nutné přemístit pojmenovanou rouru, přes kterou se Postfix a saslauthd propojují, což provedete úpravou proměnné OPTIONS
na konci konfiguračního souboru:
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
Zbývá nastavit Postfix jako takový. Ve výchozím stavu by TLS měl již podporovat, pokud ne, doplňte do main.cf
následující řádky:
smtpd_tls_cert_file=/cesta/k/ssl/certifikatu.pem smtpd_tls_key_file=/cesta/k/soukromemu/klici.key smtpd_use_tls=yes smtpd_tls_auth_only = yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
K šifrovanému spojení je pochopitelně třeba certifikát. Výchozí automaticky vygenerovaný certifikát je podepsaný sám sebou, což nemusí být z hlediska bezpečnosti úplně nejvhodnější (vaši uživatelé nemají jak si ověřit, zda je daný certifikát skutečně váš a ne podstrčený nějakou třetí osobou v rámci man-in-the-middle útoku). Máte-li certifikát k doméně poštovního serveru podepsaný nějakou známou certifikační autoritou, bývá dobré jej použít místo něj (v takovém případě upravte smtpd_tls_cert_file
a smtpd_tls_key_file
). Připomínám, že existují certifikační autority, kde můžete získat certifikát zdarma (např. CACert, StartSSL).
TLS jako takové zapíná volba smtpd_use_tls
, přičemž vynucení autentifikace pouze přes TLS řídí volba smtpd_tls_auth_only
.
Kromě řádků výše je třeba zprovoznit i SASL autentifikaci. Přidejte tedy do main.cf
následující řádky:
smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = no smtpd_sasl_authenticated_header = yes
Autentifikace pomocí SASL se zapíná proměnnou smtpd_sasl_auth_enable
. Bývá dobré vypnout anonymní autentifikaci, tedy nastavit proměnnou smtpd_sasl_security_options
na hodnotu noanonymous
. Ne všichni klienti podporují aktuální verzi příkazu AUTH, jako např. MS Outlook Express 4 či Exchange 5. Chcete-li zajistit kompatibilitu vašeho serveru i s takovými klienty, nastavte broken_sasl_auth_clients
na hodnotu yes
. A konečně poslední proměnná (smtpd_sasl_authenticated_header
) řídí, zda v hlavičkách e-mailu bude zanesena informace o tom, který autentifikovaný uživatel danou zprávu zaslal. Pro lepší názornost uvádím příklad takové hlavičky se znázorněním příslušného řádku:
Received: from localhost.localdomain (unknown [1.2.3.4])
(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
(No client certificate requested)
(Authenticated sender: michal)
by server.example.net (Postfix) with ESMTPSA id 2A0D62970025
for <michal@server.example.net>; Thu, 31 May 2012 22:43:24 +0200 (CEST)
Výše uvedené nastavení řeklo Postfixu, aby podporoval TLS a SASL autentifikaci. Vy ale chcete uživatelům autentifikovaným přes SASL umožnit odesílat poštu. Za tímto účelem je ještě třeba upravit proměnnou smtpd_recipient_restrictions
(viz minulý díl seriálu, kde byla tato problematika podrobně popsána). Na správné místo je třeba přidat permit_sasl_authenticated
, obvykle za permit_mynetworks
:
smtpd_recipient_restrictions = reject_unauth_pipelining, reject_non_fqdn_recipient, reject_unknown_recipient_domain, permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_unauth_destination, permit
Dodám, že výše uvedené nastavení smtpd_recipient_restrictions
může být pro některé použití až příliš restriktivní, berte jej tedy pouze jako příklad a ne jako vzor, který je třeba následovat.
Zbývají dva poslední kroky. Nejprve je třeba vytvořit soubor /etc/postfix/sasl/smtpd.conf
a zapsat do něj následující řádek:
pwcheck_method: saslauthd
Druhým krokem je přidání uživatele „postfix“ do skupiny „sasl“, čímž umožníte Postfixu komunikovat se saslauthd:
gpasswd -a postfix sasl
Poté restartujte saslauthd a Postfix:
service saslauthd restart service postfix restart
Nyní můžete vyzkoušet nakonfigurovat poštovního klienta k odesílání pošty přes váš server. Nezapomeňte v jeho nastavení povolit TLS a SMTP autentifikaci.
Čtení pošty, POP3, IMAP4 a Dovecot
Dovecot podporuje obě varianty obou protokolů pro přístup k poště, tedy POP3 a jeho SSL variantu POP3S, dále IMAP4 a jeho SSL variantu IMAPS. Umí samozřejmě podporovat i TLS, tedy šifrování na transportní vrstvě. Záleží jen na vás, které varianty zvolíte. Chcete-li zvolit všechny, upravte konfigurační soubor /etc/dovecot/dovecot.conf
a upravte řádku s protokoly, takto:
protocols = imap imaps pop3 pop3s
Používáte-li SSL varianty protokolů nebo chcete-li použít TLS, je třeba opět provést patřičné nastavení:
ssl = yes ssl_cert_file = /etc/ssl/certs/dovecot.pem ssl_key_file = /etc/ssl/private/dovecot.pem disable_plaintext_auth = yes ssl = required
Většina voleb je zde asi jasná. disable_plaintext_auth
zakáže plaintextovou autentifikaci a ssl = required
zajistí, že bude SSL/TLS vyžadováno i pro neplaintextovou autentifikaci.
Aby Dovecot mohl přistupovat k vaší poště, je třeba mu říci, kde ji má hledat. k tomu slouží proměnná mail_location
, která má poměrně komplexní syntax a která je dobře popsána přímo v konfiguračním souboru. Používáte-li výchozí nastavení, tj. schránky typu MBOX ve /var/mail/uzivatel
, nastavte mail_location
takto:
mail_location = mbox:~/mail:INBOX=/var/mail/%u
Pro to nejzákladnější nastavení by tyto volby měly stačit. Restartujte Dovecot a můžete začít testovat pomocí poštovního klienta:
service dovecot restart
Pro jednotlivé protokoly lze specifikovat, na kterých IP adresách a portech má démon naslouchat, viz následující příklad:
protocol imap { listen = 127.0.0.1:143 ssl_listen = *:993 }
Hvězdička značí všechna rozhraní. Tento příklad by zajistil, že nešifrovaný IMAP je přístupný pouze lokálně, zatímco IMAPS je dostupný na všech síťových rozhraních serveru. Toto je samozřejmě pouze ilustrační příklad, pro zakázání nešifrované autentifikace tento postup není třeba – vhodnější je zakázat plaintextovou autentifikaci (viz výše).
Podobným způsobem je také možné každé službě přiřadit jiný SSL certifikát – stačí použít příslušné volby (ssl_cert_file
a ssl_key_file
) taktéž uvnitř sekce protocol
. Možnosti konfigurace Dovecotu jsou velmi bohaté, proto doporučuji se podívat do manuálových stránek nebo na wiki Dovecotu.