Návod krok za krokem, jak si nastavit poštovní server

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.

 

Příspěvek byl publikován v rubrice Debian, Dovecot, Linux, Postfix, SSL. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

3 komentáře u Návod krok za krokem, jak si nastavit poštovní server

  1. Jan Daniel napsal:

    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.

    • Heron napsal:

      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.

  2. Pingback: Služby a programy, které používám | Heronovo

Komentáře nejsou povoleny.