Poštovní server
s virtuálními účty trochu jinak
29.10.2015

Obsah

Úvod

Toto je návod na sestavení poštovního serveru s virtuálními účty. K tomu stačí jen SMTP server Postfix a na příjem pošty pro klienty je použit IMAP a POP3 server Dovecot. K uložení virtuálních účtů jsou použity textové soubory, není tedy potřeba žádný databázový server. Samozřejmě musí existovat na DNS serverech odpovídající MX záznamy pro jednotlivé domény, směřující na vytvářený server. V textu používám jako příklad neexistující domény a poštovní adresy. V tomto popisu využívám standardní balíčky z distribuce GNU/Linuxu openSUSE 10.3, ale neměl by být problém návod aplikovat na jakoukoliv jinou distribuci Linuxu. Všechny práce provádí root.

Co je kde uloženo:
seznam domén/etc/postfix/vdomains
seznam adres/etc/postfix/vmailboxes
seznam aliasů/etc/postfix/valiases
konfigurační soubor Postfix/etc/postfix/main.cf
seznam adres a hesel/etc/dovecot/passwd
konfigurační soubor Dovecot/etc/dovecot/dovecot.conf
adresář pro uložení pošty/var/spool/mail
log činnosti Postfixu i Dovecotu/var/log/mail

SMTP server Postfix

Všechny domény jsou uloženy v souboru:
/etc/postfix/vdomains
domena1.xx 	domena1.xx
domena2.xx 	domena 2
domena3.xx 	3
První sloupec je název domény, ve druhém sloupci může být cokoliv, ale něco tam být MUSÍ.
Po jakékoliv změně v souboru je nutné VŽDY provést příkaz:
postmap /etc/postfix/vdomains
Příkaz postmap vytváří z textového souboru databázi, ze které čte Postfix. Samotný Postfix není třeba reloadovat.
Existují dva způsoby uložení pošty na disku pro jednotlivé účty. Buď je všechna pošta uživatele uložena v jediném souboru, to je formát mailbox. Nebo jsou jednotlivé zprávy uživatele uloženy v separátních souborech v adresáři uživatele, to je formát maildir. Seznam všech poštovních adres je v souboru:
/etc/postfix/vmailboxes (pro formát mailbox)
josef@domena1.xx    josef@domena1.xx
emil@domena2.xx     emil@domena2.xx
franta@domena2.xx   franta@domena2.xx
franta@domena3.xx   franta@domena3.xx
nebo:
/etc/postfix/vmailboxes (pro formát maildir)
josef@domena1.xx    josef@domena1.xx/
emil@domena2.xx     emil@domena2.xx/
franta@domena2.xx   franta@domena2.xx/
franta@domena3.xx   franta@domena3.xx/
V prvním sloupci je celý název poštovní adresy účtu a v druhém sloupci je název schránky na disku serveru. Doporučuji používat poštovní adresu. V případě, že budete používat formát maildir, přidejte na konec názvu schránky znak '/'.
Po jakékoliv změně v souboru je nutné VŽDY provést příkaz:
postmap /etc/postfix/vmailboxes
Poštovní aliasy (přezdívky) jsou v souboru:
/etc/postfix/valiases
pepa@domena1.xx     josef@domena1.xx
emil@domena2.xx     emil@domena2.xx, emil@jinam.xx
frantici@domena1.xx franta@domena2.xx, franta@domena3.xx
Tedy pošta pro pepa@domena1.xx je přesměrována do schránky uživatele josef@domena1.xx.
Pošta pro emil@domena2.xx je navíc přeposlána na jiný server, na adresu emil@jinam.xx.
A pošta pro frantici@domena1.xx je přesměrována na uživatele franta@domena2.xx a franta@domena3.xx.
Po jakékoliv změně v souboru je nutné VŽDY provést příkaz:
postmap /etc/postfix/valiases
Do stávajícího konfiguračního souboru Postfixu je nutné přidat:
/etc/postfix/main.cf
virtual_transport = virtual
virtual_minimum_uid = 51
virtual_uid_maps = static:51
virtual_gid_maps = static:51
virtual_mailbox_base = /var/spool/mail
virtual_mailbox_domains = hash:/etc/postfix/vdomains
virtual_mailbox_maps = hash:/etc/postfix/vmailboxes
virtual_alias_maps = hash:/etc/postfix/valiases
V případě, že je počet domén malý, je možné je přímo vypsat v konfiguračním souboru Postfixu, například:
virtual_mailbox_domains = domena1.xx, domena2.xx, domena3.xx
Pochopitelně pak nepotřebujete soubor vdomains. Číslo 51 je UID účtu postfix ze souboru /etc/passwd.
Po jakékoliv změně v konfiguračním souboru je nutné VŽDY znovunačíst konfiguraci pro Postfix:
/etc/init.d/postfix reload
nebo v openSUSE:
rcpostfix reload
Nyní lze funkčnost poštovního serveru otestovat, například jednoduchým programem mail z balíčku mailx. Takto lze provést test, kdy uživatel emil@domena2.xx posílá poštu uživateli josef@domena1.xx:
mail -r emil@domena2.xx josef@domena1.xx
A takto si lze přečíst poštu pro uživatele josef@domena1.xx (pochopitelně musíte být root):
mail -f /var/spool/mail/josef@domena1.xx
Pokud něco nefunguje, vyplatí se podívat do logu Postfixu (/var/log/mail), kde je záznam jeho činnosti. Příkaz postmap navíc slouží k testování dotazů, například:
# postmap -q domena2.xx /etc/postfix/vdomains
domena 2

IMAP a POP3 server Dovecot

Nejprve vytvoříme soubor /etc/dovecot/passwd, kde jsou uložena hesla pro jednotlivé virtuální uživatele.
/etc/dovecot/passwd
josef@domena1.xx:{PLAIN}heslo
emil@domena2.xx:{MD5}$1$xxmfJp2Z$Xsz0LQxTf4ChK.sMm8QKI0
franta@domena2.xx:{SSHA}KgzVZlGq9+JlT5kGWEtk4nT1+dlPZOE7
franta@domena3.xx:{CRYPT}omNJtqTs2QvTY
V prvním sloupci je název schránky (totéž, co je ve druhém sloupci souboru vmailboxes). Druhý sloupec, oddělený dvojtečkou, obsahuje typ kódování (uzavřený ve složených závorkách) a zakódované heslo. Soubor musí končit prázdným řádkem. Různé druhy kódování hesla zjistíte na staré verzi příkazem /usr/sbin/dovecotpw -l. Zakódované heslo pak získáte pomocí /usr/sbin/dovecotpw -s 'typ kodovani'. V novější verzi se používá příkaz /usr/sbin/doveadm pw, ostatní parametry jsou už stejné. Například:
hostname:~ # /usr/sbin/dovecotpw -s crypt
Enter new password: 
Retype new password: 
{CRYPT}omNJtqTs2QvTY
Nebo zjištění všech možných druhů kódování hesla na novějších verzích:
hostname:~ # doveadm pw -l
CRYPT MD5 MD5-CRYPT SHA SHA1 SHA256 SHA512 SMD5 SSHA SSHA256 SSHA512 PLAIN CLEAR 
CLEARTEXT PLAIN-TRUNC CRAM-MD5 HMAC-MD5 DIGEST-MD5 PLAIN-MD4 PLAIN-MD5 LDAP-MD5 
LANMAN NTLM OTP SKEY RPA BLF-CRYPT SHA256-CRYPT SHA512-CRYPT 
V konfiguračním souboru Dovecotu je zapotřebí nastavit autentifikaci ze souboru.
/etc/dovecot/dovecot.conf
auth default {
  mechanisms = plain
  passdb passwd-file {
    args = /etc/dovecot/passwd
  }
  userdb static {
    args = uid=51 gid=51
  }
}
Číslo 51 je UID účtu postfix ze souboru /etc/passwd.
Dále je nutno informovat, kde jsou uloženy schránky pro virtuální uživatele.
/etc/dovecot/dovecot.conf (pro formát mailbox)
mail_location = mbox::INBOX=/var/spool/mail/%u:INDEX=MEMORY
Podrobnější informace naleznete v dokumentaci pro Dovecot, stránka mbox configuration.
/etc/dovecot/dovecot.conf (pro formát maildir)
mail_location = maildir:/var/spool/mail/%u
Minimální konfigurační soubor Dovecotu pak vypadá například takto:
/etc/dovecot/dovecot.conf
protocols = pop3 imap
ssl_disable = yes
disable_plaintext_auth = no
mail_location = maildir:/var/spool/mail/%u
pop3_uidl_format = %08Xu%08Xv

first_valid_uid = 51
first_valid_gid = 51
last_valid_uid = 51
last_valid_gid = 51

auth_verbose = yes
auth default {
  mechanisms = plain
  passdb passwd-file {
    args = /etc/dovecot/passwd
  }
  userdb static {
    args = uid=51 gid=51
  }
}
Po jakékoliv změně v konfiguračním souboru je nutné VŽDY znovunačíst konfiguraci pro Dovecot:
/etc/init.d/dovecot reload
nebo v openSUSE:
rcdovecot reload
Záznam činnosti Dovecotu je také v /var/log/mail.

Závěr

Porovnání výkonnosti tohoto serveru (FILE) s poštovním serverem na bázi MySQL:
Bylo vygenerováno 10 domén a v každé z nich 100 adres, celkem tedy 1000 virtuálních poštovních účtů. Dále byl napsán program, který po spuštění vytvořil 100 vláken a z každého vlákna poslal 100 zpráv na náhodné testovací adresy, celkem tedy 10 000 mailů. Pak byla měřena doba (příkaz time), do kdy byly všechny maily uloženy do schránek a některé další hodnoty, jako počet procesů a průměrné zatížení (loadavg). V případě verze s MySQL musela být v konfiguračním souboru databáze MySQL (/etc/my.cnf) zvýšena hodnota max_connections na 500.
Průměrné zatížení dosahovalo hodnoty až 100. Počet procesů při nezatíženém systému byl cca 200, při zatížení u tohoto serveru byl počet procesů maximálně 600 a u serveru s MySQL stoupal až na 800. Průměrné časy ze tří měření:
FILE
real    1m8.8s
user    0m8.7s
sys     0m3.7s
MySQL
real    1m17.7s
user    0m8.6s
sys     0m3.6s
Zde popsaný server dosahuje stejného výkonu jako server postavený na bázi MySQL, navíc je šetrnější ke zdrojům počítače. Nevýhodou je zatím chybějící nástroj pro zakládání a údržbu jednotlivých účtů*). Po instalaci programu Amavis-new získáte navíc antispamovou i antivirovou (Clamav) kontrolu.

*) čtěte volné pokračování Poštovní server s virtuálními účty trochu jinak II.

Kontakt

http://jiri.jozif.googlepages.com
email: jiri.jozif (zavináč) gmail (tečka) com
Původní článek vyšel na serveru linuxzone.cz.