Nastavení poštovního serveru je poměrně snadné a v podstatě se sestává z instalace postfix a dovecotu přímo z distribuce (platí alespoň pro RHEL, Debian a Ubuntu, předpokládám, že v ostatních distribucích to bude stejné). Funguje to out of the box už pořádně dlouho, stačí v podstatě nastavit jen mydomain a MX záznamy. V praxi je toho potřeba o malinko víc.
K nastavení plnohodnotného emailového serveru na svém servříku mě donutila politika Google. Ano, jsem debil, měl jsem doménu u Google Apps. To dřív bylo zdarma, Google teď nové Apps zpoplatňuje, staré jsou (zatím) stále zdarma. Chtěl jsem si ušetřit práci, jelikož se o servery starám denně v práci a nechtěl jsem to dělat ještě doma. Bohužel, Google se mění a dalšího volného poskytovatele služeb hledat už nechci.
Tento návod se týká distribuce Debian GNU/Linux ve verzi Wheeze.
Požadavky
Moje požadavky jsou poměrně minimalistické:
- SMTP
- IMAP
- Lokální systémové účty
Pokud vám tyto požadavky nedostačují a chcete si přečíst něco o víc o nastavení poštovního serveru včetně virtuálních uživatelů, anti-spamových -virových kontrol, doporučují vám vynikající ucelený seriál stavíme poštovní server od Lukáše Jelínka.
V trochu rozšířenější variantě jsou požadavku přesahující emailový server:
- Sieve – filtry pro poštu na serveru
- Webmail
Instalace Postfixe
Z CentOSu jsem zvyklý na SMTP server Postfix, předpokládám, že Debianisté by spíše použili výchozí Exim.
aptitude install postfix
Nastavení:
Nebudu zde dávat kompletní nastavení v souboru /etc/postfix/main.cf
, jen a pouze moje změny v jeho nastavení. Zbytek je z distribuce ok.
Je třeba nastavit především doménu, pro kterou má postfix poštu přijímat. Dále nastavit původ pro odchozí poštu bez vyplněné doménové části (uživatel root
pošle systémovou zprávu apod.). Původ (myorigin
) je v Debianu uložen v souboru /etc/mailname
. Plné doménové jméno (parametr myhostname
) by mělo mít korektní dopředný DNS záznam a také zpětný (PTR) záznam.
mydestination = mojedomena.cz myorigin = /etc/mailname myhostname = postak.mojedomena.cz
DNS záznamy potom budou vypadat (včetně příkazů dig, jak si lze záznamy ověřit):
Dopředný:
dig postak.mojedomena.cz. ANY postak.mojedomena.cz. 3600 IN A 012.345.678.9
Zpětný:
dig -x 012.345.678.9 # doplňte reálnou IP z předchozího dotazu na doménové jméno ;-) 9.678.345.012.in-addr.arpa. 86400 IN PTR postak.mojedomena.cz.
MX:
dig mojedomena.cz. MX mojedomena.cz. 3600 IN MX 10 postak.mojedomena.cz.
Nastavení autentizace pro klienta:
Přihlášení je možné pouze za použití šifrování (TLS), toto zajišťuje nastavení smtpd_tls_auth_only = yes
. Jako certifikát jsem použil selfsigned, který si potom naimportuji do všech svých klientů. Pozn: ke klíči nikdo nesmí mít přístup, práva jsou root.root 400.
smtpd_tls_cert_file=/etc/ssl/mojedomena/mojedomena.crt smtpd_tls_key_file=/etc/ssl/mojedomena/mojedomena.key smtpd_use_tls=yes smtpd_tls_auth_only = yes
O přihlašování uživatelů (SASL) a doručování do schránek (díky tomu lze snad použít sieve i s managesieve) se bude starat Dovecot.
mailbox_command = /usr/lib/dovecot/deliver smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes broken_sasl_auth_clients = yes
Tím je nastavení Postfixe hotové.
Instalace a nastavení Dovecot IMAP
Dovecot toho umí zatraceně hodně. V základu se jedná o POP3 a IMAP server (tedy server pro přístup ke schránkám), ovšem díky systémů pluginů jej lze můžeme použít i jako samotného doručovatele do chránek (to je onen příkaz deliver
v konfiguraci postfixe mailbox_command
) což díky dalším pluginům umožnuje například filtrování.
aptitude install dovecot-imapd dovecot-managesieved dovecot-sieve
Samotné nastavení je rozdělené do mnoha souborů v adresáři /etc/dovecot/conf.d
.
10-mail.conf
Osobně mám rád adresář s emailovou schránkou schovaný, takže jej nastavuji na .Maildir
:
mail_location = maildir:~/.Maildir
10-master.conf
Tedy jde o smtp-auth, tohle je pro SASL ověřování v postfixu:
service auth { unix_listener auth-userdb { #mode = 0666 #user = #group = } # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0666 } # Auth process is run as this user. #user = $default_internal_user }
10-ssl.conf
Nastavení cesty k x509 certifikátu. Používám se stejný crt jako v postixu, jedná se o stejnou doménu (common name). Jde o selfsigned, pro crt podepsaný od nějaké CA by bylo ještě nutné zadat cestu k CA CRT.
ssl_cert = </etc/ssl/mojedomena/mojedomena.crt ssl_key = </etc/ssl/mojedomena/mojedomena.key
15-lda.conf
Aktivace pluginů. V tomto případě sieve.
protocol lda { # Space separated list of plugins to load (default is global mail_plugins). mail_plugins = sieve }
20-managesieve.conf
Nastavení protokolu managesieve.
service managesieve-login { inet_listener sieve { port = 4190 } }
90-sieve.conf
Nastavení sieve. Opět mám rád, když v home nezavazí adresáře a soubory určené pro stroj, nikoliv uživatele.
plugin { sieve = ~/.dovecot.sieve sieve_dir = ~/.sieve sieve_extensions = +notify +imapflags recipient_delimiter = + }
V této chvíly máme funkční emailový server. Otestuje si jej například pomocí MXToolBox.
Webmail RoundCube
Jako webmail jsem vybral poměrně pěkný RoundCube. Umí spolupracovat i s managesieve, uživatelé si tak mohou naklikat filtry a nemusejí si je psát ručně (i když to není nic těžkého). Jako backend pro roundcube předpokládám již nainstalovaný PostgreSQL, verzi s SQLite jsem nezkoušel. Debianí instalátor se o db pro roundcube postará i v psql, není třeba nic nastavovat.
aptitude install roundcube roundcube-core roundcube-pgsql roundcube-plugins
Děkuji Zdeňku Burdovi za pěkný návod na Roundube a Sieve.
Změny v souboru /etc/roundcube/main.inc.php
:
Zde se nastaví jen výchozí server, aby jej uživatel nemusel při přihlášení zadávat a plugin sieve.
$rcmail_config['default_host'] = 'localhost'; $rcmail_config['plugins'] = array('managesieve');
Do adresáře plugins/managesieve/
zkopírovat soubor /usr/share/roundcube/plugins/managesieve/config.inc.php.dist
do config.inc.php
. A zde upravit:
$rcmail_config['managesieve_port'] = 4190; $rcmail_config['managesieve_host'] = '%h'; $rcmail_config['managesieve_auth_type'] = null; $rcmail_config['managesieve_auth_cid'] = null; $rcmail_config['managesieve_auth_pw'] = null; $rcmail_config['managesieve_usetls'] = false; $rcmail_config['managesieve_mbox_encoding'] = 'UTF-8'; $rcmail_config['managesieve_replace_delimiter'] = ''; $rcmail_config['managesieve_disabled_extensions'] = array(); $rcmail_config['managesieve_debug'] = false;
A tím je dílo hotovo. :-)
Co dělat, když to nefunguje
Všechny kroky lze do jisté míry oddělit. Lze nainstalovat postfix jako smtp server s ukládáním do lokálních schránek (ve výchozím stavu tak je nastaven) a vyzkoušet poslat email. Třeba pomocí telnetu (SMTP je skutečně tak simple, že email odešle bez větších potíží i člověk připojený na TCP / 25 serveru. Pochopitelně bez šifrování.) Zvýrazněné řádky píše klient (člověk):
tomas:~$ telnet postak.mojedomena.cz 25 Trying 012.345.678.9 ... Connected to postak.mojedomena.cz. Escape character is '^]'. 220 postak.mojedomena.cz ESMTP Postfix (Debian/GNU) HELO host.jinadomena.cz 250 postak.mojedomena.cz MAIL FROM: uzivatel@jinadomena.cz 250 2.1.0 Ok RCPT TO: tomas@mojedomena.cz 250 2.1.5 Ok DATA 354 End data with . ahoj . 250 2.0.0 Ok: queued as DA37B191F6F1 QUIT 221 2.0.0 Bye Connection closed by foreign host.
A projít si tak všechny kroky nutné pro úspěšnou SMTP session a konzultovat to s logem na serveru (/var/log/mail.info
).
Stejně tak k Dovecotu jako IMAP serveru lze přistupovat zcela nezávisle na Postfixu nějakým klientem. Pokud nefunguje SASL, zkontrolujte, zda existuje cesta k příslušenému unix socketu a zda má dobře práva.
Nemáte obavy z absence antispamu a antiviru?
Sám jsem nedávno řešil instalaci mailserveru na VPS, kvůli rozesílání notifikací uživatelům a pro mé účty a řešil jsem jak nespadnout do spamu a jak nepřijímat hromady spamu… po hodinách čtení o instalaci jsem nakonec přistoupil na iRedMail, který postahuje balíčky z repozitáře a ponastavuje je. Ten ale nejde použít na jiném, než čerstvě nainstalovaném systému.
Nemám. Mimo článek je v Postfixu nastavená základní ochrana formální kontrolou.
smtpd_sender_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
check_sender_access hash:/etc/postfix/access_table,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_sender_login_mismatch,
permit
smtpd_recipient_restrictions =
permit_mynetworks,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
permit_sasl_authenticated,
reject_unauth_destination,
permit
Tedy email @mojedomena může poslat pouze přihlášení uživatel a potom jsou zde klasické kontroly na formát a existenci sender a recipient domény.
Můj názor je, že jakýkoliv další antispam je spíše ke škodě. Lze to krásně demonstrovat na příkladu, kdy email poslaný z tohoto serveru (korektní dopředný i zpětný záznam, není na blacklistu, koretní hlavičky email apod., vše zcela podle pravidel) na gmailu skončil ve spamovém koši. A nejedná se o vyjímku. Tedy ať chcete nebo ne, stejně je nutné ten koš pravidelně prozkoumávat. Pro mě je lepší, když to skončí v INBOXu.
Samozřejmně nemám nic proti tomu, když si někdo nastaví hint od amavisd / spamassasinu / clamav, že stroj si myslí, že jde o spam / vir. Posoudit to ale stejně musí uživatel.
S iRedMailem mám bohužel špatnou zkušenost. Instalace sice probíhá tak jak píšete, ovšem na zatíženém emailovém serveru (aplikace odesílá desítky tisíc uživatelem vyžádaných a potřebných emailů) jsme všechny „další“ kontroly museli vypnout, jinak se to ani nehlo. Tj. nakonec jsme i s tím RedMailem museli hrabat přímo do postfix / amavisd apod.
Pingback: Služby a programy, které používám | Heronovo